Files
Immich/server/src/controllers/notification-admin.controller.spec.ts
T
Yaros eca952720a fix: permission for admin notification endpoints (#32567)
(cherry picked from commit 045d295d2d0b506af6f2abe14d1ed2cb89c5235f)
2026-10-27 23:12:13 +03:00

67 lines
2.5 KiB
TypeScript

import request from 'supertest';
import { NotificationAdminController } from 'src/controllers/notification-admin.controller.js';
import { Permission } from 'src/enum.js';
import { NotificationAdminService } from 'src/services/notification-admin.service.js';
import { factory } from 'test/small.factory.js';
import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js';
describe(NotificationAdminController.name, () => {
let ctx: ControllerContext;
const service = mockBaseService(NotificationAdminService);
beforeAll(async () => {
ctx = await controllerSetup(NotificationAdminController, [
{ provide: NotificationAdminService, useValue: service },
]);
return () => ctx.close();
});
beforeEach(() => {
service.resetAllMocks();
ctx.reset();
});
describe('POST /admin/notifications', () => {
it('should accept a null readAt', async () => {
await request(ctx.getHttpServer())
.post(`/admin/notifications`)
.send({ title: 'Test', userId: factory.uuid(), readAt: null });
expect(service.create).toHaveBeenCalledWith(undefined, expect.objectContaining({ readAt: null }));
});
it('should require notification create permission', async () => {
await request(ctx.getHttpServer()).post(`/admin/notifications`).send({ title: 'Test', userId: factory.uuid() });
expect(ctx.authenticate).toHaveBeenCalledWith(
expect.objectContaining({
metadata: expect.objectContaining({ permission: Permission.NotificationCreate, adminRoute: true }),
}),
);
});
});
describe('POST /admin/notifications/test-email', () => {
it('should require notification create permission', async () => {
await request(ctx.getHttpServer()).post(`/admin/notifications/test-email`).send({});
expect(ctx.authenticate).toHaveBeenCalledWith(
expect.objectContaining({
metadata: expect.objectContaining({ permission: Permission.NotificationCreate, adminRoute: true }),
}),
);
});
});
describe('POST /admin/notifications/templates/:name', () => {
it('should require notification create permission', async () => {
await request(ctx.getHttpServer()).post(`/admin/notifications/templates/welcome`).send({ template: '' });
expect(ctx.authenticate).toHaveBeenCalledWith(
expect.objectContaining({
metadata: expect.objectContaining({ permission: Permission.NotificationCreate, adminRoute: true }),
}),
);
});
});
});