Permitir consulta pública dos ecrãs reais com dados privados protegidos
tests / ci (push) Canceled after 0s
tests / ci (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { App } from '@inertiajs/react';
|
||||
import type { Page } from '@inertiajs/core';
|
||||
import type { ComponentType } from 'react';
|
||||
import { renderToString } from 'react-dom/server';
|
||||
import { expect, test } from 'vitest';
|
||||
import AppLayout from '@/layouts/app-layout';
|
||||
import { procurementNavigation } from '@/lib/procurement-navigation';
|
||||
|
||||
const fixtures = JSON.parse(
|
||||
readFileSync(
|
||||
new URL(
|
||||
'../../storage/app/private/public-navigation-fixtures.json',
|
||||
import.meta.url,
|
||||
),
|
||||
'utf8',
|
||||
),
|
||||
) as Record<string, Page>;
|
||||
const modules = import.meta.glob<{
|
||||
default: ComponentType<Record<string, unknown>>;
|
||||
}>('../../resources/js/pages/**/*.tsx', { eager: true });
|
||||
test.each(Object.entries(fixtures))(
|
||||
'real public page %s renders with the actual application shell and no authenticated user',
|
||||
(name, initialPage) => {
|
||||
const Screen = modules[`../../resources/js/pages/${name}.tsx`]?.default;
|
||||
expect(Screen).toBeDefined();
|
||||
const Component = (props: Record<string, unknown>) => (
|
||||
<AppLayout>
|
||||
<Screen {...props} />
|
||||
</AppLayout>
|
||||
);
|
||||
const html = renderToString(
|
||||
<App initialPage={initialPage} initialComponent={Component} />,
|
||||
);
|
||||
expect(html).toContain('Consulta pública de desenvolvimento');
|
||||
expect(html).not.toContain('/consulta?');
|
||||
expect(html).toContain('/dashboard');
|
||||
},
|
||||
);
|
||||
test('public menu links only to the explicit public screens and never grants a staff role', () => {
|
||||
const paths = (
|
||||
fixtures.dashboard.props.publicNavigation as { paths: string[] }
|
||||
).paths;
|
||||
const groups = procurementNavigation('', false, paths);
|
||||
expect(groups.length).toBeGreaterThan(3);
|
||||
for (const entry of groups.flatMap((group) => group.entries))
|
||||
expect(paths).toContain(new URL(entry.path, 'http://local').pathname);
|
||||
expect(
|
||||
groups
|
||||
.flatMap((group) => group.entries)
|
||||
.some((entry) => entry.path.startsWith('/administracao')),
|
||||
).toBe(false);
|
||||
expect(fixtures.dashboard.props.auth).toEqual({ user: null });
|
||||
});
|
||||
Reference in New Issue
Block a user