import assert from 'node:assert/strict'; import test from 'node:test'; import { plainToInstance } from 'class-transformer'; import { validate } from 'class-validator'; import { UpdateAssetProvenanceDto } from '../../src/asset-master/dto/update-asset-provenance.dto'; import { ListTemporalAssetsQueryDto } from '../../src/asset-master/dto/list-temporal-assets-query.dto'; import { AssetDataOrigin } from '../../src/database/entities'; test('provenance metadata accepts controlled origins and trims sources', async () => { const dto = plainToInstance(UpdateAssetProvenanceDto, { origin: AssetDataOrigin.PROVIDED_DOCUMENT, sourceName: ' Expediente 2026-14 ', observedAt: '2026-08-14T15:00:00.000Z', }); assert.deepEqual(await validate(dto), []); assert.equal(dto.sourceName, 'Expediente 2026-14'); }); test('provenance metadata rejects unknown origins and invalid dates', async () => { const dto = plainToInstance(UpdateAssetProvenanceDto, { origin: 'INTERNET', observedAt: 'ayer', }); const properties = new Set((await validate(dto)).map((error) => error.property)); assert.equal(properties.has('origin'), true); assert.equal(properties.has('observedAt'), true); }); test('temporal filters require a valid instant and bounded pagination', async () => { const valid = plainToInstance(ListTemporalAssetsQueryDto, { at: '2026-08-14T15:00:00.000Z', page: '2', pageSize: '50', }); assert.deepEqual(await validate(valid), []); assert.equal(valid.page, 2); const invalid = plainToInstance(ListTemporalAssetsQueryDto, { at: 'fecha', pageSize: '101', }); const properties = new Set((await validate(invalid)).map((error) => error.property)); assert.equal(properties.has('at'), true); assert.equal(properties.has('pageSize'), true); });