import { App } from '@inertiajs/react'; import type { Page } from '@inertiajs/core'; import { renderToString } from 'react-dom/server'; import { expect, test } from 'vitest'; import Submissions from '@/pages/people/submissions'; import Receipt from '@/pages/candidate/receipt'; const page = { component: 'people/submissions', url: '/pessoas/1/recebidas', version: 'triage', props: { errors: {} }, clearHistory: false, encryptHistory: true, } satisfies Page; const row = { id: 7, reference: 'CAND-TEST', received_at: '2026-10-30', decision: null, snapshot: { opportunity: { form: { definition: { fields: [{ key: 'full_name', label: 'Nome completo' }], }, }, }, profile: { data: { name: 'Pessoa fictícia', summary: 'Perfil fictício.' }, }, answers: { full_name: 'Pessoa fictícia' }, }, }; test.each([true, false])( 'internal triage editing follows assignment (%s) and keeps private and public messages separate', (canTriage) => { const initialPage = { ...page, props: { ...page.props, process: { id: 1, title: 'Processo fictício', version: 2 }, publication: null, publicUrl: '/candidaturas/1/oportunidades/1', canPrepare: canTriage, canTriage, submissions: { data: [row], prev_page_url: null, next_page_url: null, }, }, }; const html = renderToString( , ); expect(html).toContain('Pessoa fictícia'); expect(html.includes('Registar decisão de triagem')).toBe(canTriage); expect(html.includes('Motivo interno (reservado)')).toBe(canTriage); expect(html.includes('Comunicação destinada ao candidato')).toBe( canTriage, ); expect(html.includes('Guardar publicação')).toBe(canTriage); }, ); test('candidate receives a triage status that does not claim hiring or inclusion in a database', () => { const initialPage = { ...page, component: 'candidate/receipt', props: { ...page.props, companyId: 1, receipt: { reference: 'CAND-TEST', received_at: '2026-10-30', snapshot: { opportunity: { title: 'Processo' }, profile: { version: 1 }, answers: {}, }, }, decision: { outcome: 'accepted_for_analysis', message: 'Comunicação aprovada para o titular.', decided_at: '2026-10-30', }, }, }; const html = renderToString( , ); expect(html).toContain('Aceite para análise'); expect(html).toContain('Comunicação aprovada para o titular.'); expect(html).not.toContain('Motivo interno'); expect(html).toContain('não significa aceitação'); });