260323:0917 fix CI : Run Tests #01
CI / CD Pipeline / build (push) Failing after 10m45s
CI / CD Pipeline / release (push) Has been skipped
CI / CD Pipeline / deploy (push) Has been skipped

This commit is contained in:
admin
2026-03-23 09:17:26 +07:00
parent 55116abe5a
commit 4422c68894
89 changed files with 3840 additions and 16392 deletions
@@ -18,6 +18,7 @@ describe('CorrespondenceController', () => {
getReferences: jest.fn(),
addReference: jest.fn(),
removeReference: jest.fn(),
findOneByUuid: jest.fn(),
};
mockWorkflowService = {
@@ -98,7 +99,11 @@ describe('CorrespondenceController', () => {
mockResult
);
const mockReq = { user: { user_id: 1 } };
const mockReq = { user: { user_id: 1, roles: [] } };
(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' },
@@ -15,6 +15,7 @@ import { WorkflowEngineService } from '../workflow-engine/workflow-engine.servic
import { UserService } from '../user/user.service';
import { SearchService } from '../search/search.service';
import { FileStorageService } from '../../common/file-storage/file-storage.service';
import { UuidResolverService } from '../../common/services/uuid-resolver.service';
import { UpdateCorrespondenceDto } from './dto/update-correspondence.dto';
import { User } from '../user/entities/user.entity';
@@ -23,6 +24,7 @@ describe('CorrespondenceService', () => {
let numberingService: DocumentNumberingService;
let correspondenceRepo: Repository<Correspondence>;
let revisionRepo: Repository<CorrespondenceRevision>;
let testingModule: TestingModule;
let _dataSource: DataSource;
const createMockRepository = () => ({
@@ -60,10 +62,13 @@ describe('CorrespondenceService', () => {
},
})),
getRepository: jest.fn(() => createMockRepository()),
manager: {
findOne: jest.fn(),
},
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
testingModule = await Test.createTestingModule({
providers: [
CorrespondenceService,
{
@@ -129,20 +134,27 @@ describe('CorrespondenceService', () => {
provide: FileStorageService,
useValue: { commit: jest.fn().mockResolvedValue([]) },
},
{
provide: UuidResolverService,
useValue: {
resolveProjectId: jest.fn().mockResolvedValue(1),
resolveOrganizationId: jest.fn().mockResolvedValue(1),
},
},
],
}).compile();
service = module.get<CorrespondenceService>(CorrespondenceService);
numberingService = module.get<DocumentNumberingService>(
service = testingModule.get<CorrespondenceService>(CorrespondenceService);
numberingService = testingModule.get<DocumentNumberingService>(
DocumentNumberingService
);
correspondenceRepo = module.get<Repository<Correspondence>>(
correspondenceRepo = testingModule.get<Repository<Correspondence>>(
getRepositoryToken(Correspondence)
);
revisionRepo = module.get<Repository<CorrespondenceRevision>>(
revisionRepo = testingModule.get<Repository<CorrespondenceRevision>>(
getRepositoryToken(CorrespondenceRevision)
);
_dataSource = module.get<DataSource>(DataSource);
_dataSource = testingModule.get<DataSource>(DataSource);
});
it('should be defined', () => {
@@ -217,6 +229,10 @@ describe('CorrespondenceService', () => {
projectId: 2,
};
const uuidResolver =
testingModule.get<UuidResolverService>(UuidResolverService);
(uuidResolver.resolveProjectId as jest.Mock).mockResolvedValue(2);
await service.update(1, updateDto, mockUser);
expect(
@@ -253,6 +269,14 @@ describe('CorrespondenceService', () => {
typeId: 999,
};
const typeRepo = testingModule.get<Repository<CorrespondenceType>>(
getRepositoryToken(CorrespondenceType)
);
(typeRepo.findOne as jest.Mock).mockResolvedValue({
id: 999,
typeCode: 'NEW-TYPE',
});
await service.update(1, updateDto, mockUser);
expect(
@@ -285,11 +309,8 @@ describe('CorrespondenceService', () => {
.spyOn(correspondenceRepo, 'findOne')
.mockResolvedValue(mockCorr as unknown as Correspondence);
// Access private property for mocking via casting
const internalService = service as unknown as {
orgRepo: Repository<Organization>;
};
jest.spyOn(internalService.orgRepo, 'findOne').mockResolvedValue({
// Access DataSource manager for mocking
mockDataSource.manager.findOne.mockResolvedValue({
id: 88,
organizationCode: 'NEW-ORG',
} as unknown as Organization);
@@ -1,5 +1,5 @@
import { Test, TestingModule } from '@nestjs/testing';
import { Repository } from 'typeorm';
import { Repository, EntityManager } from 'typeorm';
import { DocumentNumberingService } from './services/document-numbering.service';
import { CounterService } from './services/counter.service';
import { ReservationService } from './services/reservation.service';
@@ -13,6 +13,7 @@ import { DocumentNumberError } from './entities/document-number-error.entity';
import { DocumentNumberingLockService } from './services/document-numbering-lock.service';
import { ManualOverrideService } from './services/manual-override.service';
import { MetricsService } from './services/metrics.service';
import { UuidResolverService } from '../../common/services/uuid-resolver.service';
describe('DocumentNumberingService', () => {
let service: DocumentNumberingService;
@@ -58,7 +59,9 @@ describe('DocumentNumberingService', () => {
{
provide: FormatService,
useValue: {
format: jest.fn().mockResolvedValue('0001'),
format: jest
.fn()
.mockResolvedValue({ previewNumber: '0001', isDefault: false }),
},
},
{
@@ -98,6 +101,17 @@ describe('DocumentNumberingService', () => {
save: jest.fn().mockResolvedValue({}),
},
},
{
provide: EntityManager,
useValue: { transaction: jest.fn() },
},
{
provide: UuidResolverService,
useValue: {
resolveProjectId: jest.fn().mockResolvedValue(1),
resolveOrganizationId: jest.fn().mockResolvedValue(1),
},
},
],
}).compile();
@@ -117,7 +131,10 @@ describe('DocumentNumberingService', () => {
describe('generateNextNumber', () => {
it('should generate a new number successfully', async () => {
(counterService.incrementCounter as jest.Mock).mockResolvedValue(1);
(formatService.format as jest.Mock).mockResolvedValue('DOC-0001');
(formatService.format as jest.Mock).mockResolvedValue({
previewNumber: 'DOC-0001',
isDefault: false,
});
const result = await service.generateNextNumber(mockContext);
@@ -6,6 +6,9 @@ import { CorrespondenceType } from '../correspondence/entities/correspondence-ty
import { CorrespondenceStatus } from '../correspondence/entities/correspondence-status.entity';
import { Project } from '../project/entities/project.entity';
import { DataSource } from 'typeorm';
import { MigrationReviewQueue } from './entities/migration-review-queue.entity';
import { MigrationError } from './entities/migration-error.entity';
import { FileStorageService } from '../../common/file-storage/file-storage.service';
describe('MigrationService', () => {
let service: MigrationService;
@@ -71,6 +74,18 @@ describe('MigrationService', () => {
provide: DataSource,
useValue: mockDataSource,
},
{
provide: getRepositoryToken(MigrationReviewQueue),
useValue: { findOne: jest.fn(), create: jest.fn(), save: jest.fn() },
},
{
provide: getRepositoryToken(MigrationError),
useValue: { create: jest.fn(), save: jest.fn() },
},
{
provide: FileStorageService,
useValue: { importStagingFile: jest.fn() },
},
],
}).compile();
@@ -6,6 +6,7 @@ import { UserService } from './user.service';
import { User } from './entities/user.entity';
import { Role } from './entities/role.entity';
import { Permission } from './entities/permission.entity';
import { UuidResolverService } from '../../common/services/uuid-resolver.service';
// Mock Repository
const mockUserRepository = {
@@ -56,6 +57,13 @@ describe('UserService', () => {
provide: getRepositoryToken(Permission),
useValue: mockUserRepository, // Reuse generic mock
},
{
provide: UuidResolverService,
useValue: {
resolveOrganizationId: jest.fn().mockResolvedValue(1),
resolveProjectId: jest.fn().mockResolvedValue(1),
},
},
],
}).compile();