Skip to content

Commit 8e1ef8a

Browse files
committed
refactor(DsfrMedia): ✨ remanie les stories DsfrPicture et DsfrVideo
- Mettre à jour les fichiers de stories au format CSF3 pour suivre les bonnes pratiques de Storybook. - Améliorer la lisibilité et la maintenabilité des stories. - Assurer le bon fonctionnement des contrôles et des actions dans l'interface de Storybook. - **DsfrPicture.stories.ts**: Refactorisation complète au format CSF3, avec mise à jour de la fonction `play`. - **DsfrVideo.stories.ts**: Passage au format CSF3, avec correction des imports et mise à jour de la fonction `play`.
1 parent b974bb6 commit 8e1ef8a

File tree

2 files changed

+71
-88
lines changed

2 files changed

+71
-88
lines changed
Lines changed: 40 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import { expect, within } from 'storybook/test'
1+
import type { Meta, StoryObj } from '@storybook/vue3'
2+
3+
import { expect, within } from '@storybook/test'
24

35
import DsfrPicture from './DsfrPicture.vue'
46

5-
export default {
7+
const meta = {
68
component: DsfrPicture,
79
title: 'Composants/DsfrPicture',
810
argTypes: {
@@ -37,52 +39,41 @@ export default {
3739
'Permet d’alterner entre les différents ratio possibles pour le contenu ("32x9", "16x9", "3x2", "4x3", "1x1", "3x4", "2x3") la chaine de caractères changera la classe associée, "16x9" par défaut',
3840
},
3941
},
40-
}
42+
} satisfies Meta<typeof DsfrPicture>
43+
44+
export default meta
45+
type Story = StoryObj<typeof meta>
4146

42-
export const ImageSrc = (args) => ({
43-
components: { DsfrPicture },
44-
data () {
45-
return args
47+
export const ImageSrc: Story = {
48+
name: 'Image avec source',
49+
args: {
50+
size: 'medium',
51+
src: 'https://loremflickr.com/300/200/cat',
52+
alt: '',
53+
title: 'Photographie d’un chaton',
54+
legend: 'Photographie d’un chaton',
55+
ratio: '16x9',
56+
},
57+
play: async ({ canvasElement, args }) => {
58+
const canvas = within(canvasElement)
59+
const img = canvas.getByTitle(args.title!)
60+
const figCaption = canvas.getByText(args.legend!)
61+
expect(img).toHaveAttribute('src', args.src)
62+
expect(img).toHaveAttribute('title', args.title)
63+
expect(figCaption).toHaveProperty('tagName', 'FIGCAPTION')
4664
},
47-
template: `
48-
<DsfrPicture
49-
:src="src"
50-
:alt="alt"
51-
:title="title"
52-
:legend="legend"
53-
:size="size"
54-
:ratio="ratio"
55-
style="max-width: 500px"
56-
/>
57-
`,
58-
})
59-
ImageSrc.args = {
60-
size: 'medium',
61-
src: 'https://loremflickr.com/300/200/cat',
62-
alt: '',
63-
title: 'Photographie d’un chaton',
64-
legend: 'Photographie d’un chaton',
65-
ratio: '16x9',
66-
}
67-
ImageSrc.play = async ({ canvasElement }) => {
68-
const canvas = within(canvasElement)
69-
const img = canvas.getByTitle(ImageSrc.args.title)
70-
const figCaption = canvas.getByText(ImageSrc.args.legend)
71-
expect(img).toHaveAttribute('src', ImageSrc.args.src)
72-
expect(img).toHaveAttribute('title', ImageSrc.args.title)
73-
expect(figCaption).toHaveProperty('tagName', 'FIGCAPTION')
7465
}
7566

76-
export const ImageSvg = (args) => ({
77-
components: { DsfrPicture },
78-
data () {
79-
return args
80-
},
81-
template: `
67+
export const ImageSvg: Story = {
68+
name: 'Image avec SVG',
69+
render: args => ({
70+
components: { DsfrPicture },
71+
setup: () => ({ args }),
72+
template: `
8273
<DsfrPicture
83-
:legend="legend"
84-
:size="size"
85-
:ratio="ratio"
74+
:legend="args.legend"
75+
:size="args.size"
76+
:ratio="args.ratio"
8677
style="max-width: 500px"
8778
>
8879
<svg version="1.1" id="Layer_1" style="enable-background:new 0 0 122.88 106.42; width: 200px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 122.88 106.42" xml:space="preserve">
@@ -93,9 +84,10 @@ export const ImageSvg = (args) => ({
9384
</svg>
9485
</DsfrPicture>
9586
`,
96-
})
97-
ImageSvg.args = {
98-
size: 'medium',
99-
legend: 'Vue in Gotham',
100-
ratio: '16x9',
87+
}),
88+
args: {
89+
size: 'medium',
90+
legend: 'Vue in Gotham',
91+
ratio: '16x9',
92+
},
10193
}
Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import { setup } from '@storybook/vue3-vite'
2-
import { expect, within } from 'storybook/test'
1+
import type { Meta, StoryObj } from '@storybook/vue3'
2+
3+
import { expect, fn, within } from '@storybook/test'
4+
import { setup } from '@storybook/vue3'
35

46
import DsfrModal from '../DsfrModal/DsfrModal.vue'
57
import VIcon from '../VIcon/VIcon.vue'
@@ -14,7 +16,7 @@ setup((app) => {
1416
const delay = (timeout = 100) =>
1517
new Promise((resolve) => setTimeout(resolve, timeout))
1618

17-
export default {
19+
const meta = {
1820
component: DsfrVideo,
1921
title: 'Composants/DsfrVideo',
2022
argTypes: {
@@ -47,45 +49,34 @@ export default {
4749
description:
4850
'Permet d’alterner entre les différents ratio possibles pour le contenu ("32x9", "16x9", "3x2", "4x3", "1x1", "3x4", "2x3") la chaine de caractères changera la classe associée, "16x9" par défaut',
4951
},
50-
expandTranscription: {
51-
control: 'event',
52-
description: 'Event d\'ouverture de la modale contenant la transcription',
52+
onExpandTranscription: {
53+
action: fn(),
5354
},
5455
},
55-
}
56+
} satisfies Meta<typeof DsfrVideo>
57+
58+
export default meta
59+
type Story = StoryObj<typeof meta>
5660

57-
export const Video = (args) => ({
58-
components: { DsfrVideo },
59-
data () {
60-
return args
61+
export const Video: Story = {
62+
name: 'Vidéo',
63+
args: {
64+
size: 'medium',
65+
src: 'https://www.youtube.com/embed/HyirpmPL43I',
66+
legend: 'Vidéo traitant du Service National Universel',
67+
transcriptionTitle: 'Titre de la transcription',
68+
transcriptionContent: 'Contenu de la transcription',
69+
ratio: '16x9',
70+
},
71+
play: async ({ canvasElement, args }) => {
72+
const canvas = within(canvasElement)
73+
const caption = canvas.getByText(args.legend!)
74+
const transcriptionContent = canvas.getByText(args.transcriptionContent!)
75+
const button = canvas.getByRole('button')
76+
expect(transcriptionContent).not.toBeVisible()
77+
expect(caption).toHaveClass('fr-content-media__caption')
78+
button.click()
79+
await delay(500)
80+
expect(transcriptionContent).toBeVisible()
6181
},
62-
template: `
63-
<DsfrVideo
64-
:src="src"
65-
:legend="legend"
66-
:size="size"
67-
:transcriptionTitle="transcriptionTitle"
68-
:transcriptionContent="transcriptionContent"
69-
:ratio="ratio"
70-
/>
71-
`,
72-
})
73-
Video.args = {
74-
size: 'medium',
75-
src: 'https://www.youtube.com/embed/HyirpmPL43I',
76-
legend: 'Vidéo traitant du Service National Universel',
77-
transcriptionTitle: 'Titre de la transcription',
78-
transcriptionContent: 'Contenu de la transcription',
79-
ratio: '16x9',
80-
}
81-
Video.play = async ({ canvasElement }) => {
82-
const canvas = within(canvasElement)
83-
const caption = canvas.getByText(Video.args.legend)
84-
const transcriptionContent = canvas.getByText(Video.args.transcriptionContent)
85-
const button = canvas.getByRole('button')
86-
expect(transcriptionContent).not.toBeVisible()
87-
expect(caption).toHaveClass('fr-content-media__caption')
88-
button.click()
89-
await delay(500)
90-
expect(transcriptionContent).toBeVisible()
9182
}

0 commit comments

Comments
 (0)