Files
sso-manager-node/nodejs/tests/notification.test.js
2026-07-01 11:10:09 -04:00

107 lines
3.3 KiB
JavaScript

'use strict';
// Tests for the notification API:
// POST /api/notification/ — create & send notification
// GET /api/notification/ — list notifications
// GET /api/notification/:id — get single notification
const { login, request, app } = require('./setup');
let token;
let notificationId;
beforeAll(async () => {
token = await login();
});
describe('Notifications — POST /api/notification/ (create)', () => {
test('requires auth — 401 without token', async () => {
const res = await request(app)
.post('/api/notification/')
.send({ subject: 'Test', message: 'Hello', filter_type: 'all' });
expect(res.status).toBe(401);
});
test('missing required fields returns 400', async () => {
const res = await request(app)
.post('/api/notification/')
.set('auth-token', token)
.send({ subject: 'No message or filter_type' });
expect(res.status).toBe(400);
});
test('admin can create a notification targeting an empty user list (no emails sent)', async () => {
const res = await request(app)
.post('/api/notification/')
.set('auth-token', token)
.send({
subject: 'Jest test notification',
message: 'This notification was created by the automated test suite.',
filter_type: 'users',
filter_value: '[]', // empty recipient list — no emails sent
});
expect(res.status).toBe(200);
expect(res.body).toHaveProperty('results');
expect(res.body.results).toHaveProperty('subject', 'Jest test notification');
notificationId = res.body.results.token || res.body.results.id;
});
});
describe('Notifications — GET /api/notification/ (list)', () => {
test('requires auth — 401 without token', async () => {
const res = await request(app).get('/api/notification/');
expect(res.status).toBe(401);
});
test('admin can list notifications', async () => {
const res = await request(app)
.get('/api/notification/')
.set('auth-token', token);
expect(res.status).toBe(200);
expect(Array.isArray(res.body.results)).toBe(true);
});
test('list includes the notification created above', async () => {
// notificationId may be undefined if the create test above was skipped on error
if (!notificationId) return;
const res = await request(app)
.get('/api/notification/')
.set('auth-token', token);
const found = res.body.results.find(n => (n.token || n.id) === notificationId);
expect(found).toBeDefined();
expect(found.subject).toBe('Jest test notification');
});
});
describe('Notifications — GET /api/notification/:id (single)', () => {
test('requires auth — 401 without token', async () => {
if (!notificationId) return;
const res = await request(app).get(`/api/notification/${notificationId}`);
expect(res.status).toBe(401);
});
test('admin can retrieve a notification by id', async () => {
if (!notificationId) return;
const res = await request(app)
.get(`/api/notification/${notificationId}`)
.set('auth-token', token);
expect(res.status).toBe(200);
expect(res.body).toHaveProperty('results');
expect(res.body.results.subject).toBe('Jest test notification');
});
test('unknown id returns an error', async () => {
const res = await request(app)
.get('/api/notification/00000000-0000-0000-0000-000000000000')
.set('auth-token', token);
expect(res.status).toBeGreaterThanOrEqual(400);
});
});