import { Test, TestingModule } from '@nestjs/testing'; import { SseController } from './sse.controller'; import { SseTicketService } from './sse-ticket.service'; import { UserService } from 'src/modules/user/user.service'; import { JwtService } from '@nestjs/jwt'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { AuthService } from 'src/modules/auth/auth.service'; import { SseService } from './sse.service'; import { Subject } from 'rxjs'; describe('SseController', () => { let controller: SseController; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [SseController], imports: [ConfigModule], providers: [ ConfigService, { provide: JwtService, useClass: MockJwTService }, { provide: SseTicketService, useClass: MockSseTicketService }, { provide: AuthService, useClass: MockAuthService }, { provide: SseService, useClass: MockSSEService } ] }).compile(); controller = module.get(SseController); }); it('should be defined', () => { expect(controller).toBeDefined(); }); it('should generate a Ticket', () => { const t = controller.getTicket({ user: { id: 123}} as any); expect(controller['ticketService'].generateTicket).toHaveBeenCalled() }); it('should generate a SSE stream', async () => { await controller.sse('abc'); expect(controller["sseService"].register).toHaveBeenCalled(); }) }); class MockSseTicketService { generateTicket = jest.fn().mockImplementation( (id) => { return {ticket: 'test-ticket-id'} }); getUserIdToTicket = jest.fn().mockImplementation( (ticket) => { return 99; }) } class MockSSEService { register = jest.fn().mockImplementation( (id) => { return new Subject() }) } class MockJwTService {} class MockAuthService {}