Le bouton menait au registre de paramétrage juridique — un autre document, qui ne répond à aucune demande d'inspection. Le registre unique du personnel n'existait pas. Il se tient par établissement : celui-ci est demandé avant l'édition plutôt que déduit, car en tirer un au hasard pour une entreprise qui compte trente sites ne répondrait à rien. Une ligne par contrat et non par personne : un salarié réembauché a deux entrées et deux sorties, et les fondre effacerait l'interruption. Les partis y figurent aussi — c'est l'historique que l'inspection vient chercher. Les mentions manquantes sont annoncées avant le téléchargement, et comptées par salarié parce que la contravention l'est aussi. Découvrir un registre incomplet en l'ouvrant, c'est le découvrir devant l'inspection. L'édition est journalisée : le document rassemble l'identité, la nationalité et le parcours de tout le personnel d'un site. Une réserve, portée par le code et par le document : PlanFlow ne collecte pas le sexe, mention pourtant exigée. La colonne reste vide et alimente le décompte des dossiers incomplets, en attendant le champ. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { expect, test } from '@playwright/test';
|
||
|
||
/**
|
||
* Registre unique du personnel — édition.
|
||
*
|
||
* Ce qui est éprouvé n'est pas la mise en page, mais qu'un fichier sorte et
|
||
* qu'il porte le bon établissement : un registre édité pour le mauvais site ne
|
||
* répond à aucune demande d'inspection.
|
||
*/
|
||
|
||
test('le registre s’édite par établissement', async ({ page }) => {
|
||
await page.goto('/equipe');
|
||
|
||
await page.getByRole('button', { name: 'Registre unique du personnel' }).click();
|
||
await expect(
|
||
page.getByRole('heading', {
|
||
name: 'Téléchargez votre registre unique du personnel',
|
||
}),
|
||
).toBeVisible();
|
||
|
||
// Sans établissement, rien à télécharger : le registre se tient par site.
|
||
const download = page.getByRole('link', { name: 'Télécharger' });
|
||
await expect(download).toHaveAttribute('aria-disabled', 'true');
|
||
|
||
const select = page.getByLabel('Établissement pour lequel éditer le registre');
|
||
const value = await select.locator('option').nth(1).getAttribute('value');
|
||
await select.selectOption(value!);
|
||
|
||
const started = page.waitForEvent('download');
|
||
await download.click();
|
||
const file = await started;
|
||
|
||
expect(file.suggestedFilename()).toMatch(/^RUP - .+\.pdf$/);
|
||
|
||
// Le contenu est bien un PDF, pas une page d'erreur renvoyée en 200.
|
||
const path = await file.path();
|
||
const { readFileSync } = await import('node:fs');
|
||
expect(readFileSync(path).subarray(0, 5).toString()).toBe('%PDF-');
|
||
});
|
||
|
||
test('l’adresse du registre refuse un établissement absent', async ({
|
||
page,
|
||
}) => {
|
||
const response = await page.goto('/equipe/registre');
|
||
expect(response?.status()).toBe(400);
|
||
});
|