mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
0b218d53b2
Co-hosted NestJS app behind the existing Express server via a strangler-fig dispatcher, sharing the same better-sqlite3 connection and JWT httpOnly cookie. Additive and dormant: default routing stays on Express, Nest only serves its own /api/_nest diagnostics until a module opts in. F1 @trek/shared Zod contract package; F2 Nest bootstrap co-hosted (fall-through, single Dockerfile/port); F3 shared better-sqlite3 provider; F4 JWT cookie auth guard (+ @CurrentUser, admin guard); F5 Zod validation pipe + error-envelope parity; F6 Nest test + coverage gates; F7 per-prefix strangler toggle (env, default Express); F8 CI build/typecheck/test/coverage. Remaining F4/F6/F8 checklist items (trip-access + permission levels + MFA policy, e2e harness/seed + 80% gate, Nest↔Express parity test, Playwright PR-comment workflow) are tracked on the first consuming module cards (L1/A1/C1).
26 lines
915 B
TypeScript
26 lines
915 B
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { Test } from '@nestjs/testing';
|
|
import { HealthController } from '../../../src/nest/health/health.controller';
|
|
import { HealthService } from '../../../src/nest/health/health.service';
|
|
import { DatabaseService } from '../../../src/nest/database/database.service';
|
|
|
|
describe('Nest dependency injection (vitest + swc)', () => {
|
|
it('injects HealthService + DatabaseService into HealthController by type', async () => {
|
|
const moduleRef = await Test.createTestingModule({
|
|
controllers: [HealthController],
|
|
providers: [
|
|
HealthService,
|
|
{ provide: DatabaseService, useValue: { get: () => ({ n: 7 }) } },
|
|
],
|
|
}).compile();
|
|
|
|
const controller = moduleRef.get(HealthController);
|
|
expect(controller.getHealth()).toEqual({
|
|
ok: true,
|
|
runtime: 'nestjs',
|
|
diInjected: true,
|
|
userCount: 7,
|
|
});
|
|
});
|
|
});
|