97 lines
3.2 KiB
TypeScript
97 lines
3.2 KiB
TypeScript
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(
|
|
<App initialPage={initialPage} initialComponent={Submissions} />,
|
|
);
|
|
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(
|
|
<App initialPage={initialPage} initialComponent={Receipt} />,
|
|
);
|
|
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');
|
|
});
|