Update IAM Service E2E tests and audit plan

- Marked E2E test tasks as completed in the IAM Service audit plan for better tracking.
- Enhanced E2E tests by mocking the Prisma client and its methods to simulate database interactions.
- Improved test coverage for feature creation, update, and deletion operations in the E2E tests.

These changes aim to streamline testing processes and ensure accurate simulation of service behavior.
This commit is contained in:
Ho Ngoc Hai
2026-01-02 16:14:41 +07:00
parent 8cc2f66df6
commit 1a2103f86e
3 changed files with 70 additions and 17 deletions

View File

@@ -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

View File

@@ -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({

View File

@@ -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),