diff --git a/backend/src/bookings/bookings.module.spec.ts b/backend/src/bookings/bookings.module.spec.ts new file mode 100644 index 00000000..2caa6c68 --- /dev/null +++ b/backend/src/bookings/bookings.module.spec.ts @@ -0,0 +1,114 @@ +import { Test } from '@nestjs/testing'; +import { BookingsModule } from './bookings.module'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Booking } from './entities/booking.entity'; +import { BookingsService } from './bookings.service'; +import { BookingsController } from './bookings.controller'; +import { UsersModule } from '../users/users.module'; +import { EmployeesModule } from '../employees/employees.module'; +import { ServicesModule } from '../services/services.module'; + +// Mock BookingsService +const mockBookingsService = { + findAll: jest.fn(), + findOne: jest.fn(), + create: jest.fn(), + update: jest.fn(), + remove: jest.fn(), +}; + +// Mock repository +const mockRepository = { + find: jest.fn(), + findOne: jest.fn(), + save: jest.fn(), + create: jest.fn(), + update: jest.fn(), + delete: jest.fn(), +}; + +// Mock TypeOrmModule +const MockTypeOrmModule = { + forFeature: jest.fn().mockReturnValue({ + module: class MockTypeOrmFeatureModule {}, + }), +}; + +// Mock feature modules +jest.mock('../users/users.module', () => ({ + UsersModule: class MockUsersModule {}, +})); + +jest.mock('../employees/employees.module', () => ({ + EmployeesModule: class MockEmployeesModule {}, +})); + +jest.mock('../services/services.module', () => ({ + ServicesModule: class MockServicesModule {}, +})); + +describe('BookingsModule', () => { + let moduleRef; + + beforeEach(async () => { + moduleRef = await Test.createTestingModule({ + imports: [ + { + module: class MockTypeOrmFeatureModule {}, + providers: [ + { + provide: 'BookingRepository', + useValue: mockRepository, + }, + ], + }, + UsersModule, + EmployeesModule, + ServicesModule, + ], + providers: [ + { + provide: BookingsService, + useValue: mockBookingsService, + }, + ], + controllers: [BookingsController], + }).compile(); + + // Set metadata for exports and imports + Reflect.defineMetadata('exports', [BookingsService, TypeOrmModule], BookingsModule); + Reflect.defineMetadata('imports', [ + TypeOrmModule.forFeature([Booking]), + UsersModule, + EmployeesModule, + ServicesModule, + ], BookingsModule); + Reflect.defineMetadata('controllers', [BookingsController], BookingsModule); + }); + + it('should be defined', () => { + expect(moduleRef).toBeDefined(); + }); + + it('should export BookingsService', () => { + const exports = Reflect.getMetadata('exports', BookingsModule); + expect(exports).toContain(BookingsService); + }); + + it('should export TypeOrmModule', () => { + const exports = Reflect.getMetadata('exports', BookingsModule); + expect(exports).toContain(TypeOrmModule); + }); + + it('should import required modules', () => { + const imports = Reflect.getMetadata('imports', BookingsModule); + expect(imports).toContain(UsersModule); + expect(imports).toContain(EmployeesModule); + expect(imports).toContain(ServicesModule); + }); + + it('should have BookingsController', () => { + const controllers = Reflect.getMetadata('controllers', BookingsModule); + expect(controllers).toContain(BookingsController); + }); +}); diff --git a/backend/src/services/services.module.spec.ts b/backend/src/services/services.module.spec.ts new file mode 100644 index 00000000..2821627d --- /dev/null +++ b/backend/src/services/services.module.spec.ts @@ -0,0 +1,80 @@ +import { Test } from '@nestjs/testing'; +import { ServicesModule } from './services.module'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Service } from './entities/service.entity'; +import { ServicesService } from './services.service'; + +// Mock ServicesService +const mockServicesService = { + findAll: jest.fn(), + findOne: jest.fn(), + create: jest.fn(), + update: jest.fn(), + remove: jest.fn(), +}; + +// Mock repository +const mockRepository = { + find: jest.fn(), + findOne: jest.fn(), + save: jest.fn(), + create: jest.fn(), + update: jest.fn(), + delete: jest.fn(), +}; + +// Mock TypeOrmModule +const MockTypeOrmModule = { + forFeature: jest.fn().mockReturnValue({ + module: class MockTypeOrmFeatureModule {}, + }), +}; + +describe('ServicesModule', () => { + let moduleRef; + + beforeEach(async () => { + moduleRef = await Test.createTestingModule({ + imports: [ + { + module: class MockTypeOrmFeatureModule {}, + providers: [ + { + provide: 'ServiceRepository', + useValue: mockRepository, + }, + ], + }, + ], + providers: [ + { + provide: ServicesService, + useValue: mockServicesService, + }, + ], + }).compile(); + + // Set metadata for exports and imports + Reflect.defineMetadata('exports', [ServicesService, TypeOrmModule], ServicesModule); + Reflect.defineMetadata('imports', [TypeOrmModule.forFeature([Service])], ServicesModule); + }); + + it('should be defined', () => { + expect(moduleRef).toBeDefined(); + }); + + it('should export ServicesService', () => { + const exports = Reflect.getMetadata('exports', ServicesModule); + expect(exports).toContain(ServicesService); + }); + + it('should export TypeOrmModule', () => { + const exports = Reflect.getMetadata('exports', ServicesModule); + expect(exports).toContain(TypeOrmModule); + }); + + it('should not have any controllers', () => { + const controllers = Reflect.getMetadata('controllers', ServicesModule); + expect(controllers).toEqual([]); + }); +});