24 lines
2.1 KiB
TypeScript
24 lines
2.1 KiB
TypeScript
|
|
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
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 migration = readFileSync(new URL('../../src/database/migrations/1789581600000-phase-f1-2-act-administration.ts', import.meta.url), 'utf8');
|
|
const service = readFileSync(new URL('../../src/act-administration/act-administration.service.ts', import.meta.url), 'utf8');
|
|
const controller = readFileSync(new URL('../../src/act-administration/act-administration.controller.ts', import.meta.url), 'utf8');
|
|
|
|
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/); });
|