velody/backend/src/modules/users/default-user.service.spec.ts

60 lines
1.8 KiB
TypeScript

import { randomUUID } from 'node:crypto';
import { DefaultUserService } from './default-user.service';
describe('DefaultUserService', () => {
it('upserts the bootstrap default owner with stable ownership metadata', async () => {
const defaultUser = {
id: randomUUID(),
slug: DefaultUserService.defaultOwnerSlug,
displayName: DefaultUserService.defaultOwnerDisplayName,
isDefault: true,
createdAt: new Date(),
updatedAt: new Date(),
};
const prismaService = {
user: {
upsert: jest.fn().mockResolvedValue(defaultUser),
},
} as any;
const service = new DefaultUserService(prismaService);
await expect(service.getOrCreateDefaultUser()).resolves.toEqual(defaultUser);
expect(prismaService.user.upsert).toHaveBeenCalledWith({
where: {
slug: DefaultUserService.defaultOwnerSlug,
},
update: {
displayName: DefaultUserService.defaultOwnerDisplayName,
isDefault: true,
},
create: {
slug: DefaultUserService.defaultOwnerSlug,
displayName: DefaultUserService.defaultOwnerDisplayName,
isDefault: true,
},
});
});
it('creates the bootstrap default owner during application startup', async () => {
const service = new DefaultUserService({
user: {
upsert: jest.fn(),
},
} as any);
const getOrCreateDefaultUserSpy = jest
.spyOn(service, 'getOrCreateDefaultUser')
.mockResolvedValue({
id: randomUUID(),
slug: DefaultUserService.defaultOwnerSlug,
displayName: DefaultUserService.defaultOwnerDisplayName,
isDefault: true,
createdAt: new Date(),
updatedAt: new Date(),
});
await service.onApplicationBootstrap();
expect(getOrCreateDefaultUserSpy).toHaveBeenCalledTimes(1);
});
});