Skip to content

Commit 529fabc

Browse files
committed
Add storybook tests for question item components
1 parent f3c5114 commit 529fabc

2 files changed

Lines changed: 306 additions & 0 deletions

File tree

packages/smart-forms-renderer/src/stories/sdc/ItemControlQuestion.stories.tsx

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717

1818
import type { Meta, StoryObj } from '@storybook/react-vite';
19+
import { expect } from 'storybook/test';
1920
import BuildFormWrapperForStorybook from '../storybookWrappers/BuildFormWrapperForStorybook';
2021
import {
2122
qChoiceCheckboxAnswerOption,
@@ -32,6 +33,17 @@ import {
3233
qSliderStepValue
3334
} from '../assets/questionnaires';
3435
import { 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
3749
const meta = {
@@ -49,71 +61,247 @@ type Story = StoryObj<typeof meta>;
4961
export 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

5573
export 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

6189
export 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

67112
export 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

73153
export 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

79182
export 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

85213
export 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

91239
export 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

97255
export 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

103271
export 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

109283
export 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

115297
export 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

Comments
 (0)