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', ); });