diff --git a/site/cypress/integration/README.md b/site/cypress/integration/README.md index 86605790a3..b27a589b5a 100644 --- a/site/cypress/integration/README.md +++ b/site/cypress/integration/README.md @@ -3,4 +3,4 @@ Les jeux de tests qu'on souhaite faire tourner avec le langage FR et EN doivent aller dans le sous-dossier `mon-entreprise/english`. -Les autres jeux ne seront testés qu'avent le langage FR. +Les autres jeux ne seront testés qu'avec le langage FR. diff --git a/site/cypress/integration/mon-entreprise/reduction-generale.ts b/site/cypress/integration/mon-entreprise/reduction-generale.ts new file mode 100755 index 0000000000..873e60d533 --- /dev/null +++ b/site/cypress/integration/mon-entreprise/reduction-generale.ts @@ -0,0 +1,110 @@ +import { checkA11Y, fr } from '../../support/utils' + +describe('Réduction générale', { testIsolation: false }, function () { + if (!fr) { + return + } + + const inputSelector = 'div[id="simulator-legend"] input[inputmode="numeric"]' + + before(function () { + return cy.visit('/simulateurs/réduction-générale') + }) + + it('should not crash', function () { + cy.contains('Salaire brut') + }) + + it('should allow to select a company size', function () { + cy.get('button').contains('SMIC').click() + + cy.contains('Plus de 50 salariés').click() + cy.contains('Modifier mes réponses').click() + cy.get('div[data-cy="modal"]') + .eq(0) + .contains('Effectif') + .next() + .contains('100') + cy.get('div[data-cy="modal"]').eq(0).contains('Fermer').click() + + cy.contains('Moins de 50 salariés').click() + cy.contains('Modifier mes réponses').click() + cy.get('div[data-cy="modal"]') + .eq(0) + .contains('Effectif') + .next() + .contains('10') + cy.get('div[data-cy="modal"]').eq(0).contains('Fermer').click() + }) + + it('should allow to change time period', function () { + cy.contains('Montant mensuel').click() + cy.get(inputSelector).first().type('{selectall}2000') + + cy.contains('Montant annuel').click() + cy.get(inputSelector).first().should('have.value', '24 000 €') + }) + + it('should have median salary and SMIC buttons', function () { + cy.contains('Montant mensuel').click() + cy.get('button').contains('SMIC') + cy.get('button').contains('salaire médian').click() + cy.get(inputSelector).first().should('have.value', '2 600 €') + }) + + it('should display values for the réduction générale', function () { + cy.contains('Montant mensuel').click() + cy.get(inputSelector).first().type('{selectall}1900') + + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale-value"]' + ).should('include.text', '494 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_retraite-value"]' + ).should('include.text', '93 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf-value"]' + ).should('include.text', '401 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf___part_chômage-value"]' + ).should('include.text', '63 €') + + cy.contains('Plus de 50 salariés').click() + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale-value"]' + ).should('include.text', '500 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_retraite-value"]' + ).should('include.text', '93 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf-value"]' + ).should('include.text', '407 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf___part_chômage-value"]' + ).should('include.text', '63 €') + }) + + it('should display a warning for a salary too high', function () { + cy.contains('Montant mensuel').click() + cy.get(inputSelector).first().type('{selectall}3000') + + cy.get('div[id="simulator-legend"]').should( + 'include.text', + 'La RGCP concerne uniquement les salaires inférieurs à 1,6 SMIC.' + ) + + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_retraite-value"]' + ).should('include.text', '0 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf-value"]' + ).should('include.text', '0 €') + cy.get( + 'p[id="salarié___cotisations___exonérations___réduction_générale___part_Urssaf___part_chômage-value"]' + ).should('include.text', '0 €') + }) + + it('should be RGAA compliant', function () { + checkA11Y() + }) +}) diff --git "a/site/test/regressions/__snapshots__/r\303\251duction-g\303\251n\303\251rale.test.ts.snap" "b/site/test/regressions/__snapshots__/r\303\251duction-g\303\251n\303\251rale.test.ts.snap" new file mode 100644 index 0000000000..88845dd809 --- /dev/null +++ "b/site/test/regressions/__snapshots__/r\303\251duction-g\303\251n\303\251rale.test.ts.snap" @@ -0,0 +1,199 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`calculate simulations-dividendes > DFS 1`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 513 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 407 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 72 +salarié . cotisations . exonérations . réduction générale . part retraite: 106" +`; + +exports[`calculate simulations-dividendes > DFS 2`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 547 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 444 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 69 +salarié . cotisations . exonérations . réduction générale . part retraite: 103" +`; + +exports[`calculate simulations-dividendes > DFS 3`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 564 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 458 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 72 +salarié . cotisations . exonérations . réduction générale . part retraite: 106" +`; + +exports[`calculate simulations-dividendes > DFS 4`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 564 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 458 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 72 +salarié . cotisations . exonérations . réduction générale . part retraite: 106" +`; + +exports[`calculate simulations-dividendes > DFS 5`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 440 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 357 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 56 +salarié . cotisations . exonérations . réduction générale . part retraite: 83" +`; + +exports[`calculate simulations-dividendes > avantages 1`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 387 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 314 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 49 +salarié . cotisations . exonérations . réduction générale . part retraite: 73" +`; + +exports[`calculate simulations-dividendes > avantages 2`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 387 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 314 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 49 +salarié . cotisations . exonérations . réduction générale . part retraite: 73" +`; + +exports[`calculate simulations-dividendes > effectif 1`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 440 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 357 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 56 +salarié . cotisations . exonérations . réduction générale . part retraite: 83" +`; + +exports[`calculate simulations-dividendes > effectif 2`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 446 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 363 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 56 +salarié . cotisations . exonérations . réduction générale . part retraite: 83" +`; + +exports[`calculate simulations-dividendes > heures supplémentaires 1`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 461 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 374 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 58 +salarié . cotisations . exonérations . réduction générale . part retraite: 87" +`; + +exports[`calculate simulations-dividendes > primes 1`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 387 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 314 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 49 +salarié . cotisations . exonérations . réduction générale . part retraite: 73" +`; + +exports[`calculate simulations-dividendes > primes 2`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 352 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 285 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 45 +salarié . cotisations . exonérations . réduction générale . part retraite: 66" +`; + +exports[`calculate simulations-dividendes > salaire 1`] = ` +"salarié . contrat . salaire brut: 100 +salarié . cotisations . exonérations . réduction générale: 32 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 26 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 4 +salarié . cotisations . exonérations . réduction générale . part retraite: 6 + +Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle" +`; + +exports[`calculate simulations-dividendes > salaire 2`] = ` +"salarié . contrat . salaire brut: 250 +salarié . cotisations . exonérations . réduction générale: 80 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 65 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 10 +salarié . cotisations . exonérations . réduction générale . part retraite: 15 + +Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle" +`; + +exports[`calculate simulations-dividendes > salaire 3`] = ` +"salarié . contrat . salaire brut: 500 +salarié . cotisations . exonérations . réduction générale: 160 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 130 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 20 +salarié . cotisations . exonérations . réduction générale . part retraite: 30 + +Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle" +`; + +exports[`calculate simulations-dividendes > salaire 4`] = ` +"salarié . contrat . salaire brut: 750 +salarié . cotisations . exonérations . réduction générale: 240 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 194 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 30 +salarié . cotisations . exonérations . réduction générale . part retraite: 45 + +Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle" +`; + +exports[`calculate simulations-dividendes > salaire 5`] = ` +"salarié . contrat . salaire brut: 1000 +salarié . cotisations . exonérations . réduction générale: 319 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 259 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 40 +salarié . cotisations . exonérations . réduction générale . part retraite: 60 + +Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle" +`; + +exports[`calculate simulations-dividendes > salaire 6`] = ` +"salarié . contrat . salaire brut: 1250 +salarié . cotisations . exonérations . réduction générale: 399 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 324 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 51 +salarié . cotisations . exonérations . réduction générale . part retraite: 75 + +Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle" +`; + +exports[`calculate simulations-dividendes > salaire 7`] = ` +"salarié . contrat . salaire brut: 1500 +salarié . cotisations . exonérations . réduction générale: 479 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 389 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 61 +salarié . cotisations . exonérations . réduction générale . part retraite: 90 + +Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle" +`; + +exports[`calculate simulations-dividendes > salaire 8`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 440 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 357 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 56 +salarié . cotisations . exonérations . réduction générale . part retraite: 83" +`; + +exports[`calculate simulations-dividendes > salaire 9`] = ` +"salarié . contrat . salaire brut: 2500 +salarié . cotisations . exonérations . réduction générale: 174 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 141 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 22 +salarié . cotisations . exonérations . réduction générale . part retraite: 33" +`; + +exports[`calculate simulations-dividendes > salaire 10`] = ` +"salarié . contrat . salaire brut: 3000 +salarié . cotisations . exonérations . réduction générale: 0 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 0 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 0 +salarié . cotisations . exonérations . réduction générale . part retraite: 0" +`; + +exports[`calculate simulations-dividendes > temps partiel 1`] = ` +"salarié . contrat . salaire brut: 2000 +salarié . cotisations . exonérations . réduction générale: 311 +salarié . cotisations . exonérations . réduction générale . part Urssaf: 253 +salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage: 39 +salarié . cotisations . exonérations . réduction générale . part retraite: 59" +`; diff --git "a/site/test/regressions/__snapshots__/salari\303\251.test.ts.snap" "b/site/test/regressions/__snapshots__/salari\303\251.test.ts.snap" index 2815f98d9f..3f2ed10b34 100644 --- "a/site/test/regressions/__snapshots__/salari\303\251.test.ts.snap" +++ "b/site/test/regressions/__snapshots__/salari\303\251.test.ts.snap" @@ -11,7 +11,7 @@ salarié . rémunération . net . à payer avant impôt: 1561" exports[`calculate simulations-salarié > ATMP 2`] = ` "salarié . contrat . salaire brut: 2000 salarié . contrat . salaire brut . équivalent temps plein: null -salarié . coût total employeur: 2248 +salarié . coût total employeur: 2247 salarié . rémunération . net . payé après impôt: 1553 salarié . rémunération . net . à payer avant impôt: 1561" `; @@ -279,7 +279,7 @@ salarié . rémunération . net . à payer avant impôt: 1561" exports[`calculate simulations-salarié > effectif 2`] = ` "salarié . contrat . salaire brut: 2000 salarié . contrat . salaire brut . équivalent temps plein: null -salarié . coût total employeur: 2294 +salarié . coût total employeur: 2293 salarié . rémunération . net . payé après impôt: 1553 salarié . rémunération . net . à payer avant impôt: 1561" `; @@ -353,7 +353,7 @@ Notifications affichées : salarié . rémunération . assiette de vérification exports[`calculate simulations-salarié > frais pro - DFS 7`] = ` "salarié . contrat . salaire brut: 2600 salarié . contrat . salaire brut . équivalent temps plein: null -salarié . coût total employeur: 3126 +salarié . coût total employeur: 3127 salarié . rémunération . net . payé après impôt: 2125 salarié . rémunération . net . à payer avant impôt: 2125" `; @@ -449,7 +449,7 @@ salarié . rémunération . net . à payer avant impôt: 2141" exports[`calculate simulations-salarié > frais pro - titres restaurant 3`] = ` "salarié . contrat . salaire brut: 2000 salarié . contrat . salaire brut . équivalent temps plein: null -salarié . coût total employeur: 2367 +salarié . coût total employeur: 2366 salarié . rémunération . net . payé après impôt: 1485 salarié . rémunération . net . à payer avant impôt: 1493" `; diff --git "a/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.test.ts" "b/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.test.ts" new file mode 100644 index 0000000000..4eeac734c5 --- /dev/null +++ "b/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.test.ts" @@ -0,0 +1,20 @@ +import { it } from 'vitest' + +import { configRéductionGénérale } from '@/pages/simulateurs/reduction-generale/simulationConfig' + +import réductionGénéraleSituation from './réduction-générale.yaml' +import { runSimulations } from './utils' + +it('calculate simulations-dividendes', () => { + runSimulations( + réductionGénéraleSituation, + [ + ...(configRéductionGénérale['objectifs exclusifs'] ?? []), + ...(configRéductionGénérale.objectifs ?? []), + 'salarié . cotisations . exonérations . réduction générale . part retraite', + 'salarié . cotisations . exonérations . réduction générale . part Urssaf', + 'salarié . cotisations . exonérations . réduction générale . part Urssaf . part chômage', + ], + configRéductionGénérale.situation + ) +}) diff --git "a/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.yaml" "b/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.yaml" new file mode 100644 index 0000000000..fd7473e909 --- /dev/null +++ "b/site/test/regressions/r\303\251duction-g\303\251n\303\251rale.yaml" @@ -0,0 +1,56 @@ +salaire: + - salarié . contrat . salaire brut: 100 €/mois + - salarié . contrat . salaire brut: 250 €/mois + - salarié . contrat . salaire brut: 500 €/mois + - salarié . contrat . salaire brut: 750 €/mois + - salarié . contrat . salaire brut: 1000 €/mois + - salarié . contrat . salaire brut: 1250 €/mois + - salarié . contrat . salaire brut: 1500 €/mois + - salarié . contrat . salaire brut: 2000 €/mois + - salarié . contrat . salaire brut: 2500 €/mois + - salarié . contrat . salaire brut: 3000 €/mois + +effectif: + - salarié . contrat . salaire brut: 2000 €/mois + entreprise . salariés . effectif: 10 employés + - salarié . contrat . salaire brut: 2000 €/mois + entreprise . salariés . effectif: 100 employés + +temps partiel: + - salarié . contrat . salaire brut: 2000 €/mois + salarié . contrat . temps de travail . temps partiel: oui + +primes: + - salarié . contrat . salaire brut: 2000 €/mois + salarié . rémunération . primes . activité: 100 €/mois + - salarié . contrat . salaire brut: 2000 €/mois + salarié . rémunération . primes . fin d'année: oui + +heures supplémentaires: + - salarié . contrat . salaire brut: 2000 €/mois + salarié . temps de travail . heures supplémentaires: 18 heures/mois + +avantages: + - salarié . contrat . salaire brut: 2000 €/mois + salarié . rémunération . avantages en nature: oui + salarié . rémunération . avantages en nature . montant: 100€/mois + - salarié . contrat . salaire brut: 2000 €/mois + salarié . rémunération . avantages en nature: oui + salarié . rémunération . avantages en nature . montant: 100€/mois + +DFS: + - salarié . contrat . salaire brut: 2000 €/mois + salarié . régimes spécifiques . DFS: oui + salarié . régimes spécifiques . DFS . profession: "'journaliste'" + - salarié . contrat . salaire brut: 2000 €/mois + salarié . régimes spécifiques . DFS: oui + salarié . régimes spécifiques . DFS . profession: "'ouvrier du bâtiment'" + - salarié . contrat . salaire brut: 2000 €/mois + salarié . régimes spécifiques . DFS: oui + salarié . régimes spécifiques . DFS . profession: "'artiste musicien'" + - salarié . contrat . salaire brut: 2000 €/mois + salarié . régimes spécifiques . DFS: oui + salarié . régimes spécifiques . DFS . profession: "'pilote de ligne ou personnel navigant'" + - salarié . contrat . salaire brut: 2000 €/mois + salarié . régimes spécifiques . DFS: non + salarié . régimes spécifiques . DFS . profession: "'journaliste'"