Repository navigation
Expand file tree
/
Copy pathhealth.route.test.js
More file actions
74 lines (59 loc) · 1.95 KB
/
Copy pathhealth.route.test.js
File metadata and controls
74 lines (59 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
'use strict';
const mockRedis = {
status: 'ready',
ping: jest.fn(),
};
jest.mock('mongoose', () => ({
connection: {
readyState: 1,
},
}));
jest.mock('@urbackend/common', () => ({
redis: mockRedis,
}));
const mongoose = require('mongoose');
const express = require('express');
const request = require('supertest');
const healthRoute = require('../routes/health');
describe('health route', () => {
let app;
beforeEach(() => {
jest.clearAllMocks();
mongoose.connection.readyState = 1;
mockRedis.status = 'ready';
mockRedis.ping.mockResolvedValue('PONG');
app = express();
app.use('/api/health', healthRoute);
});
test('returns ok when mongodb and redis are connected', async () => {
const res = await request(app).get('/api/health');
expect(res.status).toBe(200);
expect(res.body.status).toBe('ok');
expect(res.body.dependencies).toEqual({
mongodb: 'connected',
redis: 'connected',
});
expect(typeof res.body.timestamp).toBe('string');
expect(mockRedis.ping).toHaveBeenCalledTimes(1);
});
test('returns error when mongodb is disconnected', async () => {
mongoose.connection.readyState = 0;
const res = await request(app).get('/api/health');
expect(res.status).toBe(503);
expect(res.body.status).toBe('error');
expect(res.body.dependencies).toEqual({
mongodb: 'disconnected',
redis: 'connected',
});
});
test('returns error when redis is not responsive', async () => {
mockRedis.ping.mockRejectedValue(new Error('redis unavailable'));
const res = await request(app).get('/api/health');
expect(res.status).toBe(503);
expect(res.body.status).toBe('error');
expect(res.body.dependencies).toEqual({
mongodb: 'connected',
redis: 'disconnected',
});
});
});