@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,40 +1,40 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { IconEnum } from '../../../src/constants/iconEnums';
|
|
3
|
-
|
|
4
|
-
describe('IconEnum', () => {
|
|
5
|
-
it('should have CALENDAR constant with correct value', () => {
|
|
6
|
-
expect(IconEnum.CALENDAR).toBe('calendar');
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
it('should have PLAY constant with correct value', () => {
|
|
10
|
-
expect(IconEnum.PLAY).toBe('play');
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('should have exactly 2 enum values', () => {
|
|
14
|
-
const enumValues = Object.values(IconEnum);
|
|
15
|
-
expect(enumValues).toHaveLength(2);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('should contain specific enum values', () => {
|
|
19
|
-
const enumValues = Object.values(IconEnum);
|
|
20
|
-
expect(enumValues).toContain('calendar');
|
|
21
|
-
expect(enumValues).toContain('play');
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('should have unique values', () => {
|
|
25
|
-
const enumValues = Object.values(IconEnum);
|
|
26
|
-
const uniqueValues = new Set(enumValues);
|
|
27
|
-
expect(uniqueValues.size).toBe(enumValues.length);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('should be able to use enum values for comparisons', () => {
|
|
31
|
-
const testValue = 'calendar';
|
|
32
|
-
expect(testValue).toBe(IconEnum.CALENDAR);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('should maintain type safety with enum keys', () => {
|
|
36
|
-
const enumKeys = Object.keys(IconEnum);
|
|
37
|
-
expect(enumKeys).toContain('CALENDAR');
|
|
38
|
-
expect(enumKeys).toContain('PLAY');
|
|
39
|
-
});
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { IconEnum } from '../../../src/constants/iconEnums';
|
|
3
|
+
|
|
4
|
+
describe('IconEnum', () => {
|
|
5
|
+
it('should have CALENDAR constant with correct value', () => {
|
|
6
|
+
expect(IconEnum.CALENDAR).toBe('calendar');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it('should have PLAY constant with correct value', () => {
|
|
10
|
+
expect(IconEnum.PLAY).toBe('play');
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('should have exactly 2 enum values', () => {
|
|
14
|
+
const enumValues = Object.values(IconEnum);
|
|
15
|
+
expect(enumValues).toHaveLength(2);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('should contain specific enum values', () => {
|
|
19
|
+
const enumValues = Object.values(IconEnum);
|
|
20
|
+
expect(enumValues).toContain('calendar');
|
|
21
|
+
expect(enumValues).toContain('play');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('should have unique values', () => {
|
|
25
|
+
const enumValues = Object.values(IconEnum);
|
|
26
|
+
const uniqueValues = new Set(enumValues);
|
|
27
|
+
expect(uniqueValues.size).toBe(enumValues.length);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('should be able to use enum values for comparisons', () => {
|
|
31
|
+
const testValue = 'calendar';
|
|
32
|
+
expect(testValue).toBe(IconEnum.CALENDAR);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('should maintain type safety with enum keys', () => {
|
|
36
|
+
const enumKeys = Object.keys(IconEnum);
|
|
37
|
+
expect(enumKeys).toContain('CALENDAR');
|
|
38
|
+
expect(enumKeys).toContain('PLAY');
|
|
39
|
+
});
|
|
40
40
|
});
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
import { createInternalI18n } from '../../../src/i18n/i18n';
|
|
3
|
-
|
|
4
|
-
vi.mock('vue-i18n', () => ({
|
|
5
|
-
createI18n: vi.fn((config) => ({
|
|
6
|
-
...config,
|
|
7
|
-
global: {
|
|
8
|
-
locale: config.locale,
|
|
9
|
-
fallbackLocale: config.fallbackLocale,
|
|
10
|
-
messages: config.messages,
|
|
11
|
-
},
|
|
12
|
-
install: vi.fn(),
|
|
13
|
-
})),
|
|
14
|
-
}));
|
|
15
|
-
|
|
16
|
-
vi.mock('../../../src/i18n/locales/en.json', () => ({
|
|
17
|
-
default: {
|
|
18
|
-
hello: 'Hello',
|
|
19
|
-
welcome: 'Welcome',
|
|
20
|
-
},
|
|
21
|
-
}));
|
|
22
|
-
|
|
23
|
-
vi.mock('../../../src/i18n/locales/de.json', () => ({
|
|
24
|
-
default: {
|
|
25
|
-
hello: 'Hallo',
|
|
26
|
-
welcome: 'Willkommen',
|
|
27
|
-
},
|
|
28
|
-
}));
|
|
29
|
-
|
|
30
|
-
describe('i18n', () => {
|
|
31
|
-
beforeEach(() => {
|
|
32
|
-
vi.clearAllMocks();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
describe('createInternalI18n', () => {
|
|
36
|
-
it('should create an i18n instance', () => {
|
|
37
|
-
const i18n = createInternalI18n();
|
|
38
|
-
expect(i18n).toBeDefined();
|
|
39
|
-
expect(i18n).toHaveProperty('global');
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it('should set default locale to German (de)', () => {
|
|
43
|
-
const i18n = createInternalI18n();
|
|
44
|
-
expect(i18n.global.locale).toBe('de');
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('should set fallback locale to German (de)', () => {
|
|
48
|
-
const i18n = createInternalI18n();
|
|
49
|
-
expect(i18n.global.fallbackLocale).toBe('de');
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it('should include English messages', () => {
|
|
53
|
-
const i18n = createInternalI18n();
|
|
54
|
-
expect(i18n.global.messages.en).toBeDefined();
|
|
55
|
-
expect(i18n.global.messages.en).toHaveProperty('hello');
|
|
56
|
-
expect(i18n.global.messages.en.hello).toBe('Hello');
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('should include German messages', () => {
|
|
60
|
-
const i18n = createInternalI18n();
|
|
61
|
-
expect(i18n.global.messages.de).toBeDefined();
|
|
62
|
-
expect(i18n.global.messages.de).toHaveProperty('hello');
|
|
63
|
-
expect(i18n.global.messages.de.hello).toBe('Hallo');
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it('should have both language locales available', () => {
|
|
67
|
-
const i18n = createInternalI18n();
|
|
68
|
-
const availableLocales = Object.keys(i18n.global.messages);
|
|
69
|
-
expect(availableLocales).toContain('en');
|
|
70
|
-
expect(availableLocales).toContain('de');
|
|
71
|
-
expect(availableLocales).toHaveLength(2);
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('should return a consistent i18n configuration', () => {
|
|
75
|
-
const i18n1 = createInternalI18n();
|
|
76
|
-
const i18n2 = createInternalI18n();
|
|
77
|
-
|
|
78
|
-
expect(i18n1.global.locale).toBe(i18n2.global.locale);
|
|
79
|
-
expect(i18n1.global.fallbackLocale).toBe(i18n2.global.fallbackLocale);
|
|
80
|
-
expect(JSON.stringify(i18n1.global.messages)).toBe(JSON.stringify(i18n2.global.messages));
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('should have an install method for Vue plugin compatibility', () => {
|
|
84
|
-
const i18n = createInternalI18n();
|
|
85
|
-
expect(i18n).toHaveProperty('install');
|
|
86
|
-
expect(typeof i18n.install).toBe('function');
|
|
87
|
-
});
|
|
88
|
-
});
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { createInternalI18n } from '../../../src/i18n/i18n';
|
|
3
|
+
|
|
4
|
+
vi.mock('vue-i18n', () => ({
|
|
5
|
+
createI18n: vi.fn((config) => ({
|
|
6
|
+
...config,
|
|
7
|
+
global: {
|
|
8
|
+
locale: config.locale,
|
|
9
|
+
fallbackLocale: config.fallbackLocale,
|
|
10
|
+
messages: config.messages,
|
|
11
|
+
},
|
|
12
|
+
install: vi.fn(),
|
|
13
|
+
})),
|
|
14
|
+
}));
|
|
15
|
+
|
|
16
|
+
vi.mock('../../../src/i18n/locales/en.json', () => ({
|
|
17
|
+
default: {
|
|
18
|
+
hello: 'Hello',
|
|
19
|
+
welcome: 'Welcome',
|
|
20
|
+
},
|
|
21
|
+
}));
|
|
22
|
+
|
|
23
|
+
vi.mock('../../../src/i18n/locales/de.json', () => ({
|
|
24
|
+
default: {
|
|
25
|
+
hello: 'Hallo',
|
|
26
|
+
welcome: 'Willkommen',
|
|
27
|
+
},
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
describe('i18n', () => {
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
vi.clearAllMocks();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('createInternalI18n', () => {
|
|
36
|
+
it('should create an i18n instance', () => {
|
|
37
|
+
const i18n = createInternalI18n();
|
|
38
|
+
expect(i18n).toBeDefined();
|
|
39
|
+
expect(i18n).toHaveProperty('global');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('should set default locale to German (de)', () => {
|
|
43
|
+
const i18n = createInternalI18n();
|
|
44
|
+
expect(i18n.global.locale).toBe('de');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('should set fallback locale to German (de)', () => {
|
|
48
|
+
const i18n = createInternalI18n();
|
|
49
|
+
expect(i18n.global.fallbackLocale).toBe('de');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('should include English messages', () => {
|
|
53
|
+
const i18n = createInternalI18n();
|
|
54
|
+
expect(i18n.global.messages.en).toBeDefined();
|
|
55
|
+
expect(i18n.global.messages.en).toHaveProperty('hello');
|
|
56
|
+
expect(i18n.global.messages.en.hello).toBe('Hello');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should include German messages', () => {
|
|
60
|
+
const i18n = createInternalI18n();
|
|
61
|
+
expect(i18n.global.messages.de).toBeDefined();
|
|
62
|
+
expect(i18n.global.messages.de).toHaveProperty('hello');
|
|
63
|
+
expect(i18n.global.messages.de.hello).toBe('Hallo');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('should have both language locales available', () => {
|
|
67
|
+
const i18n = createInternalI18n();
|
|
68
|
+
const availableLocales = Object.keys(i18n.global.messages);
|
|
69
|
+
expect(availableLocales).toContain('en');
|
|
70
|
+
expect(availableLocales).toContain('de');
|
|
71
|
+
expect(availableLocales).toHaveLength(2);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('should return a consistent i18n configuration', () => {
|
|
75
|
+
const i18n1 = createInternalI18n();
|
|
76
|
+
const i18n2 = createInternalI18n();
|
|
77
|
+
|
|
78
|
+
expect(i18n1.global.locale).toBe(i18n2.global.locale);
|
|
79
|
+
expect(i18n1.global.fallbackLocale).toBe(i18n2.global.fallbackLocale);
|
|
80
|
+
expect(JSON.stringify(i18n1.global.messages)).toBe(JSON.stringify(i18n2.global.messages));
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('should have an install method for Vue plugin compatibility', () => {
|
|
84
|
+
const i18n = createInternalI18n();
|
|
85
|
+
expect(i18n).toHaveProperty('install');
|
|
86
|
+
expect(typeof i18n.install).toBe('function');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
89
|
});
|
|
@@ -1,183 +1,183 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
-
|
|
3
|
-
vi.mock('vuetify/styles', () => ({}));
|
|
4
|
-
vi.mock('@mdi/font/css/materialdesignicons.css', () => ({}));
|
|
5
|
-
|
|
6
|
-
const mockHeroicons = {
|
|
7
|
-
aliases: {},
|
|
8
|
-
component: vi.fn(),
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
vi.mock('../../../heroicons', () => ({
|
|
12
|
-
default: mockHeroicons,
|
|
13
|
-
}));
|
|
14
|
-
|
|
15
|
-
vi.mock('vuetify/iconsets/mdi', () => ({
|
|
16
|
-
aliases: {
|
|
17
|
-
complete: 'mdi-check',
|
|
18
|
-
cancel: 'mdi-close',
|
|
19
|
-
},
|
|
20
|
-
mdi: {
|
|
21
|
-
component: vi.fn(),
|
|
22
|
-
aliases: {},
|
|
23
|
-
},
|
|
24
|
-
}));
|
|
25
|
-
|
|
26
|
-
vi.mock('vuetify/components', () => ({
|
|
27
|
-
VApp: { name: 'VApp' },
|
|
28
|
-
VBtn: { name: 'VBtn' },
|
|
29
|
-
VCard: { name: 'VCard' },
|
|
30
|
-
}));
|
|
31
|
-
|
|
32
|
-
vi.mock('vuetify/directives', () => ({
|
|
33
|
-
vRipple: { name: 'vRipple' },
|
|
34
|
-
vTouch: { name: 'vTouch' },
|
|
35
|
-
}));
|
|
36
|
-
|
|
37
|
-
const createVuetifyMock = vi.fn((config) => ({
|
|
38
|
-
...config,
|
|
39
|
-
install: vi.fn(),
|
|
40
|
-
display: {},
|
|
41
|
-
theme: config.theme,
|
|
42
|
-
icons: config.icons,
|
|
43
|
-
}));
|
|
44
|
-
|
|
45
|
-
vi.mock('vuetify', () => ({
|
|
46
|
-
createVuetify: createVuetifyMock,
|
|
47
|
-
}));
|
|
48
|
-
|
|
49
|
-
describe('vuetify plugin', () => {
|
|
50
|
-
beforeEach(() => {
|
|
51
|
-
vi.clearAllMocks();
|
|
52
|
-
vi.resetModules();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('should create a vuetify instance', async () => {
|
|
56
|
-
const vuetifyModule = await import('../../../src/plugins/vuetify');
|
|
57
|
-
const vuetify = vuetifyModule.default;
|
|
58
|
-
|
|
59
|
-
expect(vuetify).toBeDefined();
|
|
60
|
-
expect(createVuetifyMock).toHaveBeenCalled();
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('should configure icons with mdi as default set', async () => {
|
|
64
|
-
await import('../../../src/plugins/vuetify');
|
|
65
|
-
|
|
66
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
67
|
-
expect(config.icons).toBeDefined();
|
|
68
|
-
expect(config.icons.defaultSet).toBe('mdi');
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('should include both mdi and heroicons sets', async () => {
|
|
72
|
-
await import('../../../src/plugins/vuetify');
|
|
73
|
-
|
|
74
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
75
|
-
expect(config.icons.sets).toBeDefined();
|
|
76
|
-
expect(config.icons.sets).toHaveProperty('mdi');
|
|
77
|
-
expect(config.icons.sets).toHaveProperty('heroicons');
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it('should include icon aliases', async () => {
|
|
81
|
-
await import('../../../src/plugins/vuetify');
|
|
82
|
-
|
|
83
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
84
|
-
expect(config.icons.aliases).toBeDefined();
|
|
85
|
-
expect(config.icons.aliases).toHaveProperty('complete');
|
|
86
|
-
expect(config.icons.aliases).toHaveProperty('cancel');
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('should include all vuetify components', async () => {
|
|
90
|
-
await import('../../../src/plugins/vuetify');
|
|
91
|
-
|
|
92
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
93
|
-
expect(config.components).toBeDefined();
|
|
94
|
-
expect(config.components).toHaveProperty('VApp');
|
|
95
|
-
expect(config.components).toHaveProperty('VBtn');
|
|
96
|
-
expect(config.components).toHaveProperty('VCard');
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it('should include all vuetify directives', async () => {
|
|
100
|
-
await import('../../../src/plugins/vuetify');
|
|
101
|
-
|
|
102
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
103
|
-
expect(config.directives).toBeDefined();
|
|
104
|
-
expect(config.directives).toHaveProperty('vRipple');
|
|
105
|
-
expect(config.directives).toHaveProperty('vTouch');
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
describe('theme configuration', () => {
|
|
109
|
-
it('should set default theme to light', async () => {
|
|
110
|
-
await import('../../../src/plugins/vuetify');
|
|
111
|
-
|
|
112
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
113
|
-
expect(config.theme).toBeDefined();
|
|
114
|
-
expect(config.theme.defaultTheme).toBe('light');
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it('should define light and dark themes', async () => {
|
|
118
|
-
await import('../../../src/plugins/vuetify');
|
|
119
|
-
|
|
120
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
121
|
-
expect(config.theme.themes).toBeDefined();
|
|
122
|
-
expect(config.theme.themes).toHaveProperty('light');
|
|
123
|
-
expect(config.theme.themes).toHaveProperty('dark');
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
describe('light theme', () => {
|
|
127
|
-
it('should have dark property set to false', async () => {
|
|
128
|
-
await import('../../../src/plugins/vuetify');
|
|
129
|
-
|
|
130
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
131
|
-
expect(config.theme.themes.light.dark).toBe(false);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it('should define opacity variables', async () => {
|
|
135
|
-
await import('../../../src/plugins/vuetify');
|
|
136
|
-
|
|
137
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
138
|
-
expect(config.theme.themes.light.variables).toBeDefined();
|
|
139
|
-
expect(config.theme.themes.light.variables['activated-opacity']).toBe('0.2');
|
|
140
|
-
expect(config.theme.themes.light.variables['hover-opacity']).toBe('0.2');
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
it('should have empty colors object (colors loaded from CSS variables)', async () => {
|
|
144
|
-
await import('../../../src/plugins/vuetify');
|
|
145
|
-
|
|
146
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
147
|
-
const colors = config.theme.themes.light.colors;
|
|
148
|
-
|
|
149
|
-
// Colors are loaded from variable.css, not defined in Vuetify config
|
|
150
|
-
expect(colors).toBeDefined();
|
|
151
|
-
expect(Object.keys(colors).length).toBe(0);
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
describe('dark theme', () => {
|
|
156
|
-
it('should have dark property set to true', async () => {
|
|
157
|
-
await import('../../../src/plugins/vuetify');
|
|
158
|
-
|
|
159
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
160
|
-
expect(config.theme.themes.dark.dark).toBe(true);
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
it('should have empty colors object (colors loaded from CSS variables)', async () => {
|
|
164
|
-
await import('../../../src/plugins/vuetify');
|
|
165
|
-
|
|
166
|
-
const config = createVuetifyMock.mock.calls[0][0];
|
|
167
|
-
const colors = config.theme.themes.dark.colors;
|
|
168
|
-
|
|
169
|
-
// Colors are loaded from variable.css, not defined in Vuetify config
|
|
170
|
-
expect(colors).toBeDefined();
|
|
171
|
-
expect(Object.keys(colors).length).toBe(0);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('should export a valid vuetify instance with install method', async () => {
|
|
177
|
-
const vuetifyModule = await import('../../../src/plugins/vuetify');
|
|
178
|
-
const vuetify = vuetifyModule.default;
|
|
179
|
-
|
|
180
|
-
expect(vuetify).toHaveProperty('install');
|
|
181
|
-
expect(typeof vuetify.install).toBe('function');
|
|
182
|
-
});
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
|
|
3
|
+
vi.mock('vuetify/styles', () => ({}));
|
|
4
|
+
vi.mock('@mdi/font/css/materialdesignicons.css', () => ({}));
|
|
5
|
+
|
|
6
|
+
const mockHeroicons = {
|
|
7
|
+
aliases: {},
|
|
8
|
+
component: vi.fn(),
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
vi.mock('../../../heroicons', () => ({
|
|
12
|
+
default: mockHeroicons,
|
|
13
|
+
}));
|
|
14
|
+
|
|
15
|
+
vi.mock('vuetify/iconsets/mdi', () => ({
|
|
16
|
+
aliases: {
|
|
17
|
+
complete: 'mdi-check',
|
|
18
|
+
cancel: 'mdi-close',
|
|
19
|
+
},
|
|
20
|
+
mdi: {
|
|
21
|
+
component: vi.fn(),
|
|
22
|
+
aliases: {},
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
vi.mock('vuetify/components', () => ({
|
|
27
|
+
VApp: { name: 'VApp' },
|
|
28
|
+
VBtn: { name: 'VBtn' },
|
|
29
|
+
VCard: { name: 'VCard' },
|
|
30
|
+
}));
|
|
31
|
+
|
|
32
|
+
vi.mock('vuetify/directives', () => ({
|
|
33
|
+
vRipple: { name: 'vRipple' },
|
|
34
|
+
vTouch: { name: 'vTouch' },
|
|
35
|
+
}));
|
|
36
|
+
|
|
37
|
+
const createVuetifyMock = vi.fn((config) => ({
|
|
38
|
+
...config,
|
|
39
|
+
install: vi.fn(),
|
|
40
|
+
display: {},
|
|
41
|
+
theme: config.theme,
|
|
42
|
+
icons: config.icons,
|
|
43
|
+
}));
|
|
44
|
+
|
|
45
|
+
vi.mock('vuetify', () => ({
|
|
46
|
+
createVuetify: createVuetifyMock,
|
|
47
|
+
}));
|
|
48
|
+
|
|
49
|
+
describe('vuetify plugin', () => {
|
|
50
|
+
beforeEach(() => {
|
|
51
|
+
vi.clearAllMocks();
|
|
52
|
+
vi.resetModules();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('should create a vuetify instance', async () => {
|
|
56
|
+
const vuetifyModule = await import('../../../src/plugins/vuetify');
|
|
57
|
+
const vuetify = vuetifyModule.default;
|
|
58
|
+
|
|
59
|
+
expect(vuetify).toBeDefined();
|
|
60
|
+
expect(createVuetifyMock).toHaveBeenCalled();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('should configure icons with mdi as default set', async () => {
|
|
64
|
+
await import('../../../src/plugins/vuetify');
|
|
65
|
+
|
|
66
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
67
|
+
expect(config.icons).toBeDefined();
|
|
68
|
+
expect(config.icons.defaultSet).toBe('mdi');
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('should include both mdi and heroicons sets', async () => {
|
|
72
|
+
await import('../../../src/plugins/vuetify');
|
|
73
|
+
|
|
74
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
75
|
+
expect(config.icons.sets).toBeDefined();
|
|
76
|
+
expect(config.icons.sets).toHaveProperty('mdi');
|
|
77
|
+
expect(config.icons.sets).toHaveProperty('heroicons');
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('should include icon aliases', async () => {
|
|
81
|
+
await import('../../../src/plugins/vuetify');
|
|
82
|
+
|
|
83
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
84
|
+
expect(config.icons.aliases).toBeDefined();
|
|
85
|
+
expect(config.icons.aliases).toHaveProperty('complete');
|
|
86
|
+
expect(config.icons.aliases).toHaveProperty('cancel');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('should include all vuetify components', async () => {
|
|
90
|
+
await import('../../../src/plugins/vuetify');
|
|
91
|
+
|
|
92
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
93
|
+
expect(config.components).toBeDefined();
|
|
94
|
+
expect(config.components).toHaveProperty('VApp');
|
|
95
|
+
expect(config.components).toHaveProperty('VBtn');
|
|
96
|
+
expect(config.components).toHaveProperty('VCard');
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('should include all vuetify directives', async () => {
|
|
100
|
+
await import('../../../src/plugins/vuetify');
|
|
101
|
+
|
|
102
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
103
|
+
expect(config.directives).toBeDefined();
|
|
104
|
+
expect(config.directives).toHaveProperty('vRipple');
|
|
105
|
+
expect(config.directives).toHaveProperty('vTouch');
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
describe('theme configuration', () => {
|
|
109
|
+
it('should set default theme to light', async () => {
|
|
110
|
+
await import('../../../src/plugins/vuetify');
|
|
111
|
+
|
|
112
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
113
|
+
expect(config.theme).toBeDefined();
|
|
114
|
+
expect(config.theme.defaultTheme).toBe('light');
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('should define light and dark themes', async () => {
|
|
118
|
+
await import('../../../src/plugins/vuetify');
|
|
119
|
+
|
|
120
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
121
|
+
expect(config.theme.themes).toBeDefined();
|
|
122
|
+
expect(config.theme.themes).toHaveProperty('light');
|
|
123
|
+
expect(config.theme.themes).toHaveProperty('dark');
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('light theme', () => {
|
|
127
|
+
it('should have dark property set to false', async () => {
|
|
128
|
+
await import('../../../src/plugins/vuetify');
|
|
129
|
+
|
|
130
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
131
|
+
expect(config.theme.themes.light.dark).toBe(false);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('should define opacity variables', async () => {
|
|
135
|
+
await import('../../../src/plugins/vuetify');
|
|
136
|
+
|
|
137
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
138
|
+
expect(config.theme.themes.light.variables).toBeDefined();
|
|
139
|
+
expect(config.theme.themes.light.variables['activated-opacity']).toBe('0.2');
|
|
140
|
+
expect(config.theme.themes.light.variables['hover-opacity']).toBe('0.2');
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('should have empty colors object (colors loaded from CSS variables)', async () => {
|
|
144
|
+
await import('../../../src/plugins/vuetify');
|
|
145
|
+
|
|
146
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
147
|
+
const colors = config.theme.themes.light.colors;
|
|
148
|
+
|
|
149
|
+
// Colors are loaded from variable.css, not defined in Vuetify config
|
|
150
|
+
expect(colors).toBeDefined();
|
|
151
|
+
expect(Object.keys(colors).length).toBe(0);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
describe('dark theme', () => {
|
|
156
|
+
it('should have dark property set to true', async () => {
|
|
157
|
+
await import('../../../src/plugins/vuetify');
|
|
158
|
+
|
|
159
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
160
|
+
expect(config.theme.themes.dark.dark).toBe(true);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it('should have empty colors object (colors loaded from CSS variables)', async () => {
|
|
164
|
+
await import('../../../src/plugins/vuetify');
|
|
165
|
+
|
|
166
|
+
const config = createVuetifyMock.mock.calls[0][0];
|
|
167
|
+
const colors = config.theme.themes.dark.colors;
|
|
168
|
+
|
|
169
|
+
// Colors are loaded from variable.css, not defined in Vuetify config
|
|
170
|
+
expect(colors).toBeDefined();
|
|
171
|
+
expect(Object.keys(colors).length).toBe(0);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should export a valid vuetify instance with install method', async () => {
|
|
177
|
+
const vuetifyModule = await import('../../../src/plugins/vuetify');
|
|
178
|
+
const vuetify = vuetifyModule.default;
|
|
179
|
+
|
|
180
|
+
expect(vuetify).toHaveProperty('install');
|
|
181
|
+
expect(typeof vuetify.install).toBe('function');
|
|
182
|
+
});
|
|
183
183
|
});
|