Files
lcbp3/backend/src/modules/correspondence/correspondence.controller.spec.ts
T
admin 45a6416d27
CI / CD Pipeline / build (push) Failing after 3m4s
CI / CD Pipeline / deploy (push) Has been skipped
fix(test): add CACHE_MANAGER mock to CorrespondenceController test
The IdempotencyInterceptor requires CACHE_MANAGER dependency.
Added mock provider to test module to resolve dependency injection error.
2026-06-14 20:23:18 +07:00

141 lines
4.1 KiB
TypeScript

import { Test, TestingModule } from '@nestjs/testing';
import { CorrespondenceController } from './correspondence.controller';
import { CorrespondenceService } from './correspondence.service';
import { CorrespondenceWorkflowService } from './correspondence-workflow.service';
import { JwtAuthGuard } from '../../common/guards/jwt-auth.guard';
import { RbacGuard } from '../../common/guards/rbac.guard';
import { CACHE_MANAGER } from '@nestjs/cache-manager';
describe('CorrespondenceController', () => {
let controller: CorrespondenceController;
let mockCorrespondenceService: Partial<CorrespondenceService>;
let mockWorkflowService: Partial<CorrespondenceWorkflowService>;
beforeEach(async () => {
mockCorrespondenceService = {
create: jest.fn(),
findAll: jest.fn(),
findOne: jest.fn(),
getReferences: jest.fn(),
addReference: jest.fn(),
removeReference: jest.fn(),
findOneByUuid: jest.fn(),
};
mockWorkflowService = {
submitWorkflow: jest.fn(),
processAction: jest.fn(),
};
const module: TestingModule = await Test.createTestingModule({
controllers: [CorrespondenceController],
providers: [
{
provide: CorrespondenceService,
useValue: mockCorrespondenceService,
},
{
provide: CorrespondenceWorkflowService,
useValue: mockWorkflowService,
},
{
provide: CACHE_MANAGER,
useValue: {
get: jest.fn(),
set: jest.fn(),
},
},
],
})
.overrideGuard(JwtAuthGuard)
.useValue({ canActivate: () => true })
.overrideGuard(RbacGuard)
.useValue({ canActivate: () => true })
.compile();
controller = module.get<CorrespondenceController>(CorrespondenceController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
describe('findAll', () => {
it('should return correspondences', async () => {
const mockResult = [{ id: 1 }];
(mockCorrespondenceService.findAll as jest.Mock).mockResolvedValue(
mockResult
);
const result = await controller.findAll({});
expect(mockCorrespondenceService.findAll).toHaveBeenCalled();
expect(result).toEqual(mockResult);
});
});
describe('create', () => {
it('should create a correspondence', async () => {
const mockCorr = { id: 1, correspondenceNumber: 'TEST-001' };
(mockCorrespondenceService.create as jest.Mock).mockResolvedValue(
mockCorr
);
const mockReq = { user: { user_id: 1 } };
const createDto = {
projectId: 1,
typeId: 1,
subject: 'Test Subject',
};
const _result = await controller.create(
createDto as Parameters<typeof controller.create>[0],
mockReq as Parameters<typeof controller.create>[1]
);
expect(mockCorrespondenceService.create).toHaveBeenCalledWith(
createDto,
mockReq.user
);
});
});
describe('submit', () => {
it('should submit a correspondence to workflow', async () => {
const mockResult = { instanceId: 'inst-1', currentState: 'IN_REVIEW' };
(mockWorkflowService.submitWorkflow as jest.Mock).mockResolvedValue(
mockResult
);
const mockReq = {
user: {
user_id: 1,
username: 'testuser',
password: 'hashedpassword',
email: 'test@example.com',
publicId: '019505a1-7c3e-7000-8000-abc123def456',
createdAt: new Date(),
updatedAt: new Date(),
},
};
(mockCorrespondenceService.findOneByUuid as jest.Mock).mockResolvedValue({
id: 1,
uuid: 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11',
});
const result = await controller.submit(
'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11',
{ note: 'Test note' },
mockReq as Parameters<typeof controller.submit>[2]
);
expect(mockWorkflowService.submitWorkflow).toHaveBeenCalledWith(
1,
1,
[],
'Test note'
);
expect(result).toEqual(mockResult);
});
});
});