113 lines
3.7 KiB
JavaScript
113 lines
3.7 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
opportunityFillGroups,
|
|
opportunityErrorGroup,
|
|
opportunityMissingGroups,
|
|
} from '../../resources/js/lib/opportunity-fill-flow.ts';
|
|
import { territorialSearchParams } from '../../resources/js/lib/territorial-search-params.ts';
|
|
import { documentFacetLabel } from '../../resources/js/lib/document-facet-label.ts';
|
|
|
|
void test('adaptive groups keep every applicable schema field once, including new specialized fields', () => {
|
|
const keys = [
|
|
'official_title',
|
|
'locations',
|
|
'sector_id',
|
|
'documents',
|
|
'currency',
|
|
'real_estate',
|
|
'future_schema_field',
|
|
'currency',
|
|
];
|
|
const groups = opportunityFillGroups(keys);
|
|
assert.deepEqual(
|
|
groups.flatMap((group) => group.fields).sort(),
|
|
[...new Set(keys)].sort(),
|
|
);
|
|
assert.ok(
|
|
groups
|
|
.find((group) => group.id === 'specific')
|
|
.fields.includes('future_schema_field'),
|
|
);
|
|
assert.deepEqual(
|
|
opportunityFillGroups(['official_title']).map((group) => group.id),
|
|
['idea'],
|
|
);
|
|
assert.deepEqual(opportunityFillGroups([]), []);
|
|
});
|
|
void test('saved pending fields and validation errors point to the correct existing group without inventing applicability', () => {
|
|
const groups = opportunityFillGroups([
|
|
'official_title',
|
|
'locations',
|
|
'total_investment',
|
|
]);
|
|
assert.equal(
|
|
opportunityErrorGroup(groups, {
|
|
'canonical.total_investment': 'Valor em falta',
|
|
}),
|
|
'finance',
|
|
);
|
|
assert.equal(
|
|
opportunityErrorGroup(groups, {
|
|
'canonical.locations.0': 'Local em falta',
|
|
}),
|
|
'territory',
|
|
);
|
|
assert.deepEqual(
|
|
opportunityMissingGroups(groups, [
|
|
'locations.0',
|
|
'canonical.total_investment',
|
|
]).map((group) => group.id),
|
|
['territory', 'finance'],
|
|
);
|
|
assert.equal(
|
|
opportunityErrorGroup(groups, { reason: 'Motivo em falta' }),
|
|
undefined,
|
|
);
|
|
});
|
|
void test('territorial search replaces old descendants while retaining all selected non-territorial filters', () => {
|
|
const entries = [
|
|
['province_id', 'old'],
|
|
['district_id', 'old-child'],
|
|
['locality_id', 'old-leaf'],
|
|
['category', 'zee'],
|
|
['q', 'Nacala'],
|
|
['page', '5'],
|
|
];
|
|
const scoped = territorialSearchParams(entries, [
|
|
{ id: 'new', location_type: 'province' },
|
|
]);
|
|
assert.equal(scoped.get('province_id'), 'new');
|
|
assert.equal(scoped.has('district_id'), false);
|
|
assert.equal(scoped.has('locality_id'), false);
|
|
assert.equal(scoped.get('category'), 'zee');
|
|
assert.equal(scoped.get('q'), 'Nacala');
|
|
assert.equal(scoped.has('page'), false);
|
|
const all = territorialSearchParams(entries, []);
|
|
assert.equal(all.has('province_id'), false);
|
|
assert.equal(all.get('category'), 'zee');
|
|
const unchanged = territorialSearchParams(entries);
|
|
assert.equal(unchanged.get('district_id'), 'old-child');
|
|
});
|
|
void test('document facets have readable labels while original query identifiers remain unchanged', () => {
|
|
const original = ['agronegocio', 'education', 'media', 'pt', 'turismo'];
|
|
assert.deepEqual(original.map(documentFacetLabel), [
|
|
'Agronegócio',
|
|
'Formação e competências',
|
|
'Imagens e conteúdos de apoio',
|
|
'Português',
|
|
'Turismo',
|
|
]);
|
|
assert.deepEqual(original, [
|
|
'agronegocio',
|
|
'education',
|
|
'media',
|
|
'pt',
|
|
'turismo',
|
|
]);
|
|
assert.equal(
|
|
documentFacetLabel('Tema definido pela Tempo'),
|
|
'Tema definido pela Tempo',
|
|
);
|
|
});
|