1616 */
1717
1818import type { Meta , StoryObj } from '@storybook/react-vite' ;
19+ import { expect } from 'storybook/test' ;
1920import BuildFormWrapperForStorybook from '../storybookWrappers/BuildFormWrapperForStorybook' ;
2021import {
2122 qChoiceCheckboxAnswerOption ,
@@ -32,6 +33,17 @@ import {
3233 qSliderStepValue
3334} from '../assets/questionnaires' ;
3435import { createStory } from '../storybookWrappers/createStory' ;
36+ import {
37+ checkCheckboxOtherOption ,
38+ checkCheckboxOption ,
39+ checkRadioOtherOption ,
40+ checkRadioOption ,
41+ chooseSliderValue ,
42+ chooseSelectOption ,
43+ getAnswers ,
44+ inputInteger ,
45+ inputText
46+ } from '../testUtils' ;
3547
3648// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
3749const meta = {
@@ -49,71 +61,247 @@ type Story = StoryObj<typeof meta>;
4961export const AutocompleteOpenChoice : Story = createStory ( {
5062 args : {
5163 questionnaire : qOpenChoiceAutocomplete
64+ } ,
65+ play : async ( { canvasElement } ) => {
66+ await inputText ( canvasElement , 'medical-history-condition' , 'Chronic sinusitis' ) ;
67+
68+ const answers = await getAnswers ( 'medical-history-condition' ) ;
69+ expect ( answers ) . toEqual ( [ expect . objectContaining ( { valueString : 'Chronic sinusitis' } ) ] ) ;
5270 }
5371} ) as Story ;
5472
5573export const DropDownChoiceAnswerOption : Story = createStory ( {
5674 args : {
5775 questionnaire : qChoiceDropDownAnswerOption
76+ } ,
77+ play : async ( { canvasElement } ) => {
78+ await chooseSelectOption ( canvasElement , 'smoking-status' , 'Smoker' ) ;
79+
80+ const answers = await getAnswers ( 'smoking-status' ) ;
81+ expect ( answers ) . toEqual ( [
82+ expect . objectContaining ( {
83+ valueCoding : expect . objectContaining ( { code : '77176002' , display : 'Smoker' } )
84+ } )
85+ ] ) ;
5886 }
5987} ) as Story ;
6088
6189export const DropDownChoiceAnswerValueSet : Story = createStory ( {
6290 args : {
6391 questionnaire : qChoiceDropDownAnswerValueSet
92+ } ,
93+ play : async ( { canvasElement } ) => {
94+ await chooseSelectOption (
95+ canvasElement ,
96+ 'preferred-pronouns' ,
97+ 'they/them/their/theirs/themselves'
98+ ) ;
99+
100+ const answers = await getAnswers ( 'preferred-pronouns' ) ;
101+ expect ( answers ) . toEqual ( [
102+ expect . objectContaining ( {
103+ valueCoding : expect . objectContaining ( {
104+ code : 'LA29520-6' ,
105+ display : 'they/them/their/theirs/themselves'
106+ } )
107+ } )
108+ ] ) ;
64109 }
65110} ) as Story ;
66111
67112export const CheckboxChoiceAnswerOption : Story = createStory ( {
68113 args : {
69114 questionnaire : qChoiceCheckboxAnswerOption
115+ } ,
116+ play : async ( { canvasElement } ) => {
117+ await checkCheckboxOption (
118+ canvasElement ,
119+ 'red-flags-any-age-single' ,
120+ 'Strong parental concerns'
121+ ) ;
122+ await checkCheckboxOption (
123+ canvasElement ,
124+ 'red-flags-any-age-single' ,
125+ 'Marked low tone (floppy) or high tone (stiff and tense) and significantly impacting on development and functional motor skills'
126+ ) ;
127+ await checkCheckboxOption ( canvasElement , 'red-flags-any-age-multi' , 'Strong parental concerns' ) ;
128+ await checkCheckboxOption (
129+ canvasElement ,
130+ 'red-flags-any-age-multi' ,
131+ 'Marked low tone (floppy) or high tone (stiff and tense) and significantly impacting on development and functional motor skills'
132+ ) ;
133+
134+ const singleAnswers = await getAnswers ( 'red-flags-any-age-single' ) ;
135+ const multiAnswers = await getAnswers ( 'red-flags-any-age-multi' ) ;
136+
137+ expect ( singleAnswers ) . toEqual ( [
138+ expect . objectContaining ( {
139+ valueString :
140+ 'Marked low tone (floppy) or high tone (stiff and tense) and significantly impacting on development and functional motor skills'
141+ } )
142+ ] ) ;
143+ expect ( multiAnswers ) . toEqual ( [
144+ expect . objectContaining ( { valueString : 'Strong parental concerns' } ) ,
145+ expect . objectContaining ( {
146+ valueString :
147+ 'Marked low tone (floppy) or high tone (stiff and tense) and significantly impacting on development and functional motor skills'
148+ } )
149+ ] ) ;
70150 }
71151} ) as Story ;
72152
73153export const CheckboxChoiceAnswerValueSet : Story = createStory ( {
74154 args : {
75155 questionnaire : qChoiceCheckboxAnswerValueSet
156+ } ,
157+ play : async ( { canvasElement } ) => {
158+ await checkCheckboxOption ( canvasElement , 'primary-carers-single' , 'Mother' ) ;
159+ await checkCheckboxOption ( canvasElement , 'primary-carers-single' , 'N/A' ) ;
160+ await checkCheckboxOption ( canvasElement , 'primary-carers-repeat' , 'Mother' ) ;
161+ await checkCheckboxOption ( canvasElement , 'primary-carers-repeat' , 'N/A' ) ;
162+
163+ const singleAnswers = await getAnswers ( 'primary-carers-single' ) ;
164+ const multiAnswers = await getAnswers ( 'primary-carers-repeat' ) ;
165+
166+ expect ( singleAnswers ) . toEqual ( [
167+ expect . objectContaining ( {
168+ valueCoding : expect . objectContaining ( { code : 'NA' , display : 'N/A' } )
169+ } )
170+ ] ) ;
171+ expect ( multiAnswers ) . toEqual ( [
172+ expect . objectContaining ( {
173+ valueCoding : expect . objectContaining ( { code : 'MTH' , display : 'Mother' } )
174+ } ) ,
175+ expect . objectContaining ( {
176+ valueCoding : expect . objectContaining ( { code : 'NA' , display : 'N/A' } )
177+ } )
178+ ] ) ;
76179 }
77180} ) as Story ;
78181
79182export const CheckboxOpenChoiceAnswerOption : Story = createStory ( {
80183 args : {
81184 questionnaire : qOpenChoiceCheckboxAnswerOption
185+ } ,
186+ play : async ( { canvasElement } ) => {
187+ await checkCheckboxOption ( canvasElement , 'otoscopic-findings-left-single' , 'Clear and intact' ) ;
188+ await checkCheckboxOtherOption (
189+ canvasElement ,
190+ 'otoscopic-findings-left-single' ,
191+ 'Manual left ear note (single)'
192+ ) ;
193+ await checkCheckboxOption ( canvasElement , 'otoscopic-findings-left-multi' , 'Clear and intact' ) ;
194+ await checkCheckboxOtherOption (
195+ canvasElement ,
196+ 'otoscopic-findings-left-multi' ,
197+ 'Manual left ear note (multi)'
198+ ) ;
199+
200+ const singleAnswers = await getAnswers ( 'otoscopic-findings-left-single' ) ;
201+ const multiAnswers = await getAnswers ( 'otoscopic-findings-left-multi' ) ;
202+
203+ expect ( singleAnswers ) . toEqual ( [
204+ expect . objectContaining ( { valueString : 'Manual left ear note (single)' } )
205+ ] ) ;
206+ expect ( multiAnswers ) . toEqual ( [
207+ expect . objectContaining ( { valueString : 'Clear and intact' } ) ,
208+ expect . objectContaining ( { valueString : 'Manual left ear note (multi)' } )
209+ ] ) ;
82210 }
83211} ) as Story ;
84212
85213export const CheckboxOpenChoiceAnswerValueSet : Story = createStory ( {
86214 args : {
87215 questionnaire : qOpenChoiceCheckboxAnswerValueSet
216+ } ,
217+ play : async ( { canvasElement } ) => {
218+ await checkCheckboxOption ( canvasElement , 'state-single' , 'Australian Capital Territory' ) ;
219+ await checkCheckboxOtherOption ( canvasElement , 'state-single' , 'Tasman Sea Island' ) ;
220+ await checkCheckboxOption ( canvasElement , 'state-multi' , 'Australian Capital Territory' ) ;
221+ await checkCheckboxOtherOption ( canvasElement , 'state-multi' , 'Coral Sea Island' ) ;
222+
223+ const singleAnswers = await getAnswers ( 'state-single' ) ;
224+ const multiAnswers = await getAnswers ( 'state-multi' ) ;
225+
226+ expect ( singleAnswers ) . toEqual ( [ expect . objectContaining ( { valueString : 'Tasman Sea Island' } ) ] ) ;
227+ expect ( multiAnswers ) . toEqual ( [
228+ expect . objectContaining ( {
229+ valueCoding : expect . objectContaining ( {
230+ code : 'ACT' ,
231+ display : 'Australian Capital Territory'
232+ } )
233+ } ) ,
234+ expect . objectContaining ( { valueString : 'Coral Sea Island' } )
235+ ] ) ;
88236 }
89237} ) as Story ;
90238
91239export const RadioChoiceAnswerOption : Story = createStory ( {
92240 args : {
93241 questionnaire : qChoiceRadioAnswerOption
242+ } ,
243+ play : async ( { canvasElement } ) => {
244+ await checkRadioOption ( canvasElement , 'puberty-worries' , 'Yes' ) ;
245+
246+ const answers = await getAnswers ( 'puberty-worries' ) ;
247+ expect ( answers ) . toEqual ( [
248+ expect . objectContaining ( {
249+ valueCoding : expect . objectContaining ( { code : 'Y' , display : 'Yes' } )
250+ } )
251+ ] ) ;
94252 }
95253} ) as Story ;
96254
97255export const RadioChoiceAnswerValueSet : Story = createStory ( {
98256 args : {
99257 questionnaire : qChoiceRadioAnswerValueSet
258+ } ,
259+ play : async ( { canvasElement } ) => {
260+ await checkRadioOption ( canvasElement , 'registered-for-my-aged-care' , 'Yes' ) ;
261+
262+ const answers = await getAnswers ( 'registered-for-my-aged-care' ) ;
263+ expect ( answers ) . toEqual ( [
264+ expect . objectContaining ( {
265+ valueCoding : expect . objectContaining ( { code : 'Y' , display : 'Yes' } )
266+ } )
267+ ] ) ;
100268 }
101269} ) as Story ;
102270
103271export const RadioOpenChoiceAnswerOption : Story = createStory ( {
104272 args : {
105273 questionnaire : qOpenChoiceRadioAnswerOption
274+ } ,
275+ play : async ( { canvasElement } ) => {
276+ await checkRadioOtherOption ( canvasElement , 'location-of-health-check' , 'Community hall' ) ;
277+
278+ const answers = await getAnswers ( 'location-of-health-check' ) ;
279+ expect ( answers ) . toEqual ( [ expect . objectContaining ( { valueString : 'Community hall' } ) ] ) ;
106280 }
107281} ) as Story ;
108282
109283export const RadioOpenChoiceAnswerValueSet : Story = createStory ( {
110284 args : {
111285 questionnaire : qOpenChoiceRadioAnswerValueSet
286+ } ,
287+ play : async ( { canvasElement } ) => {
288+ await checkRadioOtherOption ( canvasElement , 'quit-status' , 'Quit around 18 months ago' ) ;
289+
290+ const answers = await getAnswers ( 'quit-status' ) ;
291+ expect ( answers ) . toEqual ( [
292+ expect . objectContaining ( { valueString : 'Quit around 18 months ago' } )
293+ ] ) ;
112294 }
113295} ) as Story ;
114296
115297export const SliderInteger : Story = createStory ( {
116298 args : {
117299 questionnaire : qSliderStepValue
300+ } ,
301+ play : async ( { canvasElement } ) => {
302+ await chooseSliderValue ( canvasElement , 'pain-measure' , 5 ) ;
303+
304+ const answers = await getAnswers ( 'pain-measure' ) ;
305+ expect ( answers ) . toEqual ( [ expect . objectContaining ( { valueInteger : 5 } ) ] ) ;
118306 }
119307} ) as Story ;
0 commit comments