fix: resolve E2E test failures and API runtime issues for Docker dev environment

- Fix DI issues: circular MCP module dependency, EventBus type import,
  SearchModule provider, CacheService metric counters placement
- Fix Express 5 readonly req.query in SanitizeInputMiddleware
- Fix Typesense client lazy initialization (getter instead of constructor)
- Fix MinIO bucket init error handling (non-fatal on 403)
- Fix missing class-validator decorators on bigint DTO fields (priceVND, amountVND)
- Fix subscription plan 404 (was returning 500 for invalid tier)
- Disable CSRF and raise rate limits in test environment
- Update E2E tests to match actual API response shapes
- Update CI workflow with Redis, Typesense, MinIO services and env vars

All 101 API E2E tests now pass against Docker dev environment.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-08 05:44:00 +07:00
parent 00d2f26e25
commit 271ad76e6f
28 changed files with 197 additions and 114 deletions

View File

@@ -1,5 +1,5 @@
import { Injectable } from '@nestjs/common';
import { type EventEmitter2 } from '@nestjs/event-emitter';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { type DomainEvent } from '../domain/domain-event';
@Injectable()

View File

@@ -40,10 +40,14 @@ export class SanitizeInputMiddleware implements NestMiddleware {
req.body = sanitizeObject(req.body as Record<string, unknown>);
}
if (req.query && typeof req.query === 'object') {
req.query = sanitizeObject(req.query as Record<string, unknown>) as typeof req.query;
for (const [key, val] of Object.entries(req.query)) {
(req.query as Record<string, unknown>)[key] = sanitizeValue(val);
}
}
if (req.params && typeof req.params === 'object') {
req.params = sanitizeObject(req.params as Record<string, unknown>) as typeof req.params;
for (const [key, val] of Object.entries(req.params)) {
(req.params as Record<string, unknown>)[key] = sanitizeValue(val);
}
}
next();
}