@getmicdrop/svelte-components 2.0.4 → 2.0.6
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/dist/components/Alert/Alert.spec.js +170 -170
- package/dist/components/Badges/Badge.spec.js +103 -103
- package/dist/components/BottomSheet/BottomSheet.spec.js +127 -127
- package/dist/components/Breadcrumb/Breadcrumb.spec.js +120 -120
- package/dist/components/Button/Button.spec.js +211 -211
- package/dist/components/Button/ButtonSaveDemo.spec.js +48 -48
- package/dist/components/Calendar/Calendar.spec.js +131 -131
- package/dist/components/Calendar/QuarterView.spec.js +394 -394
- package/dist/components/Card.spec.js +47 -47
- package/dist/components/CropImage/CropImage.spec.js +216 -216
- package/dist/components/DarkModeToggle.spec.js +357 -357
- package/dist/components/ErrorDisplay.spec.js +69 -69
- package/dist/components/FormActions.spec.js +88 -88
- package/dist/components/FormValidationSummary.spec.js +203 -203
- package/dist/components/Icons/Icon.spec.js +175 -175
- package/dist/components/Icons/MoreHori.spec.js +67 -67
- package/dist/components/Icons/WarningIcon.spec.js +30 -30
- package/dist/components/Input/Input.spec.js +573 -573
- package/dist/components/Input/MultiSelect.spec.js +257 -257
- package/dist/components/Input/OTPInput.spec.js +238 -238
- package/dist/components/Input/Select.spec.js +218 -218
- package/dist/components/Layout/BottomNav.spec.js +130 -130
- package/dist/components/Layout/Header.spec.js +203 -203
- package/dist/components/Modal/ConfirmationModal.spec.js +191 -191
- package/dist/components/Modal/Modal.spec.js +95 -95
- package/dist/components/Modal/ModalStateManager.spec.js +100 -100
- package/dist/components/PageLoader.spec.js +54 -54
- package/dist/components/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +173 -173
- package/dist/components/PlaceAutocomplete/PlaceAutocomplete.spec.js +300 -300
- package/dist/components/Spinner/Spinner.spec.js +75 -75
- package/dist/components/StatusIndicator/StatusIndicator.spec.js +129 -129
- package/dist/components/Toaster/Toaster.stories.svelte +1 -1
- package/dist/components/Toggle.spec.js +158 -158
- package/dist/components/ValidationError.spec.js +79 -79
- package/dist/components/pages/performers/AvailabilityCalendarModal.spec.js +606 -606
- package/dist/components/pages/performers/AvailabilityCalendarModal.svelte +4 -4
- package/dist/components/pages/performers/ModalShowInfo.spec.js +124 -124
- package/dist/components/pages/performers/ModalShowInfo.svelte +1 -1
- package/dist/components/pages/performers/PageBackButton.spec.js +89 -89
- package/dist/components/pages/performers/SectionHeader.spec.js +75 -75
- package/dist/components/pages/performers/ShowDetails.spec.js +166 -166
- package/dist/components/pages/performers/ShowItemCard.spec.js +793 -793
- package/dist/components/pages/performers/ShowItemCard.svelte +4 -4
- package/dist/components/pages/performers/SwitchOption.spec.js +127 -127
- package/dist/components/pages/performers/VenueInfo.spec.js +167 -167
- package/dist/components/pages/performers/VenueInfo.svelte +1 -1
- package/dist/components/pages/performers/VenueItemCard.spec.js +763 -763
- package/dist/components/pages/performers/VenueItemCard.svelte +4 -4
- package/dist/components/pages/profile/profile-form.spec.js +9 -9
- package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte +3 -3
- package/dist/components/pages/shows/ShowList.spec.js +33 -33
- package/dist/components/pages/shows/TabContent.spec.js +90 -90
- package/dist/components/pages/shows/TabNavigation.spec.js +143 -143
- package/dist/config.js +5 -5
- package/dist/config.spec.js +29 -29
- package/dist/constants/formOptions.js +25 -25
- package/dist/constants/formOptions.spec.js +88 -88
- package/dist/index.js +111 -111
- package/dist/stores/auth.d.ts +9 -0
- package/dist/stores/auth.d.ts.map +1 -0
- package/dist/stores/auth.js +36 -0
- package/dist/stores/auth.spec.d.ts +2 -0
- package/dist/stores/auth.spec.d.ts.map +1 -0
- package/dist/stores/auth.spec.js +139 -0
- package/dist/stores/formDataStore.d.ts +17 -0
- package/dist/stores/formDataStore.d.ts.map +1 -0
- package/dist/stores/formDataStore.js +25 -0
- package/dist/stores/formDataStore.spec.d.ts +2 -0
- package/dist/stores/formDataStore.spec.d.ts.map +1 -0
- package/dist/stores/formDataStore.spec.js +257 -0
- package/dist/stores/formSave.d.ts +24 -0
- package/dist/stores/formSave.d.ts.map +1 -0
- package/dist/stores/formSave.js +132 -0
- package/dist/stores/formSave.spec.d.ts +2 -0
- package/dist/stores/formSave.spec.d.ts.map +1 -0
- package/dist/stores/formSave.spec.js +296 -0
- package/dist/stores/index.d.ts +1 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/index.js +0 -0
- package/dist/stores/navigation.d.ts +5 -0
- package/dist/stores/navigation.d.ts.map +1 -0
- package/dist/stores/navigation.js +12 -0
- package/dist/stores/navigation.spec.d.ts +2 -0
- package/dist/stores/navigation.spec.d.ts.map +1 -0
- package/dist/stores/navigation.spec.js +136 -0
- package/dist/stores/toaster.d.ts +4 -0
- package/dist/stores/toaster.d.ts.map +1 -0
- package/dist/stores/toaster.js +13 -0
- package/dist/stores/toaster.spec.d.ts +2 -0
- package/dist/stores/toaster.spec.d.ts.map +1 -0
- package/dist/stores/toaster.spec.js +59 -0
- package/dist/telemetry.js +357 -357
- package/dist/telemetry.server.js +211 -211
- package/dist/telemetry.server.spec.js +434 -434
- package/dist/telemetry.spec.js +660 -660
- package/dist/utils/apiConfig.js +49 -49
- package/dist/utils/apiConfig.spec.js +118 -118
- package/dist/utils/greetings.js +187 -187
- package/dist/utils/greetings.spec.js +337 -337
- package/dist/utils/imageValidation.js +121 -121
- package/dist/utils/imageValidation.spec.js +220 -220
- package/dist/utils/portal.js +25 -25
- package/dist/utils/portal.spec.js +143 -143
- package/dist/utils/utils/utils.js +323 -323
- package/dist/utils/utils/utils.spec.js +698 -698
- package/dist/utils/utils.spec.js +643 -643
- package/package.json +1 -1
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import { render, screen } from "@testing-library/svelte";
|
|
2
|
-
import { expect, describe, test } from "vitest";
|
|
3
|
-
import Spinner from "./Spinner.svelte";
|
|
4
|
-
|
|
5
|
-
describe("Spinner Component Tests", () => {
|
|
6
|
-
test("Renders spinner with status role", () => {
|
|
7
|
-
render(Spinner);
|
|
8
|
-
const status = screen.getByRole("status");
|
|
9
|
-
expect(status).toBeInTheDocument();
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
test("Has loading text for screen readers", () => {
|
|
13
|
-
render(Spinner);
|
|
14
|
-
expect(screen.getByText("Loading...")).toBeInTheDocument();
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
test("Loading text is sr-only", () => {
|
|
18
|
-
render(Spinner);
|
|
19
|
-
const loadingText = screen.getByText("Loading...");
|
|
20
|
-
expect(loadingText).toHaveClass("sr-only");
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
test("Contains SVG element", () => {
|
|
24
|
-
const { container } = render(Spinner);
|
|
25
|
-
const svg = container.querySelector("svg");
|
|
26
|
-
expect(svg).toBeInTheDocument();
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test("SVG is hidden from accessibility tree", () => {
|
|
30
|
-
const { container } = render(Spinner);
|
|
31
|
-
const svg = container.querySelector("svg");
|
|
32
|
-
expect(svg).toHaveAttribute("aria-hidden", "true");
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
test("SVG has animation class", () => {
|
|
36
|
-
const { container } = render(Spinner);
|
|
37
|
-
const svg = container.querySelector("svg");
|
|
38
|
-
expect(svg).toHaveClass("animate-spin");
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
test("Has flexbox centering classes", () => {
|
|
42
|
-
render(Spinner);
|
|
43
|
-
const status = screen.getByRole("status");
|
|
44
|
-
expect(status).toHaveClass("flex");
|
|
45
|
-
expect(status).toHaveClass("flex-col");
|
|
46
|
-
expect(status).toHaveClass("justify-center");
|
|
47
|
-
expect(status).toHaveClass("items-center");
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
test("Has correct height", () => {
|
|
51
|
-
render(Spinner);
|
|
52
|
-
const status = screen.getByRole("status");
|
|
53
|
-
expect(status).toHaveClass("h-10");
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
test("SVG has correct dimensions", () => {
|
|
57
|
-
const { container } = render(Spinner);
|
|
58
|
-
const svg = container.querySelector("svg");
|
|
59
|
-
expect(svg).toHaveClass("w-8");
|
|
60
|
-
expect(svg).toHaveClass("h-8");
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
test("Has dark mode text color classes", () => {
|
|
64
|
-
const { container } = render(Spinner);
|
|
65
|
-
const svg = container.querySelector("svg");
|
|
66
|
-
expect(svg).toHaveClass("text-gray-200");
|
|
67
|
-
expect(svg).toHaveClass("dark:text-gray-600");
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
test("Has blue fill color", () => {
|
|
71
|
-
const { container } = render(Spinner);
|
|
72
|
-
const svg = container.querySelector("svg");
|
|
73
|
-
expect(svg).toHaveClass("fill-blue-600");
|
|
74
|
-
});
|
|
75
|
-
});
|
|
1
|
+
import { render, screen } from "@testing-library/svelte";
|
|
2
|
+
import { expect, describe, test } from "vitest";
|
|
3
|
+
import Spinner from "./Spinner.svelte";
|
|
4
|
+
|
|
5
|
+
describe("Spinner Component Tests", () => {
|
|
6
|
+
test("Renders spinner with status role", () => {
|
|
7
|
+
render(Spinner);
|
|
8
|
+
const status = screen.getByRole("status");
|
|
9
|
+
expect(status).toBeInTheDocument();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("Has loading text for screen readers", () => {
|
|
13
|
+
render(Spinner);
|
|
14
|
+
expect(screen.getByText("Loading...")).toBeInTheDocument();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("Loading text is sr-only", () => {
|
|
18
|
+
render(Spinner);
|
|
19
|
+
const loadingText = screen.getByText("Loading...");
|
|
20
|
+
expect(loadingText).toHaveClass("sr-only");
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test("Contains SVG element", () => {
|
|
24
|
+
const { container } = render(Spinner);
|
|
25
|
+
const svg = container.querySelector("svg");
|
|
26
|
+
expect(svg).toBeInTheDocument();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("SVG is hidden from accessibility tree", () => {
|
|
30
|
+
const { container } = render(Spinner);
|
|
31
|
+
const svg = container.querySelector("svg");
|
|
32
|
+
expect(svg).toHaveAttribute("aria-hidden", "true");
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("SVG has animation class", () => {
|
|
36
|
+
const { container } = render(Spinner);
|
|
37
|
+
const svg = container.querySelector("svg");
|
|
38
|
+
expect(svg).toHaveClass("animate-spin");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("Has flexbox centering classes", () => {
|
|
42
|
+
render(Spinner);
|
|
43
|
+
const status = screen.getByRole("status");
|
|
44
|
+
expect(status).toHaveClass("flex");
|
|
45
|
+
expect(status).toHaveClass("flex-col");
|
|
46
|
+
expect(status).toHaveClass("justify-center");
|
|
47
|
+
expect(status).toHaveClass("items-center");
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("Has correct height", () => {
|
|
51
|
+
render(Spinner);
|
|
52
|
+
const status = screen.getByRole("status");
|
|
53
|
+
expect(status).toHaveClass("h-10");
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test("SVG has correct dimensions", () => {
|
|
57
|
+
const { container } = render(Spinner);
|
|
58
|
+
const svg = container.querySelector("svg");
|
|
59
|
+
expect(svg).toHaveClass("w-8");
|
|
60
|
+
expect(svg).toHaveClass("h-8");
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test("Has dark mode text color classes", () => {
|
|
64
|
+
const { container } = render(Spinner);
|
|
65
|
+
const svg = container.querySelector("svg");
|
|
66
|
+
expect(svg).toHaveClass("text-gray-200");
|
|
67
|
+
expect(svg).toHaveClass("dark:text-gray-600");
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("Has blue fill color", () => {
|
|
71
|
+
const { container } = render(Spinner);
|
|
72
|
+
const svg = container.querySelector("svg");
|
|
73
|
+
expect(svg).toHaveClass("fill-blue-600");
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { render, screen } from '@testing-library/svelte';
|
|
3
|
-
import StatusIndicator from './StatusIndicator.svelte';
|
|
4
|
-
|
|
5
|
-
describe('StatusIndicator', () => {
|
|
6
|
-
describe('idle state', () => {
|
|
7
|
-
it('renders empty container when status is idle', () => {
|
|
8
|
-
const { container } = render(StatusIndicator, { status: 'idle' });
|
|
9
|
-
const indicator = container.querySelector('.status-indicator');
|
|
10
|
-
expect(indicator).toBeTruthy();
|
|
11
|
-
expect(indicator.children.length).toBe(0);
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('uses default status of idle', () => {
|
|
15
|
-
const { container } = render(StatusIndicator);
|
|
16
|
-
const indicator = container.querySelector('.status-indicator');
|
|
17
|
-
expect(indicator.children.length).toBe(0);
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
describe('loading state', () => {
|
|
22
|
-
it('renders spinner when status is loading', () => {
|
|
23
|
-
const { container } = render(StatusIndicator, { status: 'loading' });
|
|
24
|
-
const spinner = container.querySelector('.spinner');
|
|
25
|
-
expect(spinner).toBeTruthy();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('renders spinner SVG with track and head circles', () => {
|
|
29
|
-
const { container } = render(StatusIndicator, { status: 'loading' });
|
|
30
|
-
const spinner = container.querySelector('.spinner');
|
|
31
|
-
expect(spinner.querySelector('svg')).toBeTruthy();
|
|
32
|
-
expect(spinner.querySelector('.spinner-track')).toBeTruthy();
|
|
33
|
-
expect(spinner.querySelector('.spinner-head')).toBeTruthy();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('applies size to spinner', () => {
|
|
37
|
-
const { container } = render(StatusIndicator, { status: 'loading', size: 64 });
|
|
38
|
-
const spinner = container.querySelector('.spinner');
|
|
39
|
-
expect(spinner.style.width).toBe('64px');
|
|
40
|
-
expect(spinner.style.height).toBe('64px');
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
describe('success state', () => {
|
|
45
|
-
it('renders success circle when status is success', () => {
|
|
46
|
-
const { container } = render(StatusIndicator, { status: 'success' });
|
|
47
|
-
const success = container.querySelector('.success-circle');
|
|
48
|
-
expect(success).toBeTruthy();
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('renders success SVG with background and checkmark', () => {
|
|
52
|
-
const { container } = render(StatusIndicator, { status: 'success' });
|
|
53
|
-
const success = container.querySelector('.success-circle');
|
|
54
|
-
expect(success.querySelector('svg')).toBeTruthy();
|
|
55
|
-
expect(success.querySelector('.success-bg')).toBeTruthy();
|
|
56
|
-
expect(success.querySelector('.checkmark')).toBeTruthy();
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('applies size to success circle', () => {
|
|
60
|
-
const { container } = render(StatusIndicator, { status: 'success', size: 32 });
|
|
61
|
-
const success = container.querySelector('.success-circle');
|
|
62
|
-
expect(success.style.width).toBe('32px');
|
|
63
|
-
expect(success.style.height).toBe('32px');
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
describe('error state', () => {
|
|
68
|
-
it('renders error circle when status is error', () => {
|
|
69
|
-
const { container } = render(StatusIndicator, { status: 'error' });
|
|
70
|
-
const error = container.querySelector('.error-circle');
|
|
71
|
-
expect(error).toBeTruthy();
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('renders error SVG with background and X lines', () => {
|
|
75
|
-
const { container } = render(StatusIndicator, { status: 'error' });
|
|
76
|
-
const error = container.querySelector('.error-circle');
|
|
77
|
-
expect(error.querySelector('svg')).toBeTruthy();
|
|
78
|
-
expect(error.querySelector('.error-bg')).toBeTruthy();
|
|
79
|
-
const xLines = error.querySelectorAll('.error-x');
|
|
80
|
-
expect(xLines.length).toBe(2);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('applies size to error circle', () => {
|
|
84
|
-
const { container } = render(StatusIndicator, { status: 'error', size: 24 });
|
|
85
|
-
const error = container.querySelector('.error-circle');
|
|
86
|
-
expect(error.style.width).toBe('24px');
|
|
87
|
-
expect(error.style.height).toBe('24px');
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
describe('size prop', () => {
|
|
92
|
-
it('uses default size of 48px', () => {
|
|
93
|
-
const { container } = render(StatusIndicator, { status: 'loading' });
|
|
94
|
-
const indicator = container.querySelector('.status-indicator');
|
|
95
|
-
expect(indicator.style.width).toBe('48px');
|
|
96
|
-
expect(indicator.style.height).toBe('48px');
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it('accepts custom size', () => {
|
|
100
|
-
const { container } = render(StatusIndicator, { status: 'loading', size: 100 });
|
|
101
|
-
const indicator = container.querySelector('.status-indicator');
|
|
102
|
-
expect(indicator.style.width).toBe('100px');
|
|
103
|
-
expect(indicator.style.height).toBe('100px');
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
describe('state transitions', () => {
|
|
108
|
-
it('only renders one state at a time - loading', () => {
|
|
109
|
-
const { container } = render(StatusIndicator, { status: 'loading' });
|
|
110
|
-
expect(container.querySelector('.spinner')).toBeTruthy();
|
|
111
|
-
expect(container.querySelector('.success-circle')).toBeFalsy();
|
|
112
|
-
expect(container.querySelector('.error-circle')).toBeFalsy();
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it('only renders one state at a time - success', () => {
|
|
116
|
-
const { container } = render(StatusIndicator, { status: 'success' });
|
|
117
|
-
expect(container.querySelector('.spinner')).toBeFalsy();
|
|
118
|
-
expect(container.querySelector('.success-circle')).toBeTruthy();
|
|
119
|
-
expect(container.querySelector('.error-circle')).toBeFalsy();
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
it('only renders one state at a time - error', () => {
|
|
123
|
-
const { container } = render(StatusIndicator, { status: 'error' });
|
|
124
|
-
expect(container.querySelector('.spinner')).toBeFalsy();
|
|
125
|
-
expect(container.querySelector('.success-circle')).toBeFalsy();
|
|
126
|
-
expect(container.querySelector('.error-circle')).toBeTruthy();
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
});
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { render, screen } from '@testing-library/svelte';
|
|
3
|
+
import StatusIndicator from './StatusIndicator.svelte';
|
|
4
|
+
|
|
5
|
+
describe('StatusIndicator', () => {
|
|
6
|
+
describe('idle state', () => {
|
|
7
|
+
it('renders empty container when status is idle', () => {
|
|
8
|
+
const { container } = render(StatusIndicator, { status: 'idle' });
|
|
9
|
+
const indicator = container.querySelector('.status-indicator');
|
|
10
|
+
expect(indicator).toBeTruthy();
|
|
11
|
+
expect(indicator.children.length).toBe(0);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('uses default status of idle', () => {
|
|
15
|
+
const { container } = render(StatusIndicator);
|
|
16
|
+
const indicator = container.querySelector('.status-indicator');
|
|
17
|
+
expect(indicator.children.length).toBe(0);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
describe('loading state', () => {
|
|
22
|
+
it('renders spinner when status is loading', () => {
|
|
23
|
+
const { container } = render(StatusIndicator, { status: 'loading' });
|
|
24
|
+
const spinner = container.querySelector('.spinner');
|
|
25
|
+
expect(spinner).toBeTruthy();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('renders spinner SVG with track and head circles', () => {
|
|
29
|
+
const { container } = render(StatusIndicator, { status: 'loading' });
|
|
30
|
+
const spinner = container.querySelector('.spinner');
|
|
31
|
+
expect(spinner.querySelector('svg')).toBeTruthy();
|
|
32
|
+
expect(spinner.querySelector('.spinner-track')).toBeTruthy();
|
|
33
|
+
expect(spinner.querySelector('.spinner-head')).toBeTruthy();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('applies size to spinner', () => {
|
|
37
|
+
const { container } = render(StatusIndicator, { status: 'loading', size: 64 });
|
|
38
|
+
const spinner = container.querySelector('.spinner');
|
|
39
|
+
expect(spinner.style.width).toBe('64px');
|
|
40
|
+
expect(spinner.style.height).toBe('64px');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe('success state', () => {
|
|
45
|
+
it('renders success circle when status is success', () => {
|
|
46
|
+
const { container } = render(StatusIndicator, { status: 'success' });
|
|
47
|
+
const success = container.querySelector('.success-circle');
|
|
48
|
+
expect(success).toBeTruthy();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('renders success SVG with background and checkmark', () => {
|
|
52
|
+
const { container } = render(StatusIndicator, { status: 'success' });
|
|
53
|
+
const success = container.querySelector('.success-circle');
|
|
54
|
+
expect(success.querySelector('svg')).toBeTruthy();
|
|
55
|
+
expect(success.querySelector('.success-bg')).toBeTruthy();
|
|
56
|
+
expect(success.querySelector('.checkmark')).toBeTruthy();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('applies size to success circle', () => {
|
|
60
|
+
const { container } = render(StatusIndicator, { status: 'success', size: 32 });
|
|
61
|
+
const success = container.querySelector('.success-circle');
|
|
62
|
+
expect(success.style.width).toBe('32px');
|
|
63
|
+
expect(success.style.height).toBe('32px');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe('error state', () => {
|
|
68
|
+
it('renders error circle when status is error', () => {
|
|
69
|
+
const { container } = render(StatusIndicator, { status: 'error' });
|
|
70
|
+
const error = container.querySelector('.error-circle');
|
|
71
|
+
expect(error).toBeTruthy();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('renders error SVG with background and X lines', () => {
|
|
75
|
+
const { container } = render(StatusIndicator, { status: 'error' });
|
|
76
|
+
const error = container.querySelector('.error-circle');
|
|
77
|
+
expect(error.querySelector('svg')).toBeTruthy();
|
|
78
|
+
expect(error.querySelector('.error-bg')).toBeTruthy();
|
|
79
|
+
const xLines = error.querySelectorAll('.error-x');
|
|
80
|
+
expect(xLines.length).toBe(2);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('applies size to error circle', () => {
|
|
84
|
+
const { container } = render(StatusIndicator, { status: 'error', size: 24 });
|
|
85
|
+
const error = container.querySelector('.error-circle');
|
|
86
|
+
expect(error.style.width).toBe('24px');
|
|
87
|
+
expect(error.style.height).toBe('24px');
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
describe('size prop', () => {
|
|
92
|
+
it('uses default size of 48px', () => {
|
|
93
|
+
const { container } = render(StatusIndicator, { status: 'loading' });
|
|
94
|
+
const indicator = container.querySelector('.status-indicator');
|
|
95
|
+
expect(indicator.style.width).toBe('48px');
|
|
96
|
+
expect(indicator.style.height).toBe('48px');
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('accepts custom size', () => {
|
|
100
|
+
const { container } = render(StatusIndicator, { status: 'loading', size: 100 });
|
|
101
|
+
const indicator = container.querySelector('.status-indicator');
|
|
102
|
+
expect(indicator.style.width).toBe('100px');
|
|
103
|
+
expect(indicator.style.height).toBe('100px');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
describe('state transitions', () => {
|
|
108
|
+
it('only renders one state at a time - loading', () => {
|
|
109
|
+
const { container } = render(StatusIndicator, { status: 'loading' });
|
|
110
|
+
expect(container.querySelector('.spinner')).toBeTruthy();
|
|
111
|
+
expect(container.querySelector('.success-circle')).toBeFalsy();
|
|
112
|
+
expect(container.querySelector('.error-circle')).toBeFalsy();
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('only renders one state at a time - success', () => {
|
|
116
|
+
const { container } = render(StatusIndicator, { status: 'success' });
|
|
117
|
+
expect(container.querySelector('.spinner')).toBeFalsy();
|
|
118
|
+
expect(container.querySelector('.success-circle')).toBeTruthy();
|
|
119
|
+
expect(container.querySelector('.error-circle')).toBeFalsy();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('only renders one state at a time - error', () => {
|
|
123
|
+
const { container } = render(StatusIndicator, { status: 'error' });
|
|
124
|
+
expect(container.querySelector('.spinner')).toBeFalsy();
|
|
125
|
+
expect(container.querySelector('.success-circle')).toBeFalsy();
|
|
126
|
+
expect(container.querySelector('.error-circle')).toBeTruthy();
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script context="module">
|
|
2
2
|
import { Story } from "@storybook/addon-svelte-csf";
|
|
3
3
|
import { Toaster } from "svelte-sonner";
|
|
4
|
-
import { showToast } from "
|
|
4
|
+
import { showToast } from "../../stores/toaster";
|
|
5
5
|
|
|
6
6
|
export const meta = {
|
|
7
7
|
title: "Components/Toaster",
|