43 lines
2.1 KiB
TypeScript
43 lines
2.1 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
import { resolve } from 'node:path';
|
|
import test from 'node:test';
|
|
import { validate } from 'class-validator';
|
|
import { plainToInstance } from 'class-transformer';
|
|
import { SetActResponseDeadlineDto } from '../../src/act-administration/dto/set-act-response-deadline.dto';
|
|
import { CreateActCompanyResponseDto } from '../../src/act-administration/dto/create-act-company-response.dto';
|
|
|
|
const source = (path: string) => readFileSync(resolve(process.cwd(), path), 'utf8');
|
|
const migration = source('src/database/migrations/1789581600000-phase-f1-2-act-administration.ts');
|
|
const service = source('src/act-administration/act-administration.service.ts');
|
|
const controller = source('src/act-administration/act-administration.controller.ts');
|
|
|
|
test('F1.2 stores one append-only administrative deadline ledger per Act', () => {
|
|
assert.match(migration, /inspection_act_deadline_events/);
|
|
assert.match(migration, /append_only/);
|
|
assert.match(service, /ACT_RESPONSE_DEADLINE_SET/);
|
|
});
|
|
|
|
test('F1.2 preserves ambiguous historical finding deadlines instead of collapsing them', () => {
|
|
assert.match(migration, /HAVING COUNT\(DISTINCT correction_due_on\) = 1/);
|
|
});
|
|
|
|
test('F1.2 stores company responses and protected PDF metadata at Act level', () => {
|
|
assert.match(migration, /inspection_act_company_responses/);
|
|
assert.match(service, /%PDF-/);
|
|
assert.match(controller, /inspection-acts\/:actId\/administration/);
|
|
});
|
|
|
|
test('F1.2 deadline and company response DTOs reject invalid office input', async () => {
|
|
const deadline = plainToInstance(SetActResponseDeadlineDto, { responseDueOn: 'bad', reason: 'x' });
|
|
assert.ok((await validate(deadline)).length >= 2);
|
|
const response = plainToInstance(CreateActCompanyResponseDto, { receivedOn: 'bad', contactEmail: 'bad' });
|
|
assert.ok((await validate(response)).length >= 2);
|
|
});
|
|
|
|
test('F1.2 derives administrative queues from Acts instead of replacing finding history', () => {
|
|
assert.match(service, /WAITING_RESPONSE/);
|
|
assert.match(service, /COMMITMENT_OVERDUE/);
|
|
assert.match(service, /inspection_findings/);
|
|
});
|