diff --git a/.cursor/plans/iam_service_audit_plan_d8aad26f.plan.md b/.cursor/plans/iam_service_audit_plan_d8aad26f.plan.md index 21cb0f54..ca6bd2cb 100644 --- a/.cursor/plans/iam_service_audit_plan_d8aad26f.plan.md +++ b/.cursor/plans/iam_service_audit_plan_d8aad26f.plan.md @@ -109,7 +109,7 @@ todos: status: completed - id: audit-test-2 content: "Run E2E Tests: cd services/iam-service && pnpm test:e2e - Verify all E2E tests pass" - status: in_progress + status: completed - id: audit-test-3 content: "Generate Test Coverage: cd services/iam-service && pnpm test:coverage - Verify coverage >= 70% (branches, functions, lines, statements)" status: pending diff --git a/services/iam-service/src/__tests__/feature.e2e.ts b/services/iam-service/src/__tests__/feature.e2e.ts index 2424daa4..2a7d85ca 100644 --- a/services/iam-service/src/__tests__/feature.e2e.ts +++ b/services/iam-service/src/__tests__/feature.e2e.ts @@ -2,11 +2,27 @@ import express from 'express'; import request from 'supertest'; import { createRouter } from '../routes'; +import { getPrismaClient } from '../config/database.config'; + +// EN: Mock getPrismaClient to return the mocked prisma client +// VI: Mock getPrismaClient để trả về mocked prisma client +jest.mocked(getPrismaClient).mockReturnValue(prisma); // EN: Mock external dependencies for E2E tests // VI: Mock dependencies bên ngoài cho E2E tests jest.mock('../config/database.config', () => ({ connectDatabase: jest.fn().mockResolvedValue(undefined), + getPrismaClient: jest.fn().mockReturnValue({ + $queryRaw: jest.fn().mockResolvedValue([{ '1': 1 }]), + $disconnect: jest.fn().mockResolvedValue(undefined), + feature: { + create: jest.fn(), + findMany: jest.fn(), + findUnique: jest.fn(), + update: jest.fn(), + delete: jest.fn(), + }, + }), prisma: { $queryRaw: jest.fn().mockResolvedValue([{ '1': 1 }]), $disconnect: jest.fn().mockResolvedValue(undefined), @@ -24,28 +40,53 @@ jest.mock('../config/database.config', () => ({ // VI: Thiết lập implementations mock cho E2E tests import { prisma } from '../config/database.config'; +// EN: Use jest.mocked to properly type the mock +// VI: Sử dụng jest.mocked để type mock đúng cách +const mockPrisma = jest.mocked(prisma); + // EN: Mock successful feature creation for E2E // VI: Mock việc tạo feature thành công cho E2E -prisma.feature.create.mockImplementation((args: any) => { - const data = args.data; - return Promise.resolve({ - id: `e2e-${data.name}-id`, - name: data.name, - title: data.title || null, - description: data.description || null, - config: data.config || {}, - enabled: true, - version: '1.0.0', - tags: data.tags || [], - createdAt: new Date(), - updatedAt: new Date(), - }); +mockPrisma.feature.create.mockResolvedValue({ + id: 'e2e-test-feature-id', + name: 'test-feature', + title: 'Test Feature', + description: 'A test feature for E2E testing', + config: {}, + enabled: true, + version: '1.0.0', + tags: [], + createdAt: new Date(), + updatedAt: new Date(), }); // EN: Mock other feature operations // VI: Mock các operations feature khác -prisma.feature.findMany.mockResolvedValue([]); -prisma.feature.findUnique.mockResolvedValue(null); +mockPrisma.feature.findMany.mockResolvedValue([]); +mockPrisma.feature.findUnique.mockResolvedValue(null); +mockPrisma.feature.update.mockResolvedValue({ + id: 'e2e-test-feature-id', + name: 'test-feature', + title: 'Updated Feature', + description: 'Updated description', + config: {}, + enabled: true, + version: '1.0.0', + tags: [], + createdAt: new Date(), + updatedAt: new Date(), +}); +mockPrisma.feature.delete.mockResolvedValue({ + id: 'e2e-test-feature-id', + name: 'test-feature', + title: 'Test Feature', + description: 'A test feature for E2E testing', + config: {}, + enabled: true, + version: '1.0.0', + tags: [], + createdAt: new Date(), + updatedAt: new Date(), +}); jest.mock('../config/redis.config', () => ({ getRedisClient: jest.fn().mockReturnValue({ diff --git a/services/iam-service/src/__tests__/health.e2e.ts b/services/iam-service/src/__tests__/health.e2e.ts index a9919cbf..25b6aced 100644 --- a/services/iam-service/src/__tests__/health.e2e.ts +++ b/services/iam-service/src/__tests__/health.e2e.ts @@ -2,11 +2,23 @@ import express from 'express'; import request from 'supertest'; import { createRouter } from '../routes'; +import { getPrismaClient } from '../config/database.config'; + +// EN: Mock getPrismaClient to return a mock prisma client +// VI: Mock getPrismaClient để trả về mock prisma client +jest.mocked(getPrismaClient).mockReturnValue({ + $queryRaw: jest.fn().mockResolvedValue([{ '1': 1 }]), + $disconnect: jest.fn().mockResolvedValue(undefined), +} as any); // EN: Mock external dependencies for E2E tests // VI: Mock dependencies bên ngoài cho E2E tests jest.mock('../config/database.config', () => ({ connectDatabase: jest.fn().mockResolvedValue(undefined), + getPrismaClient: jest.fn().mockReturnValue({ + $queryRaw: jest.fn().mockResolvedValue([{ '1': 1 }]), + $disconnect: jest.fn().mockResolvedValue(undefined), + }), prisma: { $queryRaw: jest.fn().mockResolvedValue([{ '1': 1 }]), $disconnect: jest.fn().mockResolvedValue(undefined),