F4.6 · retirar pruebas históricas de Survey
This commit is contained in:
@@ -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);
|
||||
});
|
||||
Reference in New Issue
Block a user