@zap-wunschlachen/wl-shared-components 1.0.24 → 1.0.26
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 +205 -205
- package/.github/workflows/static.yml +61 -61
- package/.github/workflows/update-snapshots.yml +37 -37
- package/.prettierrc +5 -5
- 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 +34 -176
- package/README.md +56 -56
- package/heroicons.ts +75 -75
- package/index.html +19 -19
- package/package.json +67 -67
- 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/src/assets/css/base.css +235 -235
- package/src/assets/css/variables.css +107 -96
- package/src/components/Accordion/Accordion.css +59 -59
- package/src/components/Accordion/AccordionGroup.vue +51 -51
- package/src/components/Accordion/AccordionItem.vue +66 -66
- 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 +15 -15
- package/src/components/Appointment/Card/AnamneseNotification.vue +23 -23
- package/src/components/Appointment/Card/Card.css +80 -80
- package/src/components/Appointment/Card/Card.vue +93 -93
- package/src/components/Appointment/Card/Details.css +50 -50
- package/src/components/Appointment/Card/Details.vue +43 -43
- package/src/components/Audio/Audio.vue +187 -187
- package/src/components/Audio/Waveform.vue +117 -117
- package/src/components/Background/Background.css +39 -0
- package/src/components/Background/Background.vue +19 -0
- package/src/components/Background/WhiteCocoonBackground.vue +9 -0
- package/src/components/Background/WunschlachenBackground.vue +11 -0
- package/src/components/Button/Button.vue +119 -119
- package/src/components/CheckBox/CheckBox.css +185 -185
- package/src/components/CheckBox/Checkbox.vue +130 -130
- package/src/components/DateInput/DateInput.css +2 -2
- package/src/components/DateInput/DateInput.vue +262 -262
- package/src/components/Dialog/Dialog.css +6 -6
- package/src/components/Dialog/Dialog.vue +29 -29
- package/src/components/EditField/EditField.css +19 -19
- package/src/components/EditField/EditField.vue +202 -202
- package/src/components/ErrorPage/ErrorPage.css +124 -0
- package/src/components/ErrorPage/ErrorPage.vue +45 -0
- package/src/components/ErrorPage/ErrorPageLogo.vue +26 -0
- package/src/components/IconBullet/IconBullet.vue +86 -86
- package/src/components/IconBullet/IconBulletList.vue +41 -41
- package/src/components/Icons/AdvanceAppointments.vue +153 -153
- package/src/components/Icons/Audio/CloudFailed.vue +20 -20
- package/src/components/Icons/Audio/CloudSaved.vue +21 -21
- package/src/components/Icons/Audio/Delete.vue +15 -15
- package/src/components/Icons/Audio/Pause.vue +18 -18
- package/src/components/Icons/Audio/Play.vue +15 -15
- package/src/components/Icons/CalendarNotification.vue +126 -126
- package/src/components/Icons/Chair.vue +32 -32
- package/src/components/Icons/ChairNotification.vue +35 -35
- package/src/components/Icons/Circle.vue +66 -66
- package/src/components/Icons/FavIcon.vue +22 -22
- package/src/components/Icons/FilledCircle.vue +11 -11
- package/src/components/Icons/Group3.vue +46 -46
- package/src/components/Icons/Logo.vue +108 -0
- package/src/components/Icons/RingNotification.vue +54 -54
- package/src/components/Icons/SolidArrowRight.vue +14 -14
- package/src/components/Icons/calendar.vue +17 -17
- package/src/components/Icons/checkbox.vue +19 -19
- package/src/components/Icons/outlineChecked.vue +27 -27
- package/src/components/Icons/play.vue +5 -5
- package/src/components/Input/Input.css +187 -187
- package/src/components/Input/Input.vue +247 -247
- 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 +51 -51
- package/src/components/MaintenanceBanner/MaintenanceBanner.css +289 -0
- package/src/components/MaintenanceBanner/MaintenanceBanner.vue +127 -0
- package/src/components/MaintenanceBanner/MaintenanceIllustration.vue +54 -0
- package/src/components/Modal/Modal.css +5 -5
- package/src/components/Modal/Modal.vue +22 -22
- package/src/components/NotificationBubble/NotificationBubble.css +4 -4
- package/src/components/NotificationBubble/NotificationBubble.vue +90 -90
- package/src/components/OtpInput/OtpInput.css +39 -39
- package/src/components/OtpInput/OtpInput.vue +143 -143
- package/src/components/PhoneInput/PhoneInput.css +31 -31
- package/src/components/PhoneInput/PhoneInput.vue +113 -113
- package/src/components/Select/Select.css +150 -150
- package/src/components/Select/Select.vue +315 -304
- package/src/components/TextArea/TextArea.css +3 -3
- package/src/components/TextArea/TextArea.vue +126 -126
- package/src/components/TickBox/TickBox.css +49 -49
- package/src/components/TickBox/TickBox.vue +126 -126
- package/src/components/index.ts +26 -24
- 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 +34 -34
- package/src/main.ts +11 -11
- package/src/plugins/vuetify.ts +139 -131
- package/src/shims-vue.d.ts +10 -10
- package/src/stories/Accordion.stories.ts +650 -650
- package/src/stories/Audio.stories.ts +28 -28
- package/src/stories/Button.stories.ts +263 -263
- package/src/stories/CheckBox.stories.ts +348 -348
- package/src/stories/DateInput.stories.ts +53 -53
- package/src/stories/Dialog.stories.ts +147 -147
- package/src/stories/EditField.stories.ts +78 -78
- package/src/stories/IconBullet/IconBullet.stories.ts +201 -201
- package/src/stories/IconBullet/IconBulletList.stories.ts +275 -275
- package/src/stories/Input.stories.ts +351 -351
- package/src/stories/Laboratory/Cards/AppointmentCard/AppointmentCard.stories.ts +260 -260
- package/src/stories/Laboratory/Cards/DocumentCard/DocumentCard.stories.ts +176 -176
- package/src/stories/Laboratory/Cards/DocumentCard/DocumentCardItem.stories.ts +119 -119
- package/src/stories/Laboratory/Cards/InfoCard/InfoCard.stories.ts +320 -320
- package/src/stories/Laboratory/Cards/TicketCard/TicketCard.stories.ts +335 -335
- package/src/stories/Laboratory/Chat/ChatBoxImage.stories.ts +82 -82
- package/src/stories/Laboratory/Chat/ChatMessage.stories.ts +198 -198
- package/src/stories/Laboratory/Chat/ChatMessageBadge.stories.ts +204 -204
- package/src/stories/Laboratory/Chat/ChatNotification.stories.ts +144 -144
- package/src/stories/Laboratory/Chat/ProgressLinear.stories.ts +186 -186
- package/src/stories/Laboratory/Chat/StatusNotification.stories.ts +111 -111
- package/src/stories/Laboratory/MainColumnsBar.stories.ts +48 -48
- package/src/stories/Laboratory/ProgressCircle.stories.ts +261 -261
- package/src/stories/Laboratory/SelectionColumnBar.stories.ts +234 -234
- package/src/stories/Laboratory/TagLabel.stories.ts +418 -418
- package/src/stories/Laboratory/TagLabelGroup.stories.ts +234 -234
- package/src/stories/Laboratory/Timeline.stories.ts +403 -403
- package/src/stories/NotificationBubble.stories.ts +194 -194
- package/src/stories/OtpInput.stories.ts +100 -100
- package/src/stories/PhoneInput.stories.ts +52 -52
- package/src/stories/Select.stories.ts +419 -419
- package/src/stories/TextArea.stories.ts +112 -112
- package/src/stories/TickBox.stories.ts +294 -294
- package/src/stories/v-icon.stories.ts +91 -91
- package/src/utils/index.ts +106 -100
- package/src/vite-env.d.ts +1 -1
- package/tests/e2e/README.md +220 -220
- package/tests/e2e/accessibility.spec.ts +638 -638
- package/tests/e2e/accordion.spec.ts +42 -42
- package/tests/e2e/additional-components.spec.ts +437 -437
- package/tests/e2e/all-components.spec.ts +135 -135
- package/tests/e2e/appointment-card.spec.ts +816 -816
- package/tests/e2e/button-fixed.spec.ts +58 -58
- package/tests/e2e/button.spec.ts +76 -76
- package/tests/e2e/checkbox.spec.ts +50 -50
- package/tests/e2e/date-input.spec.ts +46 -46
- package/tests/e2e/debug.spec.ts +51 -51
- package/tests/e2e/dialog.spec.ts +58 -58
- package/tests/e2e/input.spec.ts +55 -55
- package/tests/e2e/laboratory-components.spec.ts +320 -320
- package/tests/e2e/otp-input.spec.ts +50 -50
- package/tests/e2e/select.spec.ts +52 -52
- package/tests/e2e/storybook-utils.ts +59 -59
- package/tests/e2e/test-basic.spec.ts +33 -33
- package/tests/e2e/visual-regression.spec.ts +350 -350
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts.skip +342 -342
- package/tests/unit/components/Accordion/AccordionItem.spec.ts.skip +383 -383
- package/tests/unit/components/Appointment/Card/Actions.spec.ts +407 -407
- package/tests/unit/components/Appointment/Card/Card.spec.ts +485 -485
- package/tests/unit/components/Appointment/Card/Details.spec.ts +397 -397
- package/tests/unit/components/Audio/Audio.spec.ts +403 -403
- package/tests/unit/components/Audio/Waveform.spec.ts +483 -483
- package/tests/unit/components/Core/Button.spec.ts +336 -336
- package/tests/unit/components/Core/Checkbox.spec.ts +544 -544
- package/tests/unit/components/Core/DateInput.spec.ts +690 -690
- package/tests/unit/components/Core/Dialog.spec.ts +485 -485
- package/tests/unit/components/Core/EditField.spec.ts +782 -782
- package/tests/unit/components/Core/Input.spec.ts +512 -512
- 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 +619 -619
- package/tests/unit/components/Core/Select.spec.ts +712 -712
- package/tests/unit/components/Core/TextArea.spec.ts +565 -565
- package/tests/unit/components/Core/TickBox.spec.ts +779 -779
- 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/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 +186 -186
- package/tests/unit/components/Icons/Chair.spec.ts +234 -234
- package/tests/unit/components/Icons/ChairNotification.spec.ts +311 -311
- package/tests/unit/components/Icons/Circle.spec.ts +255 -255
- package/tests/unit/components/Icons/FavIcon.spec.ts +251 -251
- package/tests/unit/components/Icons/FilledCircle.spec.ts +274 -274
- package/tests/unit/components/Icons/Group3.spec.ts +355 -355
- package/tests/unit/components/Icons/RingNotification.spec.ts +393 -393
- package/tests/unit/components/Icons/calendar.spec.ts +286 -286
- package/tests/unit/components/Icons/checkbox.spec.ts +315 -315
- package/tests/unit/components/Icons/outlineChecked.spec.ts +434 -434
- package/tests/unit/components/Icons/play.spec.ts +308 -308
- 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/constants/iconEnums.spec.ts +39 -39
- package/tests/unit/i18n/i18n.spec.ts +88 -88
- package/tests/unit/plugins/vuetify.spec.ts +220 -220
- package/tests/unit/setup.ts +189 -189
- 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 +151 -151
- package/tsconfig.json +26 -26
- package/vite.config.ts +29 -29
- package/vitest.config.ts +83 -83
|
@@ -1,343 +1,343 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
-
import { mount, VueWrapper } from '@vue/test-utils';
|
|
3
|
-
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
4
|
-
import { VExpansionPanels } from 'vuetify/components';
|
|
5
|
-
|
|
6
|
-
// Mock CSS import
|
|
7
|
-
import { vi } from 'vitest';
|
|
8
|
-
vi.mock('@components/Accordion/Accordion.css', () => ({}));
|
|
9
|
-
|
|
10
|
-
describe.skip('AccordionGroup', () => {
|
|
11
|
-
let wrapper: VueWrapper;
|
|
12
|
-
|
|
13
|
-
const defaultProps = {
|
|
14
|
-
modelValue: null,
|
|
15
|
-
multiple: false,
|
|
16
|
-
variantGroup: 'accordion'
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
beforeEach(() => {
|
|
20
|
-
wrapper = mount(AccordionGroup, {
|
|
21
|
-
props: defaultProps,
|
|
22
|
-
global: {
|
|
23
|
-
components: {
|
|
24
|
-
VExpansionPanels
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
describe('Rendering', () => {
|
|
31
|
-
it('renders as v-expansion-panels element', () => {
|
|
32
|
-
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
33
|
-
expect(wrapper.find('.wl-accordion').exists()).toBe(true);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('has correct default props', () => {
|
|
37
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
38
|
-
expect(expansionPanels.exists()).toBe(true);
|
|
39
|
-
expect(expansionPanels.props('multiple')).toBe(false);
|
|
40
|
-
expect(expansionPanels.props('variant')).toBe('accordion');
|
|
41
|
-
expect(expansionPanels.props('rounded')).toBe(false);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('uses correct expand and collapse icons', () => {
|
|
45
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
46
|
-
expect(expansionPanels.props('expandIcon')).toBe('heroicons:chevron-down');
|
|
47
|
-
expect(expansionPanels.props('collapseIcon')).toBe('heroicons:chevron-up');
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
it('contains slot for accordion items', () => {
|
|
51
|
-
const wrapperWithSlot = mount(AccordionGroup, {
|
|
52
|
-
props: defaultProps,
|
|
53
|
-
slots: {
|
|
54
|
-
default: '<div class="test-slot">Test Content</div>'
|
|
55
|
-
},
|
|
56
|
-
global: {
|
|
57
|
-
components: {
|
|
58
|
-
VExpansionPanels
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
expect(wrapperWithSlot.find('.test-slot').exists()).toBe(true);
|
|
64
|
-
expect(wrapperWithSlot.find('.test-slot').text()).toBe('Test Content');
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
describe('Props', () => {
|
|
69
|
-
it('accepts modelValue prop', () => {
|
|
70
|
-
const wrapperWithValue = mount(AccordionGroup, {
|
|
71
|
-
props: {
|
|
72
|
-
...defaultProps,
|
|
73
|
-
modelValue: 1
|
|
74
|
-
},
|
|
75
|
-
global: {
|
|
76
|
-
components: {
|
|
77
|
-
VExpansionPanels
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
const expansionPanels = wrapperWithValue.findComponent(VExpansionPanels);
|
|
83
|
-
expect(expansionPanels.props('modelValue')).toBe(1);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('accepts array modelValue when multiple is true', () => {
|
|
87
|
-
const wrapperWithArray = mount(AccordionGroup, {
|
|
88
|
-
props: {
|
|
89
|
-
...defaultProps,
|
|
90
|
-
modelValue: [1, 2],
|
|
91
|
-
multiple: true
|
|
92
|
-
},
|
|
93
|
-
global: {
|
|
94
|
-
components: {
|
|
95
|
-
VExpansionPanels
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
const expansionPanels = wrapperWithArray.findComponent(VExpansionPanels);
|
|
101
|
-
expect(expansionPanels.props('modelValue')).toEqual([1, 2]);
|
|
102
|
-
expect(expansionPanels.props('multiple')).toBe(true);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('accepts multiple prop', () => {
|
|
106
|
-
const wrapperMultiple = mount(AccordionGroup, {
|
|
107
|
-
props: {
|
|
108
|
-
...defaultProps,
|
|
109
|
-
multiple: true
|
|
110
|
-
},
|
|
111
|
-
global: {
|
|
112
|
-
components: {
|
|
113
|
-
VExpansionPanels
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
const expansionPanels = wrapperMultiple.findComponent(VExpansionPanels);
|
|
119
|
-
expect(expansionPanels.props('multiple')).toBe(true);
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
it('accepts variantGroup prop', () => {
|
|
123
|
-
const customVariant = 'inset';
|
|
124
|
-
const wrapperWithVariant = mount(AccordionGroup, {
|
|
125
|
-
props: {
|
|
126
|
-
...defaultProps,
|
|
127
|
-
variantGroup: customVariant
|
|
128
|
-
},
|
|
129
|
-
global: {
|
|
130
|
-
components: {
|
|
131
|
-
VExpansionPanels
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
const expansionPanels = wrapperWithVariant.findComponent(VExpansionPanels);
|
|
137
|
-
expect(expansionPanels.props('variant')).toBe(customVariant);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it('has correct default values', () => {
|
|
141
|
-
expect(wrapper.props('modelValue')).toBeNull();
|
|
142
|
-
expect(wrapper.props('multiple')).toBe(false);
|
|
143
|
-
expect(wrapper.props('variantGroup')).toBe('accordion');
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
describe('V-Model Behavior', () => {
|
|
148
|
-
it('emits update:modelValue when internal value changes', async () => {
|
|
149
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
150
|
-
|
|
151
|
-
// Simulate a change in the expansion panels
|
|
152
|
-
await expansionPanels.vm.$emit('update:modelValue', 1);
|
|
153
|
-
|
|
154
|
-
expect(wrapper.emitted('update:modelValue')).toBeTruthy();
|
|
155
|
-
expect(wrapper.emitted('update:modelValue')[0]).toEqual([1]);
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it('updates internal value when modelValue prop changes', async () => {
|
|
159
|
-
await wrapper.setProps({ modelValue: 2 });
|
|
160
|
-
|
|
161
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
162
|
-
expect(expansionPanels.props('modelValue')).toBe(2);
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it('handles array values for multiple mode', async () => {
|
|
166
|
-
await wrapper.setProps({
|
|
167
|
-
modelValue: [1, 2],
|
|
168
|
-
multiple: true
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
172
|
-
expect(expansionPanels.props('modelValue')).toEqual([1, 2]);
|
|
173
|
-
|
|
174
|
-
// Simulate change
|
|
175
|
-
await expansionPanels.vm.$emit('update:modelValue', [1, 2, 3]);
|
|
176
|
-
expect(wrapper.emitted('update:modelValue')).toBeTruthy();
|
|
177
|
-
expect(wrapper.emitted('update:modelValue')[0]).toEqual([[1, 2, 3]]);
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
describe('Styling and Classes', () => {
|
|
182
|
-
it('applies wl-accordion class', () => {
|
|
183
|
-
expect(wrapper.find('.wl-accordion').exists()).toBe(true);
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it('sets rounded to false', () => {
|
|
187
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
188
|
-
expect(expansionPanels.props('rounded')).toBe(false);
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
it('applies data-testid for testing', () => {
|
|
192
|
-
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
describe('Slot Content', () => {
|
|
197
|
-
it('renders default slot content', () => {
|
|
198
|
-
const slotContent = '<div class="accordion-item">Item 1</div><div class="accordion-item">Item 2</div>';
|
|
199
|
-
const wrapperWithSlots = mount(AccordionGroup, {
|
|
200
|
-
props: defaultProps,
|
|
201
|
-
slots: {
|
|
202
|
-
default: slotContent
|
|
203
|
-
},
|
|
204
|
-
global: {
|
|
205
|
-
components: {
|
|
206
|
-
VExpansionPanels
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
expect(wrapperWithSlots.findAll('.accordion-item')).toHaveLength(2);
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
it('passes slot content to v-expansion-panels', () => {
|
|
215
|
-
const wrapperWithSlots = mount(AccordionGroup, {
|
|
216
|
-
props: defaultProps,
|
|
217
|
-
slots: {
|
|
218
|
-
default: '<div class="test-content">Accordion Content</div>'
|
|
219
|
-
},
|
|
220
|
-
global: {
|
|
221
|
-
components: {
|
|
222
|
-
VExpansionPanels
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
const expansionPanels = wrapperWithSlots.findComponent(VExpansionPanels);
|
|
228
|
-
expect(expansionPanels.find('.test-content').exists()).toBe(true);
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
describe('Component Integration', () => {
|
|
233
|
-
it('can be mounted without props', () => {
|
|
234
|
-
expect(() => {
|
|
235
|
-
mount(AccordionGroup, {
|
|
236
|
-
global: {
|
|
237
|
-
components: {
|
|
238
|
-
VExpansionPanels
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
}).not.toThrow();
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
it('renders consistently on multiple mounts', () => {
|
|
246
|
-
const wrapper1 = mount(AccordionGroup, {
|
|
247
|
-
props: defaultProps,
|
|
248
|
-
global: {
|
|
249
|
-
components: {
|
|
250
|
-
VExpansionPanels
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
const wrapper2 = mount(AccordionGroup, {
|
|
256
|
-
props: defaultProps,
|
|
257
|
-
global: {
|
|
258
|
-
components: {
|
|
259
|
-
VExpansionPanels
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
expect(wrapper1.html()).toBe(wrapper2.html());
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
it('works with different variant groups', () => {
|
|
268
|
-
const variants = ['accordion', 'inset', 'popout'];
|
|
269
|
-
|
|
270
|
-
variants.forEach(variant => {
|
|
271
|
-
const variantWrapper = mount(AccordionGroup, {
|
|
272
|
-
props: {
|
|
273
|
-
...defaultProps,
|
|
274
|
-
variantGroup: variant
|
|
275
|
-
},
|
|
276
|
-
global: {
|
|
277
|
-
components: {
|
|
278
|
-
VExpansionPanels
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
const expansionPanels = variantWrapper.findComponent(VExpansionPanels);
|
|
284
|
-
expect(expansionPanels.props('variant')).toBe(variant);
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
describe('Accessibility', () => {
|
|
290
|
-
it('maintains accessibility features from v-expansion-panels', () => {
|
|
291
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
292
|
-
expect(expansionPanels.exists()).toBe(true);
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it('provides proper testid for testing', () => {
|
|
296
|
-
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
describe('Event Handling', () => {
|
|
301
|
-
it('properly forwards expansion panel events', async () => {
|
|
302
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
303
|
-
|
|
304
|
-
// Test modelValue update
|
|
305
|
-
await expansionPanels.vm.$emit('update:modelValue', 1);
|
|
306
|
-
expect(wrapper.emitted('update:modelValue')).toBeTruthy();
|
|
307
|
-
expect(wrapper.emitted('update:modelValue')[0]).toEqual([1]);
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
it('handles null and undefined values', async () => {
|
|
311
|
-
await wrapper.setProps({ modelValue: null });
|
|
312
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
313
|
-
expect(expansionPanels.props('modelValue')).toBeNull();
|
|
314
|
-
|
|
315
|
-
await wrapper.setProps({ modelValue: undefined });
|
|
316
|
-
expect(expansionPanels.props('modelValue')).toBeUndefined();
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
|
|
320
|
-
describe('Error Handling', () => {
|
|
321
|
-
it('handles invalid variant gracefully', () => {
|
|
322
|
-
expect(() => {
|
|
323
|
-
mount(AccordionGroup, {
|
|
324
|
-
props: {
|
|
325
|
-
...defaultProps,
|
|
326
|
-
variantGroup: 'invalid-variant'
|
|
327
|
-
},
|
|
328
|
-
global: {
|
|
329
|
-
components: {
|
|
330
|
-
VExpansionPanels
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
}).not.toThrow();
|
|
335
|
-
});
|
|
336
|
-
|
|
337
|
-
it('handles mixed data types in modelValue', async () => {
|
|
338
|
-
await wrapper.setProps({ modelValue: 'string-value' });
|
|
339
|
-
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
340
|
-
expect(expansionPanels.props('modelValue')).toBe('string-value');
|
|
341
|
-
});
|
|
342
|
-
});
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { mount, VueWrapper } from '@vue/test-utils';
|
|
3
|
+
import AccordionGroup from '@components/Accordion/AccordionGroup.vue';
|
|
4
|
+
import { VExpansionPanels } from 'vuetify/components';
|
|
5
|
+
|
|
6
|
+
// Mock CSS import
|
|
7
|
+
import { vi } from 'vitest';
|
|
8
|
+
vi.mock('@components/Accordion/Accordion.css', () => ({}));
|
|
9
|
+
|
|
10
|
+
describe.skip('AccordionGroup', () => {
|
|
11
|
+
let wrapper: VueWrapper;
|
|
12
|
+
|
|
13
|
+
const defaultProps = {
|
|
14
|
+
modelValue: null,
|
|
15
|
+
multiple: false,
|
|
16
|
+
variantGroup: 'accordion'
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
wrapper = mount(AccordionGroup, {
|
|
21
|
+
props: defaultProps,
|
|
22
|
+
global: {
|
|
23
|
+
components: {
|
|
24
|
+
VExpansionPanels
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe('Rendering', () => {
|
|
31
|
+
it('renders as v-expansion-panels element', () => {
|
|
32
|
+
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
33
|
+
expect(wrapper.find('.wl-accordion').exists()).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('has correct default props', () => {
|
|
37
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
38
|
+
expect(expansionPanels.exists()).toBe(true);
|
|
39
|
+
expect(expansionPanels.props('multiple')).toBe(false);
|
|
40
|
+
expect(expansionPanels.props('variant')).toBe('accordion');
|
|
41
|
+
expect(expansionPanels.props('rounded')).toBe(false);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('uses correct expand and collapse icons', () => {
|
|
45
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
46
|
+
expect(expansionPanels.props('expandIcon')).toBe('heroicons:chevron-down');
|
|
47
|
+
expect(expansionPanels.props('collapseIcon')).toBe('heroicons:chevron-up');
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('contains slot for accordion items', () => {
|
|
51
|
+
const wrapperWithSlot = mount(AccordionGroup, {
|
|
52
|
+
props: defaultProps,
|
|
53
|
+
slots: {
|
|
54
|
+
default: '<div class="test-slot">Test Content</div>'
|
|
55
|
+
},
|
|
56
|
+
global: {
|
|
57
|
+
components: {
|
|
58
|
+
VExpansionPanels
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
expect(wrapperWithSlot.find('.test-slot').exists()).toBe(true);
|
|
64
|
+
expect(wrapperWithSlot.find('.test-slot').text()).toBe('Test Content');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe('Props', () => {
|
|
69
|
+
it('accepts modelValue prop', () => {
|
|
70
|
+
const wrapperWithValue = mount(AccordionGroup, {
|
|
71
|
+
props: {
|
|
72
|
+
...defaultProps,
|
|
73
|
+
modelValue: 1
|
|
74
|
+
},
|
|
75
|
+
global: {
|
|
76
|
+
components: {
|
|
77
|
+
VExpansionPanels
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const expansionPanels = wrapperWithValue.findComponent(VExpansionPanels);
|
|
83
|
+
expect(expansionPanels.props('modelValue')).toBe(1);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('accepts array modelValue when multiple is true', () => {
|
|
87
|
+
const wrapperWithArray = mount(AccordionGroup, {
|
|
88
|
+
props: {
|
|
89
|
+
...defaultProps,
|
|
90
|
+
modelValue: [1, 2],
|
|
91
|
+
multiple: true
|
|
92
|
+
},
|
|
93
|
+
global: {
|
|
94
|
+
components: {
|
|
95
|
+
VExpansionPanels
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const expansionPanels = wrapperWithArray.findComponent(VExpansionPanels);
|
|
101
|
+
expect(expansionPanels.props('modelValue')).toEqual([1, 2]);
|
|
102
|
+
expect(expansionPanels.props('multiple')).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('accepts multiple prop', () => {
|
|
106
|
+
const wrapperMultiple = mount(AccordionGroup, {
|
|
107
|
+
props: {
|
|
108
|
+
...defaultProps,
|
|
109
|
+
multiple: true
|
|
110
|
+
},
|
|
111
|
+
global: {
|
|
112
|
+
components: {
|
|
113
|
+
VExpansionPanels
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
const expansionPanels = wrapperMultiple.findComponent(VExpansionPanels);
|
|
119
|
+
expect(expansionPanels.props('multiple')).toBe(true);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('accepts variantGroup prop', () => {
|
|
123
|
+
const customVariant = 'inset';
|
|
124
|
+
const wrapperWithVariant = mount(AccordionGroup, {
|
|
125
|
+
props: {
|
|
126
|
+
...defaultProps,
|
|
127
|
+
variantGroup: customVariant
|
|
128
|
+
},
|
|
129
|
+
global: {
|
|
130
|
+
components: {
|
|
131
|
+
VExpansionPanels
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
const expansionPanels = wrapperWithVariant.findComponent(VExpansionPanels);
|
|
137
|
+
expect(expansionPanels.props('variant')).toBe(customVariant);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('has correct default values', () => {
|
|
141
|
+
expect(wrapper.props('modelValue')).toBeNull();
|
|
142
|
+
expect(wrapper.props('multiple')).toBe(false);
|
|
143
|
+
expect(wrapper.props('variantGroup')).toBe('accordion');
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
describe('V-Model Behavior', () => {
|
|
148
|
+
it('emits update:modelValue when internal value changes', async () => {
|
|
149
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
150
|
+
|
|
151
|
+
// Simulate a change in the expansion panels
|
|
152
|
+
await expansionPanels.vm.$emit('update:modelValue', 1);
|
|
153
|
+
|
|
154
|
+
expect(wrapper.emitted('update:modelValue')).toBeTruthy();
|
|
155
|
+
expect(wrapper.emitted('update:modelValue')[0]).toEqual([1]);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it('updates internal value when modelValue prop changes', async () => {
|
|
159
|
+
await wrapper.setProps({ modelValue: 2 });
|
|
160
|
+
|
|
161
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
162
|
+
expect(expansionPanels.props('modelValue')).toBe(2);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('handles array values for multiple mode', async () => {
|
|
166
|
+
await wrapper.setProps({
|
|
167
|
+
modelValue: [1, 2],
|
|
168
|
+
multiple: true
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
172
|
+
expect(expansionPanels.props('modelValue')).toEqual([1, 2]);
|
|
173
|
+
|
|
174
|
+
// Simulate change
|
|
175
|
+
await expansionPanels.vm.$emit('update:modelValue', [1, 2, 3]);
|
|
176
|
+
expect(wrapper.emitted('update:modelValue')).toBeTruthy();
|
|
177
|
+
expect(wrapper.emitted('update:modelValue')[0]).toEqual([[1, 2, 3]]);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
describe('Styling and Classes', () => {
|
|
182
|
+
it('applies wl-accordion class', () => {
|
|
183
|
+
expect(wrapper.find('.wl-accordion').exists()).toBe(true);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
it('sets rounded to false', () => {
|
|
187
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
188
|
+
expect(expansionPanels.props('rounded')).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it('applies data-testid for testing', () => {
|
|
192
|
+
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
describe('Slot Content', () => {
|
|
197
|
+
it('renders default slot content', () => {
|
|
198
|
+
const slotContent = '<div class="accordion-item">Item 1</div><div class="accordion-item">Item 2</div>';
|
|
199
|
+
const wrapperWithSlots = mount(AccordionGroup, {
|
|
200
|
+
props: defaultProps,
|
|
201
|
+
slots: {
|
|
202
|
+
default: slotContent
|
|
203
|
+
},
|
|
204
|
+
global: {
|
|
205
|
+
components: {
|
|
206
|
+
VExpansionPanels
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
expect(wrapperWithSlots.findAll('.accordion-item')).toHaveLength(2);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it('passes slot content to v-expansion-panels', () => {
|
|
215
|
+
const wrapperWithSlots = mount(AccordionGroup, {
|
|
216
|
+
props: defaultProps,
|
|
217
|
+
slots: {
|
|
218
|
+
default: '<div class="test-content">Accordion Content</div>'
|
|
219
|
+
},
|
|
220
|
+
global: {
|
|
221
|
+
components: {
|
|
222
|
+
VExpansionPanels
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
const expansionPanels = wrapperWithSlots.findComponent(VExpansionPanels);
|
|
228
|
+
expect(expansionPanels.find('.test-content').exists()).toBe(true);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
describe('Component Integration', () => {
|
|
233
|
+
it('can be mounted without props', () => {
|
|
234
|
+
expect(() => {
|
|
235
|
+
mount(AccordionGroup, {
|
|
236
|
+
global: {
|
|
237
|
+
components: {
|
|
238
|
+
VExpansionPanels
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}).not.toThrow();
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('renders consistently on multiple mounts', () => {
|
|
246
|
+
const wrapper1 = mount(AccordionGroup, {
|
|
247
|
+
props: defaultProps,
|
|
248
|
+
global: {
|
|
249
|
+
components: {
|
|
250
|
+
VExpansionPanels
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
const wrapper2 = mount(AccordionGroup, {
|
|
256
|
+
props: defaultProps,
|
|
257
|
+
global: {
|
|
258
|
+
components: {
|
|
259
|
+
VExpansionPanels
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
expect(wrapper1.html()).toBe(wrapper2.html());
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
it('works with different variant groups', () => {
|
|
268
|
+
const variants = ['accordion', 'inset', 'popout'];
|
|
269
|
+
|
|
270
|
+
variants.forEach(variant => {
|
|
271
|
+
const variantWrapper = mount(AccordionGroup, {
|
|
272
|
+
props: {
|
|
273
|
+
...defaultProps,
|
|
274
|
+
variantGroup: variant
|
|
275
|
+
},
|
|
276
|
+
global: {
|
|
277
|
+
components: {
|
|
278
|
+
VExpansionPanels
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
const expansionPanels = variantWrapper.findComponent(VExpansionPanels);
|
|
284
|
+
expect(expansionPanels.props('variant')).toBe(variant);
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
describe('Accessibility', () => {
|
|
290
|
+
it('maintains accessibility features from v-expansion-panels', () => {
|
|
291
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
292
|
+
expect(expansionPanels.exists()).toBe(true);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
it('provides proper testid for testing', () => {
|
|
296
|
+
expect(wrapper.find('[data-testid="root"]').exists()).toBe(true);
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
describe('Event Handling', () => {
|
|
301
|
+
it('properly forwards expansion panel events', async () => {
|
|
302
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
303
|
+
|
|
304
|
+
// Test modelValue update
|
|
305
|
+
await expansionPanels.vm.$emit('update:modelValue', 1);
|
|
306
|
+
expect(wrapper.emitted('update:modelValue')).toBeTruthy();
|
|
307
|
+
expect(wrapper.emitted('update:modelValue')[0]).toEqual([1]);
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
it('handles null and undefined values', async () => {
|
|
311
|
+
await wrapper.setProps({ modelValue: null });
|
|
312
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
313
|
+
expect(expansionPanels.props('modelValue')).toBeNull();
|
|
314
|
+
|
|
315
|
+
await wrapper.setProps({ modelValue: undefined });
|
|
316
|
+
expect(expansionPanels.props('modelValue')).toBeUndefined();
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
describe('Error Handling', () => {
|
|
321
|
+
it('handles invalid variant gracefully', () => {
|
|
322
|
+
expect(() => {
|
|
323
|
+
mount(AccordionGroup, {
|
|
324
|
+
props: {
|
|
325
|
+
...defaultProps,
|
|
326
|
+
variantGroup: 'invalid-variant'
|
|
327
|
+
},
|
|
328
|
+
global: {
|
|
329
|
+
components: {
|
|
330
|
+
VExpansionPanels
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
}).not.toThrow();
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
it('handles mixed data types in modelValue', async () => {
|
|
338
|
+
await wrapper.setProps({ modelValue: 'string-value' });
|
|
339
|
+
const expansionPanels = wrapper.findComponent(VExpansionPanels);
|
|
340
|
+
expect(expansionPanels.props('modelValue')).toBe('string-value');
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
343
|
});
|