@zap-wunschlachen/wl-shared-components 1.0.76 → 1.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/playwright.yml +229 -229
- package/.github/workflows/static.yml +61 -61
- package/.github/workflows/update-snapshots.yml +37 -37
- package/.prettierrc.json +8 -8
- package/.storybook/main.ts +18 -18
- package/.storybook/preview.ts +37 -37
- package/.storybook/storyWrapper.vue +18 -18
- package/.storybook/withVuetifyTheme.decorator.ts +21 -21
- package/App.vue +139 -139
- package/README.md +56 -56
- package/docs/assets.md +62 -62
- package/heroicons.ts +75 -75
- package/index.html +19 -19
- package/package.json +71 -71
- package/playwright.config.ts +48 -48
- package/public/background.svg +60 -60
- package/public/style.css +187 -187
- package/public/technologies.svg +22 -22
- package/scripts/check-translations.ts +352 -352
- package/src/assets/css/base.css +242 -242
- package/src/assets/css/variables.css +176 -176
- package/src/components/Accordion/Accordion.css +65 -65
- package/src/components/Accordion/AccordionGroup.vue +88 -88
- package/src/components/Accordion/AccordionItem.vue +272 -272
- package/src/components/Accordion/presets/default.css +4 -4
- package/src/components/Accordion/presets/elevated.css +25 -25
- package/src/components/Accordion/presets/filled.css +26 -26
- package/src/components/Accordion/presets/index.css +5 -5
- package/src/components/Accordion/presets/plain.css +34 -34
- package/src/components/Appointment/Card/Actions.css +54 -54
- package/src/components/Appointment/Card/Actions.vue +99 -99
- package/src/components/Appointment/Card/AnamneseNotification.css +20 -20
- package/src/components/Appointment/Card/AnamneseNotification.vue +23 -23
- package/src/components/Appointment/Card/Card.css +99 -99
- package/src/components/Appointment/Card/Card.vue +97 -97
- package/src/components/Appointment/Card/Details.css +62 -62
- package/src/components/Appointment/Card/Details.vue +44 -44
- package/src/components/Audio/Audio.vue +187 -187
- package/src/components/Audio/Waveform.vue +118 -118
- package/src/components/Banner/Banner.css +29 -29
- package/src/components/Banner/Banner.vue +89 -89
- package/src/components/Button/Button.vue +257 -257
- package/src/components/CheckBox/CheckBox.css +234 -234
- package/src/components/CheckBox/Checkbox.vue +184 -184
- package/src/components/DateInput/DateInput.css +2 -2
- package/src/components/DateInput/DateInput.vue +376 -370
- package/src/components/Dialog/Dialog.css +6 -6
- package/src/components/Dialog/Dialog.vue +46 -46
- package/src/components/EditField/EditField.css +19 -19
- package/src/components/EditField/EditField.vue +211 -211
- package/src/components/ErrorPage/ErrorPage.css +172 -172
- package/src/components/IconBullet/IconBullet.vue +104 -104
- package/src/components/IconBullet/IconBulletList.vue +55 -55
- package/src/components/Icons/AdvanceAppointments.vue +161 -161
- package/src/components/Icons/Audio/CloudFailed.vue +27 -27
- package/src/components/Icons/Audio/CloudSaved.vue +28 -28
- package/src/components/Icons/Audio/Delete.vue +22 -22
- package/src/components/Icons/Audio/Pause.vue +25 -25
- package/src/components/Icons/Audio/Play.vue +22 -22
- package/src/components/Icons/Calendar.vue +28 -28
- package/src/components/Icons/CalendarNotification.vue +137 -137
- package/src/components/Icons/Chair.vue +43 -43
- package/src/components/Icons/ChairNotification.vue +46 -46
- package/src/components/Icons/Circle.vue +66 -66
- package/src/components/Icons/FavIcon.vue +69 -69
- package/src/components/Icons/FilledCircle.vue +11 -11
- package/src/components/Icons/Group3.vue +57 -57
- package/src/components/Icons/Play.vue +16 -16
- package/src/components/Icons/RingNotification.vue +65 -65
- package/src/components/Icons/SolidArrowRight.vue +14 -14
- package/src/components/Icons/checkbox.vue +19 -19
- package/src/components/Icons/outlineChecked.vue +38 -38
- package/src/components/Input/Input.css +234 -234
- package/src/components/Input/Input.vue +281 -281
- package/src/components/Laboratory/AppointmentCard/AppointmentCard.css +7 -7
- package/src/components/Laboratory/AppointmentCard/AppointmentCard.vue +116 -116
- package/src/components/Laboratory/ChatBoxImage/ChatBoxImage.vue +81 -81
- package/src/components/Laboratory/ChatMessage/ChatMessage.vue +113 -113
- package/src/components/Laboratory/ChatMessage/ChatMessageBadge.css +4 -4
- package/src/components/Laboratory/ChatMessage/ChatMessageBadge.vue +99 -99
- package/src/components/Laboratory/ChatNotification/ChatNotification.vue +130 -130
- package/src/components/Laboratory/DocumentCard/DocumentCard.css +3 -3
- package/src/components/Laboratory/DocumentCard/DocumentCard.vue +50 -50
- package/src/components/Laboratory/DocumentCard/DocumentCardItem.vue +53 -53
- package/src/components/Laboratory/InfoCard/InfoCard.vue +162 -162
- package/src/components/Laboratory/MainColumnsBar/MainColumnsBar.vue +102 -102
- package/src/components/Laboratory/ProgressCircle/ProgressCircle.vue +152 -152
- package/src/components/Laboratory/ProgressLinear/ProgressLinear.css +33 -33
- package/src/components/Laboratory/ProgressLinear/ProgressLinear.vue +75 -75
- package/src/components/Laboratory/SelectionColumnBar/SelectionColumnBar.vue +92 -92
- package/src/components/Laboratory/StatusNotification/StatusNotification.vue +49 -49
- package/src/components/Laboratory/TagLabel/TagLabel.vue +126 -126
- package/src/components/Laboratory/TagLabelGroup/TagLabelGroup.vue +97 -97
- package/src/components/Laboratory/TicketCard/TicketCard.css +3 -3
- package/src/components/Laboratory/TicketCard/TicketCard.vue +143 -143
- package/src/components/Laboratory/TimeLine/TimeLineEvent.css +18 -18
- package/src/components/Laboratory/TimeLine/TimeLineEvent.vue +119 -119
- package/src/components/Laboratory/TimeLine/Timeline.css +4 -4
- package/src/components/Laboratory/TimeLine/Timeline.vue +30 -30
- package/src/components/Loader/Loader.css +78 -78
- package/src/components/MaintenanceBanner/MaintenanceBanner.css +353 -353
- package/src/components/MaintenanceBanner/MaintenanceBanner.vue +140 -140
- package/src/components/MaintenanceBanner/MaintenanceIllustration.vue +54 -54
- package/src/components/Modal/Modal.css +5 -5
- package/src/components/Modal/Modal.vue +29 -29
- package/src/components/NotificationBubble/NotificationBubble.css +4 -4
- package/src/components/NotificationBubble/NotificationBubble.vue +90 -90
- package/src/components/OtpInput/OtpInput.css +43 -43
- package/src/components/OtpInput/OtpInput.vue +181 -181
- package/src/components/PhoneInput/PhoneInput.css +151 -126
- package/src/components/PhoneInput/PhoneInput.vue +230 -139
- package/src/components/RadioGroup/RadioGroup.css +65 -0
- package/src/components/RadioGroup/RadioGroup.vue +134 -0
- package/src/components/Select/Select.css +172 -172
- package/src/components/Select/Select.vue +377 -377
- package/src/components/SelectAutocomplete/SelectAutocomplete.css +172 -172
- package/src/components/SelectAutocomplete/SelectAutocomplete.vue +414 -414
- package/src/components/TextArea/TextArea.css +269 -269
- package/src/components/TextArea/TextArea.vue +207 -207
- package/src/components/TickBox/TickBox.css +116 -116
- package/src/components/TickBox/TickBox.vue +172 -172
- package/src/components/Tile/Tile.css +106 -106
- package/src/components/Tile/Tile.vue +173 -173
- package/src/components/accessibility.css +218 -218
- package/src/components/index.ts +110 -109
- package/src/constants/iconEnums.ts +3 -3
- package/src/i18n/i18n.ts +15 -15
- package/src/i18n/locales/de.json +30 -30
- package/src/i18n/locales/en.json +30 -30
- package/src/index.ts +43 -43
- package/src/main.ts +11 -11
- package/src/pages/AccordionGroupPage.vue +873 -873
- package/src/pages/AllPage.vue +2483 -2365
- package/src/pages/SelectPage.vue +1302 -1302
- package/src/pages/TilePage.vue +902 -902
- package/src/plugins/vuetify.ts +54 -54
- package/src/shims-vue.d.ts +30 -30
- package/src/utils/index.ts +733 -733
- package/src/vite-env.d.ts +1 -1
- package/tests/unit/accessibility/component-a11y.spec.ts +657 -657
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts +228 -228
- package/tests/unit/components/Accordion/AccordionItem.spec.ts +257 -257
- package/tests/unit/components/Appointment/AnamneseNotification.spec.ts +176 -176
- package/tests/unit/components/Appointment/Card/Actions.spec.ts +436 -436
- package/tests/unit/components/Appointment/Card/Card.spec.ts +531 -531
- package/tests/unit/components/Appointment/Card/Details.spec.ts +395 -395
- package/tests/unit/components/Audio/Audio.spec.ts +403 -403
- package/tests/unit/components/Audio/Waveform.spec.ts +483 -483
- package/tests/unit/components/Background/Background.spec.ts +177 -177
- package/tests/unit/components/Core/AnamneseAnswerDialog.spec.ts +344 -0
- package/tests/unit/components/Core/Banner.spec.ts +187 -0
- package/tests/unit/components/Core/Button.spec.ts +346 -346
- package/tests/unit/components/Core/Checkbox.spec.ts +544 -544
- package/tests/unit/components/Core/DateInput.spec.ts +702 -702
- package/tests/unit/components/Core/Dialog.spec.ts +448 -448
- package/tests/unit/components/Core/EditField.spec.ts +541 -541
- package/tests/unit/components/Core/Input.spec.ts +512 -512
- package/tests/unit/components/Core/List.spec.ts +163 -0
- package/tests/unit/components/Core/ListItem.spec.ts +205 -0
- package/tests/unit/components/Core/Modal.spec.ts +518 -518
- package/tests/unit/components/Core/NotificationBubble.spec.ts +606 -606
- package/tests/unit/components/Core/OtpInput.spec.ts +708 -708
- package/tests/unit/components/Core/PhoneInput.spec.ts +757 -619
- package/tests/unit/components/Core/RadioGroup.spec.ts +318 -0
- package/tests/unit/components/Core/Select.spec.ts +712 -712
- package/tests/unit/components/Core/SelectAutocomplete.spec.ts +361 -0
- package/tests/unit/components/Core/TextArea.spec.ts +565 -565
- package/tests/unit/components/Core/TickBox.spec.ts +836 -836
- package/tests/unit/components/Core/Tile.spec.ts +286 -0
- package/tests/unit/components/DateInput/DateInput.spec.ts +128 -0
- package/tests/unit/components/ErrorPage/ErrorPage.spec.ts +313 -313
- package/tests/unit/components/ErrorPage/ErrorPageLogo.spec.ts +153 -153
- package/tests/unit/components/IconBullet/IconBullet.spec.ts +356 -356
- package/tests/unit/components/IconBullet/IconBulletList.spec.ts +371 -371
- package/tests/unit/components/Icons/AdvanceAppointments.spec.ts +186 -186
- package/tests/unit/components/Icons/Audio/CloudFailed.spec.ts +108 -108
- package/tests/unit/components/Icons/Audio/CloudSaved.spec.ts +149 -149
- package/tests/unit/components/Icons/Audio/Delete.spec.ts +158 -158
- package/tests/unit/components/Icons/Audio/Pause.spec.ts +208 -208
- package/tests/unit/components/Icons/Audio/Play.spec.ts +217 -217
- package/tests/unit/components/Icons/CalendarNotification.spec.ts +193 -193
- package/tests/unit/components/Icons/Chair.spec.ts +241 -241
- package/tests/unit/components/Icons/ChairNotification.spec.ts +318 -318
- package/tests/unit/components/Icons/Circle.spec.ts +255 -255
- package/tests/unit/components/Icons/FavIcon.spec.ts +259 -259
- package/tests/unit/components/Icons/FilledCircle.spec.ts +274 -274
- package/tests/unit/components/Icons/Group3.spec.ts +362 -362
- package/tests/unit/components/Icons/Logo.spec.ts +229 -229
- package/tests/unit/components/Icons/MiniLogo.spec.ts +38 -38
- package/tests/unit/components/Icons/RingNotification.spec.ts +400 -400
- package/tests/unit/components/Icons/SolidArrowRight.spec.ts +49 -49
- package/tests/unit/components/Icons/calendar.spec.ts +293 -293
- package/tests/unit/components/Icons/checkbox.spec.ts +315 -315
- package/tests/unit/components/Icons/outlineChecked.spec.ts +441 -441
- package/tests/unit/components/Icons/play.spec.ts +315 -315
- package/tests/unit/components/Laboratory/AppointmentCard.spec.ts +167 -167
- package/tests/unit/components/Laboratory/ChatBoxImage.spec.ts +179 -179
- package/tests/unit/components/Laboratory/ChatMessage.spec.ts +263 -263
- package/tests/unit/components/Laboratory/ChatMessageBadge.spec.ts +282 -282
- package/tests/unit/components/Laboratory/ChatNotification.spec.ts +256 -256
- package/tests/unit/components/Laboratory/DocumentCard.spec.ts +228 -228
- package/tests/unit/components/Laboratory/DocumentCardItem.spec.ts +236 -236
- package/tests/unit/components/Laboratory/InfoCard.spec.ts +308 -308
- package/tests/unit/components/Laboratory/MainColumnsBar.spec.ts +251 -251
- package/tests/unit/components/Laboratory/ProgressCircle.spec.ts +290 -290
- package/tests/unit/components/Laboratory/ProgressLinear.spec.ts +275 -275
- package/tests/unit/components/Laboratory/SelectionColumnBar.spec.ts +288 -288
- package/tests/unit/components/Laboratory/StatusNotification.spec.ts +296 -296
- package/tests/unit/components/Laboratory/TagLabel.spec.ts +353 -353
- package/tests/unit/components/Laboratory/TagLabelGroup.spec.ts +377 -377
- package/tests/unit/components/Laboratory/TicketCard.spec.ts +351 -351
- package/tests/unit/components/Laboratory/TimeLineEvent.spec.ts +381 -381
- package/tests/unit/components/Laboratory/Timeline.spec.ts +419 -419
- package/tests/unit/components/Loader/Loader.spec.ts +197 -197
- package/tests/unit/components/MaintenanceBanner/MaintenanceBanner.spec.ts +302 -302
- package/tests/unit/constants/iconEnums.spec.ts +39 -39
- package/tests/unit/i18n/i18n.spec.ts +88 -88
- package/tests/unit/plugins/vuetify.spec.ts +182 -182
- package/tests/unit/setup.ts +237 -237
- package/tests/unit/src/components/index.spec.ts.skip +192 -192
- package/tests/unit/src/index.spec.ts.skip +182 -182
- package/tests/unit/src/main.spec.ts +111 -111
- package/tests/unit/utils/accessibility.spec.ts +318 -318
- package/tests/unit/utils/anamnese.spec.ts +531 -0
- package/tsconfig.json +26 -26
- package/vite.config.ts +29 -29
- package/vitest.config.ts +91 -91
|
@@ -1,257 +1,257 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { mount } from '@vue/test-utils';
|
|
3
|
-
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
4
|
-
|
|
5
|
-
describe('AccordionItem', () => {
|
|
6
|
-
describe('Default Behavior', () => {
|
|
7
|
-
it('renders with default props', () => {
|
|
8
|
-
const wrapper = mount(AccordionItem, {
|
|
9
|
-
props: {
|
|
10
|
-
value: 'panel-1'
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
15
|
-
expect(wrapper.vm.title).toBe('Default Title');
|
|
16
|
-
expect(wrapper.vm.text).toBe('Default text');
|
|
17
|
-
expect(wrapper.vm.variant).toBe('default');
|
|
18
|
-
expect(wrapper.vm.bgColor).toBe('transparent');
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('renders with custom title and text', () => {
|
|
22
|
-
const wrapper = mount(AccordionItem, {
|
|
23
|
-
props: {
|
|
24
|
-
value: 'panel-1',
|
|
25
|
-
title: 'Custom Title',
|
|
26
|
-
text: 'Custom content text'
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
expect(wrapper.vm.title).toBe('Custom Title');
|
|
31
|
-
expect(wrapper.vm.text).toBe('Custom content text');
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
describe('Props', () => {
|
|
36
|
-
it('accepts and applies variant prop - default', () => {
|
|
37
|
-
const wrapper = mount(AccordionItem, {
|
|
38
|
-
props: {
|
|
39
|
-
value: 'panel-1',
|
|
40
|
-
variant: 'default'
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
expect(wrapper.vm.variant).toBe('default');
|
|
45
|
-
expect(wrapper.find('.accordion-item--default').exists()).toBe(true);
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it('accepts and applies variant prop - end', () => {
|
|
49
|
-
const wrapper = mount(AccordionItem, {
|
|
50
|
-
props: {
|
|
51
|
-
value: 'panel-1',
|
|
52
|
-
variant: 'end'
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
expect(wrapper.vm.variant).toBe('end');
|
|
57
|
-
expect(wrapper.find('.accordion-item--end').exists()).toBe(true);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('accepts string value', () => {
|
|
61
|
-
const wrapper = mount(AccordionItem, {
|
|
62
|
-
props: {
|
|
63
|
-
value: 'string-value'
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
expect(wrapper.vm.value).toBe('string-value');
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('accepts number value', () => {
|
|
71
|
-
const wrapper = mount(AccordionItem, {
|
|
72
|
-
props: {
|
|
73
|
-
value: 42
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
expect(wrapper.vm.value).toBe(42);
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it('accepts custom background color', () => {
|
|
81
|
-
const wrapper = mount(AccordionItem, {
|
|
82
|
-
props: {
|
|
83
|
-
value: 'panel-1',
|
|
84
|
-
bgColor: '#FFFFFF'
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
expect(wrapper.vm.bgColor).toBe('#FFFFFF');
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
describe('Slots', () => {
|
|
93
|
-
it('supports title slot configuration', () => {
|
|
94
|
-
const wrapper = mount(AccordionItem, {
|
|
95
|
-
props: {
|
|
96
|
-
value: 'panel-1'
|
|
97
|
-
},
|
|
98
|
-
slots: {
|
|
99
|
-
title: '<span class="custom-title">Slot Title</span>'
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
// Component renders with slot configuration
|
|
104
|
-
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it('supports content slot configuration', () => {
|
|
108
|
-
const wrapper = mount(AccordionItem, {
|
|
109
|
-
props: {
|
|
110
|
-
value: 'panel-1'
|
|
111
|
-
},
|
|
112
|
-
slots: {
|
|
113
|
-
content: '<div class="custom-content">Slot Content</div>'
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
// Component renders with slot configuration
|
|
118
|
-
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it('uses title prop as default content', () => {
|
|
122
|
-
const wrapper = mount(AccordionItem, {
|
|
123
|
-
props: {
|
|
124
|
-
value: 'panel-1',
|
|
125
|
-
title: 'Prop Title'
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
expect(wrapper.vm.title).toBe('Prop Title');
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('uses text prop as default content', () => {
|
|
133
|
-
const wrapper = mount(AccordionItem, {
|
|
134
|
-
props: {
|
|
135
|
-
value: 'panel-1',
|
|
136
|
-
text: 'Prop Text Content'
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
expect(wrapper.vm.text).toBe('Prop Text Content');
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
describe('Accessibility', () => {
|
|
145
|
-
it('renders with data-testid for testing', () => {
|
|
146
|
-
const wrapper = mount(AccordionItem, {
|
|
147
|
-
props: {
|
|
148
|
-
value: 'panel-1',
|
|
149
|
-
title: 'Accessible Title',
|
|
150
|
-
text: 'Test Content'
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
// Component renders with data-testid for testing accessibility
|
|
155
|
-
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it('provides title and text for screen readers', () => {
|
|
159
|
-
const wrapper = mount(AccordionItem, {
|
|
160
|
-
props: {
|
|
161
|
-
value: 'panel-1',
|
|
162
|
-
title: 'Accessible Title',
|
|
163
|
-
text: 'Test Content'
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
// Title and text props are set for accessibility
|
|
168
|
-
expect(wrapper.vm.title).toBe('Accessible Title');
|
|
169
|
-
expect(wrapper.vm.text).toBe('Test Content');
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
describe('Edge Cases', () => {
|
|
174
|
-
it('handles empty title', () => {
|
|
175
|
-
const wrapper = mount(AccordionItem, {
|
|
176
|
-
props: {
|
|
177
|
-
value: 'panel-1',
|
|
178
|
-
title: ''
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
expect(wrapper.vm.title).toBe('');
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
it('handles empty text', () => {
|
|
186
|
-
const wrapper = mount(AccordionItem, {
|
|
187
|
-
props: {
|
|
188
|
-
value: 'panel-1',
|
|
189
|
-
text: ''
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
expect(wrapper.vm.text).toBe('');
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
it('handles very long title text', () => {
|
|
197
|
-
const longTitle = 'A'.repeat(500);
|
|
198
|
-
const wrapper = mount(AccordionItem, {
|
|
199
|
-
props: {
|
|
200
|
-
value: 'panel-1',
|
|
201
|
-
title: longTitle
|
|
202
|
-
}
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
expect(wrapper.vm.title).toBe(longTitle);
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
it('handles special characters in title and text', () => {
|
|
209
|
-
const wrapper = mount(AccordionItem, {
|
|
210
|
-
props: {
|
|
211
|
-
value: 'panel-1',
|
|
212
|
-
title: 'Title with <special> & "characters"',
|
|
213
|
-
text: 'Content with äöü ñ émojis 🎉'
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
expect(wrapper.vm.title).toBe('Title with <special> & "characters"');
|
|
218
|
-
expect(wrapper.vm.text).toBe('Content with äöü ñ émojis 🎉');
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
it('handles value of 0', () => {
|
|
222
|
-
const wrapper = mount(AccordionItem, {
|
|
223
|
-
props: {
|
|
224
|
-
value: 0
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
expect(wrapper.vm.value).toBe(0);
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
describe('Variant Styling', () => {
|
|
233
|
-
it('applies accordion-item--default class for default variant', () => {
|
|
234
|
-
const wrapper = mount(AccordionItem, {
|
|
235
|
-
props: {
|
|
236
|
-
value: 'panel-1',
|
|
237
|
-
variant: 'default'
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
expect(wrapper.find('.accordion-item--default').exists()).toBe(true);
|
|
242
|
-
expect(wrapper.find('.accordion-item--end').exists()).toBe(false);
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
it('applies accordion-item--end class for end variant', () => {
|
|
246
|
-
const wrapper = mount(AccordionItem, {
|
|
247
|
-
props: {
|
|
248
|
-
value: 'panel-1',
|
|
249
|
-
variant: 'end'
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
expect(wrapper.find('.accordion-item--end').exists()).toBe(true);
|
|
254
|
-
expect(wrapper.find('.accordion-item--default').exists()).toBe(false);
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
});
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { mount } from '@vue/test-utils';
|
|
3
|
+
import AccordionItem from '@components/Accordion/AccordionItem.vue';
|
|
4
|
+
|
|
5
|
+
describe('AccordionItem', () => {
|
|
6
|
+
describe('Default Behavior', () => {
|
|
7
|
+
it('renders with default props', () => {
|
|
8
|
+
const wrapper = mount(AccordionItem, {
|
|
9
|
+
props: {
|
|
10
|
+
value: 'panel-1'
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
15
|
+
expect(wrapper.vm.title).toBe('Default Title');
|
|
16
|
+
expect(wrapper.vm.text).toBe('Default text');
|
|
17
|
+
expect(wrapper.vm.variant).toBe('default');
|
|
18
|
+
expect(wrapper.vm.bgColor).toBe('transparent');
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('renders with custom title and text', () => {
|
|
22
|
+
const wrapper = mount(AccordionItem, {
|
|
23
|
+
props: {
|
|
24
|
+
value: 'panel-1',
|
|
25
|
+
title: 'Custom Title',
|
|
26
|
+
text: 'Custom content text'
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
expect(wrapper.vm.title).toBe('Custom Title');
|
|
31
|
+
expect(wrapper.vm.text).toBe('Custom content text');
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('Props', () => {
|
|
36
|
+
it('accepts and applies variant prop - default', () => {
|
|
37
|
+
const wrapper = mount(AccordionItem, {
|
|
38
|
+
props: {
|
|
39
|
+
value: 'panel-1',
|
|
40
|
+
variant: 'default'
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
expect(wrapper.vm.variant).toBe('default');
|
|
45
|
+
expect(wrapper.find('.accordion-item--default').exists()).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('accepts and applies variant prop - end', () => {
|
|
49
|
+
const wrapper = mount(AccordionItem, {
|
|
50
|
+
props: {
|
|
51
|
+
value: 'panel-1',
|
|
52
|
+
variant: 'end'
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
expect(wrapper.vm.variant).toBe('end');
|
|
57
|
+
expect(wrapper.find('.accordion-item--end').exists()).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('accepts string value', () => {
|
|
61
|
+
const wrapper = mount(AccordionItem, {
|
|
62
|
+
props: {
|
|
63
|
+
value: 'string-value'
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
expect(wrapper.vm.value).toBe('string-value');
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('accepts number value', () => {
|
|
71
|
+
const wrapper = mount(AccordionItem, {
|
|
72
|
+
props: {
|
|
73
|
+
value: 42
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
expect(wrapper.vm.value).toBe(42);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('accepts custom background color', () => {
|
|
81
|
+
const wrapper = mount(AccordionItem, {
|
|
82
|
+
props: {
|
|
83
|
+
value: 'panel-1',
|
|
84
|
+
bgColor: '#FFFFFF'
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
expect(wrapper.vm.bgColor).toBe('#FFFFFF');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
describe('Slots', () => {
|
|
93
|
+
it('supports title slot configuration', () => {
|
|
94
|
+
const wrapper = mount(AccordionItem, {
|
|
95
|
+
props: {
|
|
96
|
+
value: 'panel-1'
|
|
97
|
+
},
|
|
98
|
+
slots: {
|
|
99
|
+
title: '<span class="custom-title">Slot Title</span>'
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Component renders with slot configuration
|
|
104
|
+
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('supports content slot configuration', () => {
|
|
108
|
+
const wrapper = mount(AccordionItem, {
|
|
109
|
+
props: {
|
|
110
|
+
value: 'panel-1'
|
|
111
|
+
},
|
|
112
|
+
slots: {
|
|
113
|
+
content: '<div class="custom-content">Slot Content</div>'
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Component renders with slot configuration
|
|
118
|
+
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('uses title prop as default content', () => {
|
|
122
|
+
const wrapper = mount(AccordionItem, {
|
|
123
|
+
props: {
|
|
124
|
+
value: 'panel-1',
|
|
125
|
+
title: 'Prop Title'
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
expect(wrapper.vm.title).toBe('Prop Title');
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('uses text prop as default content', () => {
|
|
133
|
+
const wrapper = mount(AccordionItem, {
|
|
134
|
+
props: {
|
|
135
|
+
value: 'panel-1',
|
|
136
|
+
text: 'Prop Text Content'
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
expect(wrapper.vm.text).toBe('Prop Text Content');
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
describe('Accessibility', () => {
|
|
145
|
+
it('renders with data-testid for testing', () => {
|
|
146
|
+
const wrapper = mount(AccordionItem, {
|
|
147
|
+
props: {
|
|
148
|
+
value: 'panel-1',
|
|
149
|
+
title: 'Accessible Title',
|
|
150
|
+
text: 'Test Content'
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
// Component renders with data-testid for testing accessibility
|
|
155
|
+
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it('provides title and text for screen readers', () => {
|
|
159
|
+
const wrapper = mount(AccordionItem, {
|
|
160
|
+
props: {
|
|
161
|
+
value: 'panel-1',
|
|
162
|
+
title: 'Accessible Title',
|
|
163
|
+
text: 'Test Content'
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Title and text props are set for accessibility
|
|
168
|
+
expect(wrapper.vm.title).toBe('Accessible Title');
|
|
169
|
+
expect(wrapper.vm.text).toBe('Test Content');
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
describe('Edge Cases', () => {
|
|
174
|
+
it('handles empty title', () => {
|
|
175
|
+
const wrapper = mount(AccordionItem, {
|
|
176
|
+
props: {
|
|
177
|
+
value: 'panel-1',
|
|
178
|
+
title: ''
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
expect(wrapper.vm.title).toBe('');
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('handles empty text', () => {
|
|
186
|
+
const wrapper = mount(AccordionItem, {
|
|
187
|
+
props: {
|
|
188
|
+
value: 'panel-1',
|
|
189
|
+
text: ''
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
expect(wrapper.vm.text).toBe('');
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it('handles very long title text', () => {
|
|
197
|
+
const longTitle = 'A'.repeat(500);
|
|
198
|
+
const wrapper = mount(AccordionItem, {
|
|
199
|
+
props: {
|
|
200
|
+
value: 'panel-1',
|
|
201
|
+
title: longTitle
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
expect(wrapper.vm.title).toBe(longTitle);
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
it('handles special characters in title and text', () => {
|
|
209
|
+
const wrapper = mount(AccordionItem, {
|
|
210
|
+
props: {
|
|
211
|
+
value: 'panel-1',
|
|
212
|
+
title: 'Title with <special> & "characters"',
|
|
213
|
+
text: 'Content with äöü ñ émojis 🎉'
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
expect(wrapper.vm.title).toBe('Title with <special> & "characters"');
|
|
218
|
+
expect(wrapper.vm.text).toBe('Content with äöü ñ émojis 🎉');
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
it('handles value of 0', () => {
|
|
222
|
+
const wrapper = mount(AccordionItem, {
|
|
223
|
+
props: {
|
|
224
|
+
value: 0
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
expect(wrapper.vm.value).toBe(0);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
describe('Variant Styling', () => {
|
|
233
|
+
it('applies accordion-item--default class for default variant', () => {
|
|
234
|
+
const wrapper = mount(AccordionItem, {
|
|
235
|
+
props: {
|
|
236
|
+
value: 'panel-1',
|
|
237
|
+
variant: 'default'
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
expect(wrapper.find('.accordion-item--default').exists()).toBe(true);
|
|
242
|
+
expect(wrapper.find('.accordion-item--end').exists()).toBe(false);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('applies accordion-item--end class for end variant', () => {
|
|
246
|
+
const wrapper = mount(AccordionItem, {
|
|
247
|
+
props: {
|
|
248
|
+
value: 'panel-1',
|
|
249
|
+
variant: 'end'
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
expect(wrapper.find('.accordion-item--end').exists()).toBe(true);
|
|
254
|
+
expect(wrapper.find('.accordion-item--default').exists()).toBe(false);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
});
|