84 lines
2.7 KiB
JavaScript
84 lines
2.7 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
portalNavigation,
|
|
currentNavigationGroup,
|
|
currentNavigationItem,
|
|
} from '../../resources/js/lib/portal-navigation.ts';
|
|
|
|
void test('public and authenticated navigation share groups without revealing management', () => {
|
|
const publicGroups = portalNavigation({
|
|
authenticated: false,
|
|
manager: false,
|
|
});
|
|
const investor = portalNavigation({ authenticated: true, manager: false });
|
|
assert.deepEqual(publicGroups.slice(0, 3), investor.slice(0, 3));
|
|
assert.deepEqual(
|
|
publicGroups.map((g) => g.id),
|
|
['explore', 'prepare', 'support', 'partnerships', 'account'],
|
|
);
|
|
const hrefs = JSON.stringify(investor);
|
|
assert.equal(hrefs.includes('/management/'), false);
|
|
assert.equal(JSON.stringify(publicGroups).includes('/login'), true);
|
|
assert.equal(hrefs.includes('/investidor/profile'), true);
|
|
assert.equal(hrefs.includes('/balcao-virtual'), true);
|
|
});
|
|
|
|
void test('management and optional modules follow permissions and feature flags', () => {
|
|
const groups = portalNavigation({
|
|
authenticated: true,
|
|
manager: true,
|
|
businesses: true,
|
|
education: true,
|
|
ai: true,
|
|
});
|
|
assert.equal(groups.at(-1).id, 'management');
|
|
assert.equal(JSON.stringify(groups).includes('/investidor/negocios'), true);
|
|
assert.equal(JSON.stringify(groups).includes('/management/ai'), true);
|
|
assert.equal(
|
|
JSON.stringify(
|
|
portalNavigation({
|
|
authenticated: false,
|
|
manager: false,
|
|
education: false,
|
|
}),
|
|
).includes('/educacao'),
|
|
false,
|
|
);
|
|
});
|
|
|
|
void test('detail URLs and filtered catalogue pages retain the current group', () => {
|
|
const groups = portalNavigation({ authenticated: true, manager: true });
|
|
for (const url of [
|
|
'/carteira/project/fixture',
|
|
'/zonas?category=zee',
|
|
'/zonas/fixture',
|
|
'/oportunidades/fixture',
|
|
])
|
|
assert.equal(currentNavigationGroup(groups, url), 'explore');
|
|
assert.equal(
|
|
currentNavigationGroup(
|
|
groups,
|
|
'/balcao-virtual/dossiers/fixture?phase=market',
|
|
),
|
|
'support',
|
|
);
|
|
assert.equal(
|
|
currentNavigationGroup(groups, '/investidor/profile'),
|
|
'account',
|
|
);
|
|
assert.equal(
|
|
currentNavigationGroup(groups, '/management/crm/leads/fixture'),
|
|
'management',
|
|
);
|
|
assert.equal(currentNavigationGroup(groups, '/unknown'), null);
|
|
assert.equal(
|
|
currentNavigationItem(groups, '/carteira?q=QA&kind=project'),
|
|
'projects',
|
|
);
|
|
assert.equal(
|
|
currentNavigationItem(groups, '/zonas?category=zee&q=QA'),
|
|
'zee',
|
|
);
|
|
});
|