test( "given that CUBEJS_ENABLE_TLS is not true, " + "should create an http server that listens to the PORT", async () => { // arrange const server = new CubeServer(); // act await server.listen(); // assert expect(http.createServer).toHaveBeenCalledTimes(1); expect(http.__mockServer.listen).toHaveBeenCalledTimes(1); expect(http.__mockServer.listen.mock.calls[0][0]).toBe(4000); } );
test("should not be able to listen if the server is already listening", async () => { // arrange process.env.CUBEJS_ENABLE_TLS = "false"; let cubeServer = new CubeServer(); // act try { await cubeServer.listen(); await cubeServer.listen(); } catch (err) { // assert expect(err.message).toBe("CubeServer is already listening"); expect(http.createServer).toHaveBeenCalledTimes(1); expect(http.__mockServer.listen).toHaveBeenCalledTimes(1); expect(cubeServer.server).not.toBe(null); } });
test( "given that CUBEJS_ENABLE_TLS is true, " + "should create an http server listening to PORT to redirect to https", async () => { // arrange process.env.CUBEJS_ENABLE_TLS = "true"; const server = new CubeServer(); // act await server.listen(); // assert expect(http.createServer).toHaveBeenCalledTimes(1); expect(http.createServer.mock.calls[0][0].toString()).toMatchSnapshot(); expect(server.redirector).toBe(http.__mockServer); expect(http.__mockServer.listen).toHaveBeenCalledTimes(1); expect(http.__mockServer.listen.mock.calls[0][0]).toBe(4000); } );
test( "given a failed server listen, " + "should reject the error and reset the server and redirector members to null", async () => { // arrange process.env.CUBEJS_ENABLE_TLS = "false"; const error = new Error("I'm a Teapot"); http.__mockServer.listen.mockImplementationOnce( (opts, cb) => cb && cb(error) ); let cubeServer = new CubeServer(); // act try { await cubeServer.listen(); } catch (err) { // assert expect(err).toBe(error); expect(cubeServer.redirector).toBe(null); expect(cubeServer.server).toBe(null); } } );
test("given a successful server listen, should resolve the app, the port(s) and the server instance", async () => { // arrange process.env.CUBEJS_ENABLE_TLS = "true"; const options = { key: true, cert: true }; let cubeServer = new CubeServer(); // act var { app, port, tlsPort, server } = await cubeServer.listen(options); // assert expect(app).toBeInstanceOf(Function); expect(port).toBe(4000); expect(tlsPort).toBe(4433); expect(server).toBe(https.__mockServer); // arrange process.env.CUBEJS_ENABLE_TLS = "false"; cubeServer = new CubeServer(); // act var { app, port, server } = await cubeServer.listen(options); // assert expect(app).toBeInstanceOf(Function); expect(port).toBe(4000); expect(server).toBe(http.__mockServer); });