Files
Investidor-V2/tests/frontend/catalogue-context.test.mjs
T
2026-11-15 18:56:39 +02:00

84 lines
3.1 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
catalogueDetailHref,
catalogueReturnHref,
catalogueQuery,
} from '../../resources/js/lib/catalogue-context.ts';
test('return preserves deliberate destination edits, including cleared ancestors, without stale descendants', () => {
const detail = catalogueDetailHref(
'/carteira/a',
'q=energia&province_id=p&district_id=d&page=4',
);
assert.equal(
catalogueReturnHref('/carteira?q=turismo&province_id=', detail),
'/carteira?q=turismo&province_id=&page=4',
);
assert.equal(
catalogueReturnHref('/carteira?province_id=other', detail),
'/carteira?province_id=other&q=energia&page=4',
);
});
test('different catalogue families share geography but not text, kind, price, page or private context', () => {
const detail =
'/carteira/a?catalogue_query=' +
encodeURIComponent(
'q=airport&kind=project&page=4&province_id=p&context=private&min_amount=200',
);
assert.equal(
catalogueReturnHref('/zonas?category=zee', detail),
'/zonas?category=zee&province_id=p',
);
assert.equal(catalogueReturnHref('/documentos', detail), '/documentos');
});
test('resource-specific return queries do not inherit from other tabs or mutable storage', () => {
const a = catalogueDetailHref(
'/oportunidades/a',
'q=rice&facets[]=2&facets[]=3&currency=MZN',
);
const b = catalogueDetailHref('/oportunidades/b', 'q=gas&currency=USD');
const back = catalogueReturnHref('/oportunidades', a);
assert.deepEqual(
new URL(back, 'https://portal.invalid').searchParams.getAll('facets[]'),
['2', '3'],
);
assert.match(back, /q=rice/);
assert.match(catalogueReturnHref('/oportunidades', b), /q=gas/);
assert.equal(
catalogueReturnHref('/oportunidades', '/oportunidades/c'),
'/oportunidades',
);
});
test('detail URL preserves existing parameters and fragment; unsafe and recursive filters are not carried', () => {
const href = catalogueDetailHref(
'/oportunidades/a?from_dossier=origin#details',
'q=rice&context=other&catalogue_query=recursive&password=secret&kind=cluster',
);
const url = new URL(href, 'https://portal.invalid');
assert.equal(url.searchParams.get('from_dossier'), 'origin');
assert.equal(url.hash, '#details');
assert.equal(url.searchParams.get('catalogue_query'), 'q=rice');
assert.equal(
catalogueDetailHref('https://outside.test/a', 'q=rice'),
'https://outside.test/a',
);
});
test('only positive finite page numbers survive; repeated scalar criteria have one deliberate value', () => {
assert.equal(
catalogueQuery(
'/carteira',
'q=old&q=new&page=-1&per_page=Infinity',
).toString(),
'q=new',
);
assert.equal(
catalogueReturnHref(
'/carteira',
'/carteira/a?catalogue_query=' +
encodeURIComponent('https://outside.test'),
),
'/carteira',
);
});