Skip to content

Commit a5d71f5

Browse files
committed
add tests
1 parent 142994d commit a5d71f5

5 files changed

Lines changed: 783 additions & 18 deletions

File tree

index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const app = require('./server');
2+
const PORT = process.env.PORT || 3002;
3+
4+
app.listen(PORT, () => {
5+
console.log(`Server running on port ${PORT}`);
6+
});

package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"main": "server.js",
66
"scripts": {
77
"start": "node server.js",
8-
"dev": "nodemon server.js"
8+
"dev": "nodemon server.js",
9+
"test": "NODE_ENV=test mocha"
910
},
1011
"dependencies": {
1112
"axios": "^1.9.0",
@@ -15,7 +16,11 @@
1516
"redis": "^5.5.6"
1617
},
1718
"devDependencies": {
18-
"nodemon": "^3.0.0"
19+
"chai": "^5.2.1",
20+
"mocha": "^11.7.1",
21+
"nodemon": "^3.0.0",
22+
"proxyquire": "^2.1.3",
23+
"supertest": "^7.1.4"
1924
},
2025
"private": true,
2126
"license": "CC0-1.0"

server.js

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,26 @@ require('dotenv').config();
33
const express = require('express');
44
const app = express();
55

6-
// Import the id_plus route
76
const idPlusRoute = require('./routes/id_plus');
87
const docvRoute = require('./routes/docv');
98
const dosRoute = require('./routes/dos');
109

1110
app.use(express.json());
12-
13-
// Mount the /id_plus route
1411
app.use('/api/3.0/EmailAuthScore', idPlusRoute);
15-
// Mount the /docv route
1612
app.use('/docv', docvRoute);
17-
// Mount the /dos route
1813
app.use('/dos', dosRoute);
1914

20-
if (process.env.NODE_ENV === 'production') {
21-
// Global error handler (add this before app.listen)
15+
if (process.env.NODE_ENV === 'test') {
16+
app.get('/error', (req, res, next) => {
17+
next(new Error('Test error'));
18+
});
19+
}
20+
21+
if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test') {
2222
app.use((err, req, res, next) => {
2323
console.error(err.stack);
2424
res.status(500).json({ error: 'Internal Server Error' });
2525
});
2626
}
2727

28-
const PORT = process.env.PORT;
29-
app.listen(PORT, () => {
30-
console.log(`Server running on port ${PORT}`);
31-
});
28+
module.exports = app;

test/server.test.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
const proxyquire = require('proxyquire').noCallThru();
2+
const request = require('supertest');
3+
const { expect } = require('chai');
4+
const express = require('express');
5+
6+
describe('Server', function () {
7+
let app;
8+
let server;
9+
10+
// Mock route handlers
11+
const idPlusRoute = express.Router().get('/', (req, res) => res.json({ route: 'id_plus' }));
12+
const docvRoute = express.Router().get('/', (req, res) => res.json({ route: 'docv' }));
13+
const dosRoute = express.Router().get('/', (req, res) => res.json({ route: 'dos' }));
14+
15+
before(function () {
16+
// Proxyquire to inject mocks
17+
app = proxyquire('../server', {
18+
'./routes/id_plus': idPlusRoute,
19+
'./routes/docv': docvRoute,
20+
'./routes/dos': dosRoute,
21+
dotenv: { config: () => {} }
22+
});
23+
24+
server = app;
25+
});
26+
27+
it('should mount /api/3.0/EmailAuthScore', async function () {
28+
const res = await request(server).get('/api/3.0/EmailAuthScore');
29+
expect(res.status).to.equal(200);
30+
expect(res.body.route).to.equal('id_plus');
31+
});
32+
33+
it('should mount /docv', async function () {
34+
const res = await request(server).get('/docv');
35+
expect(res.status).to.equal(200);
36+
expect(res.body.route).to.equal('docv');
37+
});
38+
39+
it('should mount /dos', async function () {
40+
const res = await request(server).get('/dos');
41+
expect(res.status).to.equal(200);
42+
expect(res.body.route).to.equal('dos');
43+
});
44+
45+
it('should handle errors globally in production', async function () {
46+
server.get('/error', (req, res, next) => { next(new Error('Test error')); });
47+
const res = await request(server).get('/error');
48+
expect(res.status).to.equal(500);
49+
expect(res.body).to.have.property('error', 'Internal Server Error');
50+
});
51+
});

0 commit comments

Comments
 (0)