35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { plainToInstance } from 'class-transformer';
|
|
import { validate } from 'class-validator';
|
|
import { CreateAssetMediaDto } from '../../src/asset-master/dto/create-asset-media.dto';
|
|
import { AssetMediaKind } from '../../src/database/entities';
|
|
|
|
test('multipart media metadata transforms valid numeric coordinates', async () => {
|
|
const dto = plainToInstance(CreateAssetMediaDto, {
|
|
kind: AssetMediaKind.PHOTO,
|
|
title: 'Cabezal del pozo',
|
|
capturedAt: '2026-08-14T12:00:00.000Z',
|
|
latitude: '-32.889500',
|
|
longitude: '-68.845800',
|
|
accuracyM: '3.250',
|
|
});
|
|
|
|
assert.deepEqual(await validate(dto), []);
|
|
assert.equal(dto.latitude, -32.8895);
|
|
assert.equal(dto.longitude, -68.8458);
|
|
assert.equal(dto.accuracyM, 3.25);
|
|
});
|
|
|
|
test('media metadata rejects unknown kinds and coordinate ranges', async () => {
|
|
const dto = plainToInstance(CreateAssetMediaDto, {
|
|
kind: 'VIDEO',
|
|
latitude: '91',
|
|
longitude: '-181',
|
|
});
|
|
const properties = new Set((await validate(dto)).map((error) => error.property));
|
|
assert.equal(properties.has('kind'), true);
|
|
assert.equal(properties.has('latitude'), true);
|
|
assert.equal(properties.has('longitude'), true);
|
|
});
|