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; const modules = import.meta.glob<{ default: ComponentType>; }>('../../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) => ( ); const html = renderToString( , ); 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 }); });