F4.6 · retirar pruebas históricas de Survey

This commit is contained in:
2026-09-07 20:09:28 -03:00
parent f1dbb75834
commit 7dab175958
4 changed files with 0 additions and 132 deletions
@@ -1,18 +0,0 @@
import 'reflect-metadata';
import assert from 'node:assert/strict';
import test from 'node:test';
import { REQUIRED_PERMISSIONS_KEY } from '../../src/authorization/decorators/require-permissions.decorator';
import { SurveyExecutionController } from '../../src/survey-execution/survey-execution.controller';
function permissionFor(method: string): string[] {
const controller = SurveyExecutionController.prototype;
const handler = controller[method as keyof typeof controller];
return Reflect.getMetadata(REQUIRED_PERMISSIONS_KEY, handler) as string[];
}
test('survey report endpoints separate reading, capture and review', () => {
assert.deepEqual(permissionFor('get'), ['surveys.read_reports']);
assert.deepEqual(permissionFor('save'), ['surveys.capture']);
assert.deepEqual(permissionFor('submit'), ['surveys.capture']);
assert.deepEqual(permissionFor('review'), ['surveys.review']);
});
@@ -1,48 +0,0 @@
import 'reflect-metadata';
import assert from 'node:assert/strict';
import test from 'node:test';
import { validate } from 'class-validator';
import { ReviewSurveyReportDto } from '../../src/survey-execution/dto/review-survey-report.dto';
import { SaveSurveyReportDto } from '../../src/survey-execution/dto/save-survey-report.dto';
const MEDIA_ID = '16e54e65-60cf-4739-b0d1-ccdd904fbfd5';
test('field report DTO accepts outcome, GPS and protected media references', async () => {
const dto = Object.assign(new SaveSurveyReportDto(), {
outcome: 'CONFIRMED',
observedAt: '2026-08-14T18:00:00.000Z',
latitude: -32.8895,
longitude: -68.8458,
accuracyM: 4.25,
notes: 'Activo verificado en campo.',
mediaIds: [MEDIA_ID],
});
assert.deepEqual(await validate(dto), []);
});
test('field report DTO rejects invalid coordinates and repeated evidence', async () => {
const dto = Object.assign(new SaveSurveyReportDto(), {
outcome: 'CONFIRMED',
observedAt: 'not-a-date',
latitude: -95,
longitude: -68.8458,
accuracyM: 4.25,
mediaIds: [MEDIA_ID, MEDIA_ID],
});
const properties = new Set((await validate(dto)).map((error) => error.property));
assert.equal(properties.has('observedAt'), true);
assert.equal(properties.has('latitude'), true);
assert.equal(properties.has('mediaIds'), true);
});
test('review DTO only accepts explicit approval or rejection decisions', async () => {
const dto = Object.assign(new ReviewSurveyReportDto(), {
decision: 'APPROVE',
notes: null,
});
assert.deepEqual(await validate(dto), []);
dto.decision = 'MAYBE' as typeof dto.decision;
const properties = new Set((await validate(dto)).map((error) => error.property));
assert.equal(properties.has('decision'), true);
});
@@ -1,31 +0,0 @@
import 'reflect-metadata';
import assert from 'node:assert/strict';
import test from 'node:test';
import { REQUIRED_PERMISSIONS_KEY } from '../../src/authorization/decorators/require-permissions.decorator';
import {
SurveyCampaignsController,
SurveyCampaignTargetsController,
} from '../../src/survey-planning/survey-campaigns.controller';
function permissionFor(controller: object, method: string): string[] {
const handler = controller[method as keyof typeof controller];
return Reflect.getMetadata(REQUIRED_PERMISSIONS_KEY, handler) as string[];
}
test('campaign endpoints separate reading, management and assignment', () => {
const controller = SurveyCampaignsController.prototype;
assert.deepEqual(permissionFor(controller, 'list'), ['surveys.read']);
assert.deepEqual(permissionFor(controller, 'get'), ['surveys.read']);
assert.deepEqual(permissionFor(controller, 'assignees'), ['surveys.assign']);
assert.deepEqual(permissionFor(controller, 'create'), ['surveys.manage']);
assert.deepEqual(permissionFor(controller, 'update'), ['surveys.manage']);
assert.deepEqual(permissionFor(controller, 'changeStatus'), ['surveys.manage']);
assert.deepEqual(permissionFor(controller, 'addTarget'), ['surveys.manage']);
});
test('target planning, assignment and execution use distinct permissions', () => {
const controller = SurveyCampaignTargetsController.prototype;
assert.deepEqual(permissionFor(controller, 'update'), ['surveys.manage']);
assert.deepEqual(permissionFor(controller, 'assign'), ['surveys.assign']);
assert.deepEqual(permissionFor(controller, 'changeStatus'), ['surveys.execute']);
});
@@ -1,35 +0,0 @@
import 'reflect-metadata';
import assert from 'node:assert/strict';
import test from 'node:test';
import { validate } from 'class-validator';
import { AddSurveyTargetDto } from '../../src/survey-planning/dto/add-survey-target.dto';
import { CreateSurveyCampaignDto } from '../../src/survey-planning/dto/create-survey-campaign.dto';
const ASSET_ID = '16e54e65-60cf-4739-b0d1-ccdd904fbfd5';
test('campaign DTO accepts dynamic asset scope and ISO planning dates', async () => {
const dto = Object.assign(new CreateSurveyCampaignDto(), {
code: 'REL-2026-001',
name: 'Campaña operativa',
description: null,
plannedStartAt: '2026-08-15T12:00:00.000Z',
plannedEndAt: '2026-08-20T12:00:00.000Z',
scopeAssetId: ASSET_ID,
coordinatorUserId: null,
});
assert.deepEqual(await validate(dto), []);
});
test('target DTO references an existing Maestro asset instead of copying it', async () => {
const dto = Object.assign(new AddSurveyTargetDto(), {
assetId: ASSET_ID,
assignedUserId: null,
dueAt: null,
instructions: null,
});
assert.deepEqual(await validate(dto), []);
dto.assetId = 'not-a-uuid';
const properties = new Set((await validate(dto)).map((error) => error.property));
assert.equal(properties.has('assetId'), true);
});