import { ConfigService } from '@nestjs/config'; import { Test, TestingModule } from '@nestjs/testing'; import { PrismaService, RoleService, UserService } from '@snipcode/domain'; import { mock } from 'jest-mock-extended'; import { AppService } from './app.service'; const prismaServiceMock = mock(); const roleServiceMock = mock(); const userServiceMock = mock(); const { ADMIN_PASSWORD } = process.env; describe('Test App Service', () => { let appService: AppService; let roleService: RoleService; let userService: UserService; beforeEach(async () => { const app: TestingModule = await Test.createTestingModule({ providers: [ { provide: PrismaService, useValue: prismaServiceMock }, ConfigService, { provide: UserService, useValue: userServiceMock }, { provide: RoleService, useValue: roleServiceMock }, AppService, ], }).compile(); appService = app.get(AppService); roleService = app.get(RoleService); userService = app.get(UserService); }); test('load default roles and users on service initialization', async () => { const role = { createdAt: new Date(), description: 'Administrator', id: '1', level: 1, name: 'admin' as const, updatedAt: new Date(), }; roleServiceMock.findByName.mockResolvedValueOnce(role); await expect(appService.onModuleInit()).resolves.not.toThrow(); expect(roleService.loadRoles).toHaveBeenCalledTimes(1); expect(userService.loadAdminUser).toHaveBeenCalledTimes(1); expect(userService.loadAdminUser).toHaveBeenCalledWith(role, ADMIN_PASSWORD); }); });