Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correction et refacto de l'affichage des questions #3427

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'

runSimulateurTest('eirl', true)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { runSimulateurTest } from '../../../support/simulateur'

runSimulateurTest('eirl', false, () =>
cy.contains('Impôt sur les sociétés').click()
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'

runSimulateurTest('entreprise-individuelle', true)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { runSimulateurTest } from '../../../support/simulateur'

runSimulateurTest('eurl', true, () =>
cy.contains('Impôt sur le revenu').click()
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'

runSimulateurTest('eurl')
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'

runSimulateurTest('indépendant')
runSimulateurTest('indépendant', true)
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'

runSimulateurTest('profession-liberale')
runSimulateurTest('profession-liberale', true)
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'

runSimulateurTest('profession-liberale/auxiliaire-medical')
runSimulateurTest('profession-liberale/auxiliaire-medical', true)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'

runSimulateurTest('profession-liberale/avocat', true)
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'

runSimulateurTest('profession-liberale/chirurgien-dentiste')
runSimulateurTest('profession-liberale/chirurgien-dentiste', true)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'

runSimulateurTest('profession-liberale/expert-comptable', true)
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'

runSimulateurTest('profession-liberale/medecin')
runSimulateurTest('profession-liberale/medecin', true)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'

runSimulateurTest('profession-liberale/pharmacien', true)
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'

runSimulateurTest('profession-liberale/sage-femme')
runSimulateurTest('profession-liberale/sage-femme', true)
17 changes: 14 additions & 3 deletions site/cypress/support/simulateur.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ const lang = Cypress.env('language') as 'fr' | 'en'

type Simulateur =
| 'auto-entrepreneur'
| 'eirl'
| 'eurl'
| 'entreprise-individuelle'
| 'salaire-brut-net'
| 'salary'
| 'sasu'
Expand All @@ -16,6 +19,9 @@ type Simulateur =
| 'profession-liberale/chirurgien-dentiste'
| 'profession-liberale/médecin'
| 'profession-liberale/sage-femme'
| 'profession-liberale/pharmacien'
| 'profession-liberale/avocat'
| 'profession-liberale/expert-comptable'

const variableNames = {
url: {
Expand Down Expand Up @@ -44,13 +50,18 @@ const variableNames = {
},
}

export const runSimulateurTest = (simulateur: Simulateur) => {
export const runSimulateurTest = (
simulateur: Simulateur,
avecCharges = false,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comme on risque de multiplier les options, préférer peut-être un objet options :

export const runSimulateurTest = (
	simulateur: Simulateur,
	{ avecCharges = false }: RunSimulateurOptions,
	beforeAction = () => {}
) => {

ce qui facilite aussi la lecture à l’utilisation en étant explicite :

runSimulateurTest('profession-liberale/medecin', { avecCharges: true})

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pourquoi ne pas mettre beforeAction dans les options aussi ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oui, tu as raison, on peut considérer ça comme une option également !

beforeAction = () => {}
) => {
describe(
`Le simulateur ${simulateur}`,
{ testIsolation: false },
function () {
before(function () {
cy.visit(encodeURI(`/${variableNames.url[lang]}/${simulateur}`))
beforeAction?.()
})

it("devrait s'afficher", function () {
Expand All @@ -67,7 +78,7 @@ export const runSimulateurTest = (simulateur: Simulateur) => {

it('devrait afficher un résultat pour chaque champ rempli', function () {
cy.contains(variableNames.yearTab[lang]).click()
if (['indépendant', 'profession-liberale'].includes(simulateur)) {
if (avecCharges) {
cy.get(chargeInputSelector).type('{selectall}1000')
}
cy.get(inputSelector).each(($testedInput) => {
Expand All @@ -91,7 +102,7 @@ export const runSimulateurTest = (simulateur: Simulateur) => {
it("devrait permettre de changer d'échelle temporelle", function () {
cy.contains(variableNames.yearTab[lang]).click()
cy.get(inputSelector).first().type('{selectall}12000')
if (['indépendant', 'profession-liberale'].includes(simulateur)) {
if (avecCharges) {
cy.get(chargeInputSelector).type('{selectall}6000')
}

Expand Down
2 changes: 1 addition & 1 deletion site/source/components/GuichetInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export default function GuichetInfo({ codeApe }: { codeApe: string }) {
}

return (
<Ul noMarker>
<Ul $noMarker>
{guichetEntries.map((guichetEntry) => {
return (
<Li key={guichetEntry.code}>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import React from 'react'
import { useSelector } from 'react-redux'

import { Message } from '@/design-system'
import { Emoji } from '@/design-system/emoji'
import { SmallBody } from '@/design-system/typography/paragraphs'
import { firstStepCompletedSelector } from '@/store/selectors/simulationSelectors'

import { FadeIn } from './ui/animate'
import { FadeIn } from '../ui/animate'

type BannerProps = {
children: React.ReactNode
Expand All @@ -16,16 +14,11 @@ type BannerProps = {
className?: string
}

export default function Banner({
export default function SimulationBanner({
children,
hidden: hiddenProp = false,
hideAfterFirstStep = true,
hidden = false,
icon,
}: BannerProps) {
const hiddenState = useSelector(firstStepCompletedSelector)

const hidden = hiddenProp || (hideAfterFirstStep && hiddenState)

return !hidden ? (
<FadeIn>
<Message
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,22 @@
import { Trans, useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'

import SimulationBanner from '@/components/Simulation/Banner'
import { Link } from '@/design-system/typography/link'
import { loadPreviousSimulation } from '@/store/actions/actions'
import { RootState } from '@/store/reducers/rootReducer'
import { firstStepCompletedSelector } from '@/store/selectors/simulationSelectors'

import Banner from './Banner'
import { previousSimulationSelector } from '@/store/selectors/simulationSelectors'

export default function PreviousSimulationBanner() {
const previousSimulation = useSelector(
(state: RootState) => state.previousSimulation
)
const newSimulationStarted = useSelector(firstStepCompletedSelector)
const previousSimulation = useSelector(previousSimulationSelector)
const dispatch = useDispatch()

const { t } = useTranslation()

if (!previousSimulation) {
return null
}

return (
<Banner
className="print-hidden"
hidden={!previousSimulation || newSimulationStarted}
icon="💾"
>
<SimulationBanner className="print-hidden" icon="💾">
<Trans i18nKey="previousSimulationBanner.info">
Votre précédente simulation a été sauvegardée :
</Trans>{' '}
Expand All @@ -37,6 +31,6 @@ export default function PreviousSimulationBanner() {
Retrouver ma précédente simulation
</Trans>
</Link>
</Banner>
</SimulationBanner>
)
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,34 @@
import { difference } from 'effect/Array'
import { Trans, useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { styled } from 'styled-components'

import SimulationBanner from '@/components/Simulation/Banner'
import { PopoverWithTrigger } from '@/design-system'
import { Link } from '@/design-system/typography/link'
import { companySituationSelector } from '@/store/selectors/simulationSelectors'
import {
companySituationSelector,
situationSelector,
} from '@/store/selectors/simulationSelectors'

import Banner from './Banner'
import AnswerList from './conversation/AnswerList'
import WrongSimulateurWarning from './WrongSimulateurWarning'
import AnswerList from '../conversation/AnswerList'
import WrongSimulateurWarning from '../WrongSimulateurWarning'

export default function SimulationPréremplieBanner() {
const existingCompany = !!useSelector(companySituationSelector)[
'entreprise . SIREN'
]
const companySituation = useSelector(companySituationSelector)
const simulationSituation = useSelector(situationSelector)
const preexistingCompanySituation =
difference(Object.keys(companySituation), Object.keys(simulationSituation))
.length > 0

const { t } = useTranslation()

if (!existingCompany) {
if (!preexistingCompanySituation) {
return null
}

return (
<Banner icon="✏">
<SimulationBanner icon="✏">
<Trans i18nKey="simulationPréremplieBanner.info">
Ce simulateur a été prérempli avec la situation de votre entreprise.
</Trans>{' '}
Expand All @@ -47,7 +53,7 @@ export default function SimulationPréremplieBanner() {
<WrongSimulateurWarningContainer>
<WrongSimulateurWarning />
</WrongSimulateurWarningContainer>
</Banner>
</SimulationBanner>
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,25 @@ import { Trans } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { styled } from 'styled-components'

import Banner from '@/components/Banner'
import SimulationBanner from '@/components/Simulation/Banner'
import { Link } from '@/design-system/typography/link'
import { enregistreLaRéponse } from '@/store/actions/actions'
import { getCurrentYear, getYearsBetween } from '@/utils/dates'

import useYear from './utils/useYear'
import useYear from '../utils/useYear'

const Bold = styled.span<{ $bold: boolean }>`
${({ $bold }) => ($bold ? 'font-weight: bold;' : '')}
`

export const SelectSimulationYear = () => {
export const YearSelectionBanner = () => {
const dispatch = useDispatch()
const currentYear = getCurrentYear()
const choices = getYearsBetween(2023, currentYear)
const currentEngineYear = useYear()

return (
<Banner hideAfterFirstStep={false} icon={'📅'}>
<SimulationBanner icon={'📅'}>
<Trans i18nKey="pages.simulateurs.select-year.info">
Cette simulation concerne l'année{' '}
<Bold $bold={currentEngineYear !== currentYear}>
Expand Down Expand Up @@ -52,7 +52,7 @@ export const SelectSimulationYear = () => {
</span>
))}
</>
</Banner>
</SimulationBanner>
)
}

Expand Down
23 changes: 14 additions & 9 deletions site/source/components/Simulation/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { DottedName } from 'modele-social'
import React from 'react'
import { useSelector } from 'react-redux'
import { useLocation } from 'react-router-dom'
Expand All @@ -10,17 +11,18 @@ import ShareOrSaveSimulationBanner, {
import { Button } from '@/design-system/buttons'
import { Grid, Spacing } from '@/design-system/layout'
import { H3 } from '@/design-system/typography/heading'
import { RootState } from '@/store/reducers/rootReducer'
import { ilYADesQuestionsSelector } from '@/store/selectors/ilYADesQuestions.selector'
import { firstStepCompletedSelector } from '@/store/selectors/simulationSelectors'

import { TrackPage } from '../ATInternetTracking'
import { Feedback, getShouldAskFeedback } from '../Feedback/Feedback'
import PrintExportRecover from '../simulationExplanation/PrintExportRecover'
import SimulationPréremplieBanner from '../SimulationPréremplieBanner'
import PreviousSimulationBanner from './../PreviousSimulationBanner'
import { FromTop } from './../ui/animate'
import EntrepriseSelection from './EntrepriseSelection'
import PreviousSimulationBanner from './PreviousSimulationBanner'
import { Questions } from './Questions'
import SimulationPréremplieBanner from './SimulationPréremplieBanner'

export { Questions } from './Questions'
export { SimulationGoal } from './SimulationGoal'
Expand Down Expand Up @@ -48,6 +50,7 @@ type SimulationProps = {
id?: string
customSimulationbutton?: CustomSimulationButton
entrepriseSelection?: boolean
firstStepCompletedExceptions?: DottedName[]
}

export default function Simulation({
Expand All @@ -62,10 +65,14 @@ export default function Simulation({
id,
customSimulationbutton,
entrepriseSelection = true,
firstStepCompletedExceptions,
}: SimulationProps) {
const firstStepCompleted = useSelector(firstStepCompletedSelector)
const firstStepCompleted = useSelector((state: RootState) =>
firstStepCompletedSelector(state, firstStepCompletedExceptions)
)
const ilYADesQuestions = useSelector(ilYADesQuestionsSelector)
const shouldShowFeedback = getShouldAskFeedback(useLocation().pathname)
const showQuestions = showQuestionsFromBeginning || firstStepCompleted

return (
<>
Expand All @@ -75,24 +82,22 @@ export default function Simulation({
<PrintExportRecover />
{children}
<FromTop>
{(firstStepCompleted || showQuestionsFromBeginning) && (
{showQuestions && (
<>
{entrepriseSelection && <EntrepriseSelection />}
<div className="print-hidden">
<FromTop>{results}</FromTop>
</div>
{entrepriseSelection && <EntrepriseSelection />}
{ilYADesQuestions && (
<Questions customEndMessages={customEndMessages} />
)}
</>
)}
<Spacing md />

<SimulationPréremplieBanner />
{!entrepriseSelection && <SimulationPréremplieBanner />}

{!showQuestionsFromBeginning && !firstStepCompleted && (
<PreviousSimulationBanner />
)}
{!showQuestions && <PreviousSimulationBanner />}

{afterQuestionsSlot}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ export default function EntrepriseSearchResults({
) : (
<FromTop>
<ForceThemeProvider>
<Ul noMarker data-test-id="company-search-results">
<Ul $noMarker data-test-id="company-search-results">
{results.map((entreprise) => (
<Li key={entreprise.siren}>
<StyledCard
Expand Down
2 changes: 1 addition & 1 deletion site/source/components/layout/Menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export const Menu = () => {
)}
>
<Nav>
<StyledUl noMarker>
<StyledUl $noMarker>
<PlanContent />
</StyledUl>
</Nav>
Expand Down
Loading
Loading