60 lines
1.8 KiB
TypeScript
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);
|
|
});
|
|
});
|