@zap-wunschlachen/wl-shared-components 1.0.37 → 1.0.38
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 +33 -43
- 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 +232 -232
- package/src/assets/css/variables.css +109 -109
- 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 +118 -118
- package/src/components/Button/Button.vue +174 -174
- package/src/components/CheckBox/CheckBox.css +214 -214
- package/src/components/CheckBox/Checkbox.vue +138 -138
- 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 +38 -38
- package/src/components/EditField/EditField.css +19 -19
- package/src/components/EditField/EditField.vue +202 -202
- package/src/components/ErrorPage/ErrorPage.css +172 -172
- 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/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 +253 -253
- 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 +71 -71
- package/src/components/MaintenanceBanner/MaintenanceBanner.css +353 -353
- package/src/components/MaintenanceBanner/MaintenanceBanner.vue +127 -127
- package/src/components/MaintenanceBanner/MaintenanceIllustration.vue +54 -54
- 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 +151 -151
- 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 +316 -316
- package/src/components/StagingBanner/StagingBanner.css +19 -0
- package/src/components/StagingBanner/StagingBanner.vue +82 -0
- 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/accessibility.css +218 -218
- package/src/components/index.ts +29 -28
- 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 +141 -141
- 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 +109 -109
- 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/accessibility/component-a11y.spec.ts +469 -469
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts +228 -228
- package/tests/unit/components/Accordion/AccordionGroup.spec.ts.skip +342 -342
- package/tests/unit/components/Accordion/AccordionItem.spec.ts +292 -292
- package/tests/unit/components/Accordion/AccordionItem.spec.ts.skip +383 -383
- package/tests/unit/components/Appointment/AnamneseNotification.spec.ts +176 -176
- 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/Background/Background.spec.ts +177 -177
- 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/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 +61 -61
- 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/Logo.spec.ts +228 -228
- package/tests/unit/components/Icons/MiniLogo.spec.ts +38 -38
- package/tests/unit/components/Icons/RingNotification.spec.ts +393 -393
- package/tests/unit/components/Icons/SolidArrowRight.spec.ts +49 -49
- 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/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 +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/tests/unit/utils/accessibility.spec.ts +318 -318
- package/tsconfig.json +26 -26
- package/vite.config.ts +29 -29
- package/vitest.config.ts +83 -83
- package/public/audio/test.aac +0 -0
|
@@ -1,177 +1,177 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import { mount } from '@vue/test-utils';
|
|
3
|
-
import Background from '@components/Background/Background.vue';
|
|
4
|
-
|
|
5
|
-
// Mock siteColors
|
|
6
|
-
vi.mock('@/utils/index', () => ({
|
|
7
|
-
siteColors: {
|
|
8
|
-
domain: 'domain-dental'
|
|
9
|
-
}
|
|
10
|
-
}));
|
|
11
|
-
|
|
12
|
-
// Mock child background components
|
|
13
|
-
vi.mock('@components/Background/WunschlachenBackground.vue', () => ({
|
|
14
|
-
default: {
|
|
15
|
-
name: 'WunschlachenBackground',
|
|
16
|
-
template: '<svg class="wunschlachen-background"></svg>'
|
|
17
|
-
}
|
|
18
|
-
}));
|
|
19
|
-
|
|
20
|
-
vi.mock('@components/Background/WhiteCocoonBackground.vue', () => ({
|
|
21
|
-
default: {
|
|
22
|
-
name: 'WhiteCocoonBackground',
|
|
23
|
-
template: '<svg class="white-cocoon-background"></svg>'
|
|
24
|
-
}
|
|
25
|
-
}));
|
|
26
|
-
|
|
27
|
-
describe('Background', () => {
|
|
28
|
-
describe('Default Behavior', () => {
|
|
29
|
-
it('renders background container', () => {
|
|
30
|
-
const wrapper = mount(Background);
|
|
31
|
-
expect(wrapper.find('.background').exists()).toBe(true);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('has background__content wrapper', () => {
|
|
35
|
-
const wrapper = mount(Background);
|
|
36
|
-
expect(wrapper.find('.background__content').exists()).toBe(true);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('renders background SVG', () => {
|
|
40
|
-
const wrapper = mount(Background);
|
|
41
|
-
expect(wrapper.find('.background__svg').exists()).toBe(true);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe('Domain-specific Rendering', () => {
|
|
46
|
-
it('renders WunschlachenBackground for dental domain', () => {
|
|
47
|
-
const wrapper = mount(Background);
|
|
48
|
-
|
|
49
|
-
expect(wrapper.find('.wunschlachen-background').exists()).toBe(true);
|
|
50
|
-
expect(wrapper.find('.white-cocoon-background').exists()).toBe(false);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('does not have cocoon modifier class for dental domain', () => {
|
|
54
|
-
const wrapper = mount(Background);
|
|
55
|
-
expect(wrapper.find('.background--cocoon').exists()).toBe(false);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
describe('Slots', () => {
|
|
60
|
-
it('renders default slot content', () => {
|
|
61
|
-
const wrapper = mount(Background, {
|
|
62
|
-
slots: {
|
|
63
|
-
default: '<div class="test-content">Test Content</div>'
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
expect(wrapper.find('.test-content').exists()).toBe(true);
|
|
68
|
-
expect(wrapper.find('.test-content').text()).toBe('Test Content');
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('renders multiple slot elements', () => {
|
|
72
|
-
const wrapper = mount(Background, {
|
|
73
|
-
slots: {
|
|
74
|
-
default: `
|
|
75
|
-
<header class="slot-header">Header</header>
|
|
76
|
-
<main class="slot-main">Main Content</main>
|
|
77
|
-
<footer class="slot-footer">Footer</footer>
|
|
78
|
-
`
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
expect(wrapper.find('.slot-header').exists()).toBe(true);
|
|
83
|
-
expect(wrapper.find('.slot-main').exists()).toBe(true);
|
|
84
|
-
expect(wrapper.find('.slot-footer').exists()).toBe(true);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('preserves slot content structure', () => {
|
|
88
|
-
const wrapper = mount(Background, {
|
|
89
|
-
slots: {
|
|
90
|
-
default: '<div class="nested"><span class="inner">Nested Content</span></div>'
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
expect(wrapper.find('.nested .inner').exists()).toBe(true);
|
|
95
|
-
expect(wrapper.find('.inner').text()).toBe('Nested Content');
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
describe('Accessibility', () => {
|
|
100
|
-
it('slot content is accessible within background', () => {
|
|
101
|
-
const wrapper = mount(Background, {
|
|
102
|
-
slots: {
|
|
103
|
-
default: '<main role="main"><h1>Accessible Content</h1></main>'
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
expect(wrapper.find('[role="main"]').exists()).toBe(true);
|
|
108
|
-
expect(wrapper.find('h1').text()).toBe('Accessible Content');
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
it('background SVG does not interfere with content accessibility', () => {
|
|
112
|
-
const wrapper = mount(Background, {
|
|
113
|
-
slots: {
|
|
114
|
-
default: '<button class="test-button">Click Me</button>'
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// Content should be in background__content, separate from background SVG
|
|
119
|
-
const content = wrapper.find('.background__content');
|
|
120
|
-
expect(content.find('.test-button').exists()).toBe(true);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('maintains proper z-index layering for content', () => {
|
|
124
|
-
const wrapper = mount(Background, {
|
|
125
|
-
slots: {
|
|
126
|
-
default: '<div class="foreground-content">Foreground</div>'
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
// Content should be separate from background SVG
|
|
131
|
-
const svg = wrapper.find('.background__svg');
|
|
132
|
-
const content = wrapper.find('.background__content');
|
|
133
|
-
|
|
134
|
-
expect(svg.exists()).toBe(true);
|
|
135
|
-
expect(content.exists()).toBe(true);
|
|
136
|
-
expect(content.find('.foreground-content').exists()).toBe(true);
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
describe('Visual Structure', () => {
|
|
141
|
-
it('has proper class structure', () => {
|
|
142
|
-
const wrapper = mount(Background);
|
|
143
|
-
|
|
144
|
-
expect(wrapper.find('.background').exists()).toBe(true);
|
|
145
|
-
expect(wrapper.find('.background__svg').exists()).toBe(true);
|
|
146
|
-
expect(wrapper.find('.background__content').exists()).toBe(true);
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it('SVG is positioned as background element', () => {
|
|
150
|
-
const wrapper = mount(Background);
|
|
151
|
-
|
|
152
|
-
const backgroundEl = wrapper.find('.background');
|
|
153
|
-
const svgEl = wrapper.find('.background__svg');
|
|
154
|
-
|
|
155
|
-
expect(backgroundEl.element.contains(svgEl.element)).toBe(true);
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
describe('Edge Cases', () => {
|
|
160
|
-
it('renders correctly with no slot content', () => {
|
|
161
|
-
const wrapper = mount(Background);
|
|
162
|
-
|
|
163
|
-
expect(wrapper.find('.background').exists()).toBe(true);
|
|
164
|
-
expect(wrapper.find('.background__content').exists()).toBe(true);
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
it('handles empty string slot content', () => {
|
|
168
|
-
const wrapper = mount(Background, {
|
|
169
|
-
slots: {
|
|
170
|
-
default: ''
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
expect(wrapper.find('.background').exists()).toBe(true);
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
});
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { mount } from '@vue/test-utils';
|
|
3
|
+
import Background from '@components/Background/Background.vue';
|
|
4
|
+
|
|
5
|
+
// Mock siteColors
|
|
6
|
+
vi.mock('@/utils/index', () => ({
|
|
7
|
+
siteColors: {
|
|
8
|
+
domain: 'domain-dental'
|
|
9
|
+
}
|
|
10
|
+
}));
|
|
11
|
+
|
|
12
|
+
// Mock child background components
|
|
13
|
+
vi.mock('@components/Background/WunschlachenBackground.vue', () => ({
|
|
14
|
+
default: {
|
|
15
|
+
name: 'WunschlachenBackground',
|
|
16
|
+
template: '<svg class="wunschlachen-background"></svg>'
|
|
17
|
+
}
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
vi.mock('@components/Background/WhiteCocoonBackground.vue', () => ({
|
|
21
|
+
default: {
|
|
22
|
+
name: 'WhiteCocoonBackground',
|
|
23
|
+
template: '<svg class="white-cocoon-background"></svg>'
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
|
|
27
|
+
describe('Background', () => {
|
|
28
|
+
describe('Default Behavior', () => {
|
|
29
|
+
it('renders background container', () => {
|
|
30
|
+
const wrapper = mount(Background);
|
|
31
|
+
expect(wrapper.find('.background').exists()).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('has background__content wrapper', () => {
|
|
35
|
+
const wrapper = mount(Background);
|
|
36
|
+
expect(wrapper.find('.background__content').exists()).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('renders background SVG', () => {
|
|
40
|
+
const wrapper = mount(Background);
|
|
41
|
+
expect(wrapper.find('.background__svg').exists()).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe('Domain-specific Rendering', () => {
|
|
46
|
+
it('renders WunschlachenBackground for dental domain', () => {
|
|
47
|
+
const wrapper = mount(Background);
|
|
48
|
+
|
|
49
|
+
expect(wrapper.find('.wunschlachen-background').exists()).toBe(true);
|
|
50
|
+
expect(wrapper.find('.white-cocoon-background').exists()).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('does not have cocoon modifier class for dental domain', () => {
|
|
54
|
+
const wrapper = mount(Background);
|
|
55
|
+
expect(wrapper.find('.background--cocoon').exists()).toBe(false);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe('Slots', () => {
|
|
60
|
+
it('renders default slot content', () => {
|
|
61
|
+
const wrapper = mount(Background, {
|
|
62
|
+
slots: {
|
|
63
|
+
default: '<div class="test-content">Test Content</div>'
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
expect(wrapper.find('.test-content').exists()).toBe(true);
|
|
68
|
+
expect(wrapper.find('.test-content').text()).toBe('Test Content');
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('renders multiple slot elements', () => {
|
|
72
|
+
const wrapper = mount(Background, {
|
|
73
|
+
slots: {
|
|
74
|
+
default: `
|
|
75
|
+
<header class="slot-header">Header</header>
|
|
76
|
+
<main class="slot-main">Main Content</main>
|
|
77
|
+
<footer class="slot-footer">Footer</footer>
|
|
78
|
+
`
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
expect(wrapper.find('.slot-header').exists()).toBe(true);
|
|
83
|
+
expect(wrapper.find('.slot-main').exists()).toBe(true);
|
|
84
|
+
expect(wrapper.find('.slot-footer').exists()).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('preserves slot content structure', () => {
|
|
88
|
+
const wrapper = mount(Background, {
|
|
89
|
+
slots: {
|
|
90
|
+
default: '<div class="nested"><span class="inner">Nested Content</span></div>'
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
expect(wrapper.find('.nested .inner').exists()).toBe(true);
|
|
95
|
+
expect(wrapper.find('.inner').text()).toBe('Nested Content');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
describe('Accessibility', () => {
|
|
100
|
+
it('slot content is accessible within background', () => {
|
|
101
|
+
const wrapper = mount(Background, {
|
|
102
|
+
slots: {
|
|
103
|
+
default: '<main role="main"><h1>Accessible Content</h1></main>'
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
expect(wrapper.find('[role="main"]').exists()).toBe(true);
|
|
108
|
+
expect(wrapper.find('h1').text()).toBe('Accessible Content');
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('background SVG does not interfere with content accessibility', () => {
|
|
112
|
+
const wrapper = mount(Background, {
|
|
113
|
+
slots: {
|
|
114
|
+
default: '<button class="test-button">Click Me</button>'
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Content should be in background__content, separate from background SVG
|
|
119
|
+
const content = wrapper.find('.background__content');
|
|
120
|
+
expect(content.find('.test-button').exists()).toBe(true);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('maintains proper z-index layering for content', () => {
|
|
124
|
+
const wrapper = mount(Background, {
|
|
125
|
+
slots: {
|
|
126
|
+
default: '<div class="foreground-content">Foreground</div>'
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// Content should be separate from background SVG
|
|
131
|
+
const svg = wrapper.find('.background__svg');
|
|
132
|
+
const content = wrapper.find('.background__content');
|
|
133
|
+
|
|
134
|
+
expect(svg.exists()).toBe(true);
|
|
135
|
+
expect(content.exists()).toBe(true);
|
|
136
|
+
expect(content.find('.foreground-content').exists()).toBe(true);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
describe('Visual Structure', () => {
|
|
141
|
+
it('has proper class structure', () => {
|
|
142
|
+
const wrapper = mount(Background);
|
|
143
|
+
|
|
144
|
+
expect(wrapper.find('.background').exists()).toBe(true);
|
|
145
|
+
expect(wrapper.find('.background__svg').exists()).toBe(true);
|
|
146
|
+
expect(wrapper.find('.background__content').exists()).toBe(true);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it('SVG is positioned as background element', () => {
|
|
150
|
+
const wrapper = mount(Background);
|
|
151
|
+
|
|
152
|
+
const backgroundEl = wrapper.find('.background');
|
|
153
|
+
const svgEl = wrapper.find('.background__svg');
|
|
154
|
+
|
|
155
|
+
expect(backgroundEl.element.contains(svgEl.element)).toBe(true);
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
describe('Edge Cases', () => {
|
|
160
|
+
it('renders correctly with no slot content', () => {
|
|
161
|
+
const wrapper = mount(Background);
|
|
162
|
+
|
|
163
|
+
expect(wrapper.find('.background').exists()).toBe(true);
|
|
164
|
+
expect(wrapper.find('.background__content').exists()).toBe(true);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it('handles empty string slot content', () => {
|
|
168
|
+
const wrapper = mount(Background, {
|
|
169
|
+
slots: {
|
|
170
|
+
default: ''
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
expect(wrapper.find('.background').exists()).toBe(true);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
});
|