Skip to content

Commit fc8e0ac

Browse files
committed
test(DsfrInput): ✅ use storybook play
and remove cypress tests
1 parent 9f47758 commit fc8e0ac

File tree

2 files changed

+85
-31
lines changed

2 files changed

+85
-31
lines changed

src/components/DsfrInput/DsfrInput.e2e.ts

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/components/DsfrInput/DsfrInput.stories.ts

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import DsfrInput from './DsfrInput.vue'
44
import DsfrInputGroup from './DsfrInputGroup.vue'
55

66
import VIcon from '../VIcon/VIcon.vue'
7+
import { within, expect } from '@storybook/test'
78

89
/**
910
* [Voir quand l’utiliser sur la documentation du DSFR](https://www.systeme-de-design.gouv.fr/elements-d-interface/composants/champ-de-saisie)
@@ -117,6 +118,13 @@ ChampSansLabel.args = {
117118
modelValue: '',
118119
disabled: false,
119120
}
121+
ChampSansLabel.play = async ({ canvasElement }) => {
122+
const canvas = within(canvasElement)
123+
const label = canvas.getByText(ChampSansLabel.args.label)
124+
expect(label).toHaveClass('fr-label')
125+
const input = canvas.getByRole('textbox')
126+
expect(input).not.toHaveAttribute('required')
127+
}
120128

121129
export const LabelVisible = (args) => ({
122130
components: {
@@ -146,6 +154,14 @@ LabelVisible.args = {
146154
modelValue: '',
147155
disabled: false,
148156
}
157+
ChampSansLabel.play = async ({ canvasElement }) => {
158+
const canvas = within(canvasElement)
159+
const label = canvas.getByText(ChampSansLabel.args.label)
160+
expect(label).toHaveClass('fr-label')
161+
expect(label).toBeVisible()
162+
const input = canvas.getByRole('textbox')
163+
expect(input).not.toHaveAttribute('required')
164+
}
149165

150166
export const ChampRequis = (args) => ({
151167
components: {
@@ -181,6 +197,13 @@ ChampRequis.args = {
181197
disabled: false,
182198
isTextarea: true,
183199
}
200+
ChampRequis.play = async ({ canvasElement }) => {
201+
const canvas = within(canvasElement)
202+
const label = canvas.getByText(ChampRequis.args.label)
203+
expect(label).toHaveClass('fr-label')
204+
const input = canvas.getByRole('textbox')
205+
expect(input).toHaveAttribute('required')
206+
}
184207

185208
export const ChampAvecLabelPersonnalise = (args) => ({
186209
components: {
@@ -260,6 +283,13 @@ ChampAvecLabelPersonnalise.args = {
260283
disabled: false,
261284
isTextarea: true,
262285
}
286+
ChampAvecLabelPersonnalise.play = async ({ canvasElement }) => {
287+
const canvas = within(canvasElement)
288+
const label = canvas.getByText(ChampAvecLabelPersonnalise.args.label).parentElement
289+
expect(label).toHaveClass('fr-label')
290+
const input = canvas.getByRole('textbox')
291+
expect(input).toHaveAttribute('required')
292+
}
263293

264294
export const ChampRequisPersonnalise = (args) => ({
265295
components: {
@@ -280,7 +310,7 @@ export const ChampRequisPersonnalise = (args) => ({
280310
:required="true"
281311
>
282312
<template #required-tip>
283-
<em> (obligatoire)</em>
313+
<em> {{ requiredText }}</em>
284314
</template>
285315
</DsfrInput>
286316
`,
@@ -292,6 +322,16 @@ ChampRequisPersonnalise.args = {
292322
modelValue: '',
293323
disabled: false,
294324
isTextarea: true,
325+
requiredText: '(obligatoire)',
326+
}
327+
ChampRequisPersonnalise.play = async ({ canvasElement }) => {
328+
const canvas = within(canvasElement)
329+
const label = canvas.getByText(ChampRequisPersonnalise.args.label)
330+
const em = canvas.getByText(ChampRequisPersonnalise.args.requiredText)
331+
expect(em).toHaveProperty('tagName', 'EM')
332+
expect(label).toHaveClass('fr-label')
333+
const input = canvas.getByRole('textbox')
334+
expect(input).toHaveAttribute('required')
295335
}
296336

297337
export const ChampEnErreur = (args) => ({
@@ -328,6 +368,16 @@ ChampEnErreur.args = {
328368
errorMessage: 'Message d’erreur',
329369
isInvalid: true,
330370
}
371+
ChampEnErreur.play = async ({ canvasElement }) => {
372+
const canvas = within(canvasElement)
373+
const inputWrapper = canvas.getByText(ChampEnErreur.args.label).parentElement
374+
const messageEl = canvas.getByText(ChampEnErreur.args.errorMessage)
375+
376+
expect(inputWrapper).toHaveClass('fr-input-group')
377+
expect(inputWrapper).toHaveClass('fr-input-group--error')
378+
expect(messageEl).toHaveClass('fr-error-text')
379+
expect(messageEl.parentElement).toHaveClass('fr-messages-group')
380+
}
331381

332382
export const ChampValide = (args) => ({
333383
components: {
@@ -361,6 +411,16 @@ ChampValide.args = {
361411
validMessage: 'Message de validation',
362412
isValid: true,
363413
}
414+
ChampValide.play = async ({ canvasElement }) => {
415+
const canvas = within(canvasElement)
416+
const inputWrapper = canvas.getByText(ChampValide.args.label).parentElement
417+
const messageEl = canvas.getByText(ChampValide.args.validMessage)
418+
419+
expect(inputWrapper).toHaveClass('fr-input-group')
420+
expect(inputWrapper).toHaveClass('fr-input-group--valid')
421+
expect(messageEl).toHaveClass('fr-valid-text')
422+
expect(messageEl.parentElement).toHaveClass('fr-messages-group')
423+
}
364424

365425
export const ChampDeSaisieDeDate = (args) => ({
366426
components: {
@@ -392,6 +452,11 @@ ChampDeSaisieDeDate.args = {
392452
label: 'Date de naissance',
393453
hint: 'JJ/MM/AAAA',
394454
}
455+
ChampDeSaisieDeDate.play = async ({ canvasElement }) => {
456+
const canvas = within(canvasElement)
457+
const input = canvas.getByText(ChampDeSaisieDeDate.args.label).nextElementSibling?.querySelector('input')
458+
expect(input).toHaveAttribute('type', 'date')
459+
}
395460

396461
export const FocusSurChamp = (args) => ({
397462
components: {
@@ -413,7 +478,7 @@ export const FocusSurChamp = (args) => ({
413478
},
414479
template: `
415480
<DsfrButton @click="focusInput()">
416-
Focus sur l’input
481+
{{ inputButtonText }}
417482
</DsfrButton>
418483
419484
<DsfrInput
@@ -427,7 +492,7 @@ export const FocusSurChamp = (args) => ({
427492
/>
428493
429494
<DsfrButton @click="focusTextarea()">
430-
Focus sur le textarea
495+
{{ textareaButtonText }}
431496
</DsfrButton>
432497
433498
<DsfrInput
@@ -450,6 +515,18 @@ FocusSurChamp.args = {
450515
isTextarea: true,
451516
label: 'Label du champ',
452517
hint: '',
518+
inputButtonText: 'Focus sur l’input',
519+
textareaButtonText: 'Focus sur le textarea',
520+
}
521+
ChampValide.play = async ({ canvasElement }) => {
522+
const canvas = within(canvasElement)
523+
const inputWrapper = canvas.getByText(ChampValide.args.label).parentElement
524+
const messageEl = canvas.getByText(ChampValide.args.validMessage)
525+
526+
expect(inputWrapper).toHaveClass('fr-input-group')
527+
expect(inputWrapper).toHaveClass('fr-input-group--valid')
528+
expect(messageEl).toHaveClass('fr-valid-text')
529+
expect(messageEl.parentElement).toHaveClass('fr-messages-group')
453530
}
454531

455532
export const ZoneDeTexte = (args) => ({
@@ -480,3 +557,8 @@ ZoneDeTexte.args = {
480557
disabled: false,
481558
isTextarea: true,
482559
}
560+
ZoneDeTexte.play = async ({ canvasElement }) => {
561+
const canvas = within(canvasElement)
562+
const textarea = canvas.getByRole('textbox')
563+
expect(textarea).toHaveProperty('tagName', 'TEXTAREA')
564+
}

0 commit comments

Comments
 (0)