diff --git a/src/greeting.js b/src/greeting.js new file mode 100644 index 0000000..1c8a2a1 --- /dev/null +++ b/src/greeting.js @@ -0,0 +1,5 @@ +function getGreeting() { + return 'Hello world'; +} + +module.exports = { getGreeting }; diff --git a/src/server.js b/src/server.js new file mode 100644 index 0000000..a9c5c59 --- /dev/null +++ b/src/server.js @@ -0,0 +1,17 @@ +const express = require('express'); +const { getGreeting } = require('./greeting'); + +const app = express(); +const PORT = process.env.PORT || 3000; + +app.get('/hello', (req, res) => { + res.send(getGreeting()); +}); + +if (require.main === module) { + app.listen(PORT, () => { + console.log(`Server listening on port ${PORT}`); + }); +} + +module.exports = app; diff --git a/tests/e2e/e2e.test.js b/tests/e2e/e2e.test.js new file mode 100644 index 0000000..cee3eea --- /dev/null +++ b/tests/e2e/e2e.test.js @@ -0,0 +1,24 @@ +const axios = require('axios'); +const app = require('../../src/server'); +let server; +let baseURL; + +beforeAll(done => { + server = app.listen(0, () => { + const { port } = server.address(); + baseURL = `http://127.0.0.1:${port}`; + done(); + }); +}); + +afterAll(done => { + server.close(done); +}); + +describe('E2E GET /hello', () => { + it('responds with Hello world', async () => { + const res = await axios.get(`${baseURL}/hello`); + expect(res.status).toBe(200); + expect(res.data).toBe('Hello world'); + }); +}); diff --git a/tests/integration/app.test.js b/tests/integration/app.test.js new file mode 100644 index 0000000..bb10075 --- /dev/null +++ b/tests/integration/app.test.js @@ -0,0 +1,10 @@ +const request = require('supertest'); +const app = require('../../src/server'); + +describe('GET /hello', () => { + it('should return Hello world', async () => { + const res = await request(app).get('/hello'); + expect(res.statusCode).toBe(200); + expect(res.text).toBe('Hello world'); + }); +}); diff --git a/tests/unit/greeting.test.js b/tests/unit/greeting.test.js new file mode 100644 index 0000000..779c26e --- /dev/null +++ b/tests/unit/greeting.test.js @@ -0,0 +1,7 @@ +const { getGreeting } = require('../../src/greeting'); + +describe('getGreeting', () => { + it('returns the hello world message', () => { + expect(getGreeting()).toBe('Hello world'); + }); +});