@getmicdrop/svelte-components 5.5.4 → 5.5.5
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/calendar/AboutShow/AboutShow.spec.d.ts +2 -0
- package/dist/calendar/AboutShow/AboutShow.spec.d.ts.map +1 -0
- package/dist/calendar/AboutShow/AboutShow.spec.js +791 -0
- package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts +2 -0
- package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts.map +1 -0
- package/dist/calendar/Calendar/MiniMonthCalendar.spec.js +1191 -0
- package/dist/calendar/FAQs/FAQs.spec.d.ts +2 -0
- package/dist/calendar/FAQs/FAQs.spec.d.ts.map +1 -0
- package/dist/calendar/FAQs/FAQs.spec.js +238 -0
- package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts +2 -0
- package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts.map +1 -0
- package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.js +420 -0
- package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts +2 -0
- package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts.map +1 -0
- package/dist/calendar/OrderSummary/OrderSummary.spec.js +808 -0
- package/dist/calendar/PublicCard/PublicCard.spec.d.ts +2 -0
- package/dist/calendar/PublicCard/PublicCard.spec.d.ts.map +1 -0
- package/dist/calendar/PublicCard/PublicCard.spec.js +301 -0
- package/dist/calendar/ShowCard/ShowCard.spec.d.ts +2 -0
- package/dist/calendar/ShowCard/ShowCard.spec.d.ts.map +1 -0
- package/dist/calendar/ShowCard/ShowCard.spec.js +714 -0
- package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts +2 -0
- package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts.map +1 -0
- package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.js +241 -0
- package/dist/components/Layout/Section.spec.d.ts +2 -0
- package/dist/components/Layout/Section.spec.d.ts.map +1 -0
- package/dist/components/Layout/Section.spec.js +149 -0
- package/dist/components/Layout/Sidebar.spec.d.ts +2 -0
- package/dist/components/Layout/Sidebar.spec.d.ts.map +1 -0
- package/dist/components/Layout/Sidebar.spec.js +186 -0
- package/dist/components/Layout/Stack.spec.js +3 -3
- package/dist/constants/formOptions.spec.js +9 -5
- package/dist/datetime/__tests__/format.test.js +1 -1
- package/dist/datetime/__tests__/parse.test.js +1 -1
- package/dist/datetime/__tests__/timezone.test.js +124 -2
- package/dist/datetime/parse.js +1 -1
- package/dist/forms/createFieldTracker.spec.d.ts +2 -0
- package/dist/forms/createFieldTracker.spec.d.ts.map +1 -0
- package/dist/forms/createFieldTracker.spec.js +343 -0
- package/dist/forms/createFormStore.spec.d.ts +2 -0
- package/dist/forms/createFormStore.spec.d.ts.map +1 -0
- package/dist/forms/createFormStore.spec.js +689 -0
- package/dist/forms/createFormStore.svelte.js +0 -1
- package/dist/index.d.ts +4 -112
- package/dist/index.js +4 -190
- package/dist/patterns/data/DataGrid.spec.d.ts +2 -0
- package/dist/patterns/data/DataGrid.spec.d.ts.map +1 -0
- package/dist/patterns/data/DataGrid.spec.js +159 -0
- package/dist/patterns/data/DataList.spec.d.ts +2 -0
- package/dist/patterns/data/DataList.spec.d.ts.map +1 -0
- package/dist/patterns/data/DataList.spec.js +158 -0
- package/dist/patterns/data/DataTable.spec.d.ts +2 -0
- package/dist/patterns/data/DataTable.spec.d.ts.map +1 -0
- package/dist/patterns/data/DataTable.spec.js +196 -0
- package/dist/patterns/forms/FormActions.spec.js +10 -3
- package/dist/patterns/forms/FormGrid.spec.d.ts +2 -0
- package/dist/patterns/forms/FormGrid.spec.d.ts.map +1 -0
- package/dist/patterns/forms/FormGrid.spec.js +125 -0
- package/dist/patterns/forms/FormSection.spec.d.ts +2 -0
- package/dist/patterns/forms/FormSection.spec.d.ts.map +1 -0
- package/dist/patterns/forms/FormSection.spec.js +153 -0
- package/dist/patterns/layout/Sidebar.spec.d.ts +2 -0
- package/dist/patterns/layout/Sidebar.spec.d.ts.map +1 -0
- package/dist/patterns/layout/Sidebar.spec.js +159 -0
- package/dist/patterns/navigation/BottomNav.svelte +4 -4
- package/dist/patterns/navigation/Header.spec.js +33 -24
- package/dist/patterns/page/PageHeader.spec.d.ts +2 -0
- package/dist/patterns/page/PageHeader.spec.d.ts.map +1 -0
- package/dist/patterns/page/PageHeader.spec.js +167 -0
- package/dist/patterns/page/PageLayout.spec.d.ts +2 -0
- package/dist/patterns/page/PageLayout.spec.d.ts.map +1 -0
- package/dist/patterns/page/PageLayout.spec.js +145 -0
- package/dist/patterns/page/PageLoader.spec.js +5 -2
- package/dist/patterns/page/SectionHeader.spec.d.ts +2 -0
- package/dist/patterns/page/SectionHeader.spec.d.ts.map +1 -0
- package/dist/patterns/page/SectionHeader.spec.js +197 -0
- package/dist/presets/badges.spec.d.ts +2 -0
- package/dist/presets/badges.spec.d.ts.map +1 -0
- package/dist/presets/badges.spec.js +172 -0
- package/dist/presets/buttons.spec.d.ts +2 -0
- package/dist/presets/buttons.spec.d.ts.map +1 -0
- package/dist/presets/buttons.spec.js +135 -0
- package/dist/primitives/Accordion/Accordion.spec.d.ts +2 -0
- package/dist/primitives/Accordion/Accordion.spec.d.ts.map +1 -0
- package/dist/primitives/Accordion/Accordion.spec.js +83 -0
- package/dist/primitives/Accordion/AccordionItem.spec.d.ts +2 -0
- package/dist/primitives/Accordion/AccordionItem.spec.d.ts.map +1 -0
- package/dist/primitives/Accordion/AccordionItem.spec.js +661 -0
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -0
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts +35 -0
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts.map +1 -0
- package/dist/primitives/Alert/Alert.spec.js +5 -2
- package/dist/primitives/Avatar/Avatar.spec.d.ts +2 -0
- package/dist/primitives/Avatar/Avatar.spec.d.ts.map +1 -0
- package/dist/primitives/Avatar/Avatar.spec.js +211 -0
- package/dist/primitives/Badges/Badge.spec.js +109 -68
- package/dist/primitives/BottomSheet/BottomSheet.spec.js +36 -27
- package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte +13 -0
- package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts +7 -0
- package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts.map +1 -0
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +15 -13
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +5 -5
- package/dist/primitives/Button/Button.spec.js +83 -71
- package/dist/primitives/Button/ButtonSaveDemo.spec.js +100 -2
- package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts +2 -0
- package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts.map +1 -0
- package/dist/primitives/Button/ButtonVariantShowcase.spec.js +202 -0
- package/dist/primitives/Card.spec.js +1 -1
- package/dist/primitives/Checkbox/Checkbox.spec.d.ts +2 -0
- package/dist/primitives/Checkbox/Checkbox.spec.d.ts.map +1 -0
- package/dist/primitives/Checkbox/Checkbox.spec.js +252 -0
- package/dist/primitives/DarkModeToggle.spec.js +84 -51
- package/dist/primitives/Drawer/Drawer.spec.d.ts +2 -0
- package/dist/primitives/Drawer/Drawer.spec.d.ts.map +1 -0
- package/dist/primitives/Drawer/Drawer.spec.js +212 -0
- package/dist/primitives/Dropdown/Dropdown.spec.d.ts +2 -0
- package/dist/primitives/Dropdown/Dropdown.spec.d.ts.map +1 -0
- package/dist/primitives/Dropdown/Dropdown.spec.js +366 -0
- package/dist/primitives/Dropdown/DropdownItem.spec.d.ts +2 -0
- package/dist/primitives/Dropdown/DropdownItem.spec.d.ts.map +1 -0
- package/dist/primitives/Dropdown/DropdownItem.spec.js +182 -0
- package/dist/primitives/Icons/iconTestUtils.spec.d.ts +2 -0
- package/dist/primitives/Icons/iconTestUtils.spec.d.ts.map +1 -0
- package/dist/primitives/Icons/iconTestUtils.spec.js +235 -0
- package/dist/primitives/Input/Input.spec.js +14 -14
- package/dist/primitives/Input/Input.svelte +1 -14
- package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
- package/dist/primitives/Input/Select.spec.js +11 -17
- package/dist/primitives/Input/Textarea.spec.d.ts +2 -0
- package/dist/primitives/Input/Textarea.spec.d.ts.map +1 -0
- package/dist/primitives/Input/Textarea.spec.js +255 -0
- package/dist/primitives/Label/Label.spec.d.ts +2 -0
- package/dist/primitives/Label/Label.spec.d.ts.map +1 -0
- package/dist/primitives/Label/Label.spec.js +157 -0
- package/dist/primitives/Modal/Modal.spec.js +29 -25
- package/dist/primitives/Modal/ModalTestWrapper.svelte +65 -0
- package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts +23 -0
- package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts.map +1 -0
- package/dist/primitives/NumberInput/NumberInput.spec.d.ts +2 -0
- package/dist/primitives/NumberInput/NumberInput.spec.d.ts.map +1 -0
- package/dist/primitives/NumberInput/NumberInput.spec.js +235 -0
- package/dist/primitives/Pagination/Pagination.spec.d.ts +2 -0
- package/dist/primitives/Pagination/Pagination.spec.d.ts.map +1 -0
- package/dist/primitives/Pagination/Pagination.spec.js +266 -0
- package/dist/primitives/Radio/Radio.spec.d.ts +2 -0
- package/dist/primitives/Radio/Radio.spec.d.ts.map +1 -0
- package/dist/primitives/Radio/Radio.spec.js +206 -0
- package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts +2 -0
- package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts.map +1 -0
- package/dist/primitives/Skeleton/CardPlaceholder.spec.js +156 -0
- package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts +2 -0
- package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts.map +1 -0
- package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +120 -0
- package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts +2 -0
- package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts.map +1 -0
- package/dist/primitives/Skeleton/ListPlaceholder.spec.js +220 -0
- package/dist/primitives/Skeleton/Skeleton.spec.d.ts +2 -0
- package/dist/primitives/Skeleton/Skeleton.spec.d.ts.map +1 -0
- package/dist/primitives/Skeleton/Skeleton.spec.js +173 -0
- package/dist/primitives/Spinner/Spinner.spec.js +25 -29
- package/dist/primitives/Tabs/TabItem.spec.d.ts +2 -0
- package/dist/primitives/Tabs/TabItem.spec.d.ts.map +1 -0
- package/dist/primitives/Tabs/TabItem.spec.js +130 -0
- package/dist/primitives/Tabs/Tabs.spec.d.ts +2 -0
- package/dist/primitives/Tabs/Tabs.spec.d.ts.map +1 -0
- package/dist/primitives/Tabs/Tabs.spec.js +295 -0
- package/dist/primitives/Tabs/TabsWithItems.test.svelte +18 -0
- package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts +16 -0
- package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts.map +1 -0
- package/dist/primitives/Toggle.spec.js +93 -77
- package/dist/primitives/Typography/Typography.spec.d.ts +2 -0
- package/dist/primitives/Typography/Typography.spec.d.ts.map +1 -0
- package/dist/primitives/Typography/Typography.spec.js +183 -0
- package/dist/primitives/ValidationError.spec.js +1 -1
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.js +3 -0
- package/dist/recipes/CropImage/CropImage.spec.js +1 -9
- package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts +2 -0
- package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts.map +1 -0
- package/dist/recipes/ImageUploader/ImageUploader.spec.js +1351 -0
- package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts +2 -0
- package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts.map +1 -0
- package/dist/recipes/SuperLogin/SuperLogin.spec.js +1436 -0
- package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts +2 -0
- package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts.map +1 -0
- package/dist/recipes/feedback/EmptyState/EmptyState.spec.js +202 -0
- package/dist/recipes/feedback/ErrorDisplay.spec.js +6 -6
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +21 -17
- package/dist/recipes/fields/CheckboxField.spec.d.ts +2 -0
- package/dist/recipes/fields/CheckboxField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/CheckboxField.spec.js +135 -0
- package/dist/recipes/fields/FormField.spec.d.ts +2 -0
- package/dist/recipes/fields/FormField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/FormField.spec.js +159 -0
- package/dist/recipes/fields/RadioGroup.spec.d.ts +2 -0
- package/dist/recipes/fields/RadioGroup.spec.d.ts.map +1 -0
- package/dist/recipes/fields/RadioGroup.spec.js +199 -0
- package/dist/recipes/fields/SelectField.spec.d.ts +2 -0
- package/dist/recipes/fields/SelectField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/SelectField.spec.js +188 -0
- package/dist/recipes/fields/TextareaField.spec.d.ts +2 -0
- package/dist/recipes/fields/TextareaField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/TextareaField.spec.js +205 -0
- package/dist/recipes/fields/ToggleField.spec.d.ts +2 -0
- package/dist/recipes/fields/ToggleField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/ToggleField.spec.js +153 -0
- package/dist/recipes/inputs/MultiSelect.spec.js +4 -3
- package/dist/recipes/inputs/MultiSelect.svelte +10 -3
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts +2 -0
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/OTPInput.spec.js +52 -39
- package/dist/recipes/inputs/PasswordInput.spec.d.ts +2 -0
- package/dist/recipes/inputs/PasswordInput.spec.d.ts.map +1 -0
- package/dist/recipes/inputs/PasswordInput.spec.js +410 -0
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +253 -173
- package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +71 -0
- package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts +9 -0
- package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts.map +1 -0
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +1246 -300
- package/dist/recipes/inputs/Search.spec.d.ts +2 -0
- package/dist/recipes/inputs/Search.spec.d.ts.map +1 -0
- package/dist/recipes/inputs/Search.spec.js +177 -0
- package/dist/recipes/inputs/SelectDropdown.spec.d.ts +2 -0
- package/dist/recipes/inputs/SelectDropdown.spec.d.ts.map +1 -0
- package/dist/recipes/inputs/SelectDropdown.spec.js +512 -0
- package/dist/recipes/modals/AlertModal.spec.d.ts +2 -0
- package/dist/recipes/modals/AlertModal.spec.d.ts.map +1 -0
- package/dist/recipes/modals/AlertModal.spec.js +432 -0
- package/dist/recipes/modals/ConfirmationModal.spec.js +36 -21
- package/dist/recipes/modals/InputModal.spec.d.ts +2 -0
- package/dist/recipes/modals/InputModal.spec.d.ts.map +1 -0
- package/dist/recipes/modals/InputModal.spec.js +872 -0
- package/dist/recipes/modals/ModalTestWrapper.spec.d.ts +2 -0
- package/dist/recipes/modals/ModalTestWrapper.spec.d.ts.map +1 -0
- package/dist/recipes/modals/ModalTestWrapper.spec.js +502 -0
- package/dist/recipes/modals/StatusModal.spec.d.ts +2 -0
- package/dist/recipes/modals/StatusModal.spec.d.ts.map +1 -0
- package/dist/recipes/modals/StatusModal.spec.js +599 -0
- package/dist/services/ShowService.spec.js +18 -15
- package/dist/stories/ButtonAuditDashboard.spec.d.ts +2 -0
- package/dist/stories/ButtonAuditDashboard.spec.d.ts.map +1 -0
- package/dist/stories/ButtonAuditDashboard.spec.js +913 -0
- package/dist/stories/ButtonAuditReview.spec.d.ts +2 -0
- package/dist/stories/ButtonAuditReview.spec.d.ts.map +1 -0
- package/dist/stories/ButtonAuditReview.spec.js +422 -0
- package/dist/stories/ButtonGridView.spec.d.ts +2 -0
- package/dist/stories/ButtonGridView.spec.d.ts.map +1 -0
- package/dist/stories/ButtonGridView.spec.js +667 -0
- package/dist/stories/ButtonShowcase.spec.d.ts +2 -0
- package/dist/stories/ButtonShowcase.spec.d.ts.map +1 -0
- package/dist/stories/ButtonShowcase.spec.js +499 -0
- package/dist/stories/PatternsGallery.spec.d.ts +2 -0
- package/dist/stories/PatternsGallery.spec.d.ts.map +1 -0
- package/dist/stories/PatternsGallery.spec.js +514 -0
- package/dist/stories/PrimitivesGallery.spec.d.ts +2 -0
- package/dist/stories/PrimitivesGallery.spec.d.ts.map +1 -0
- package/dist/stories/PrimitivesGallery.spec.js +813 -0
- package/dist/stories/RecipesGallery.spec.d.ts +2 -0
- package/dist/stories/RecipesGallery.spec.d.ts.map +1 -0
- package/dist/stories/RecipesGallery.spec.js +299 -0
- package/dist/stripe/useStripeTheme.spec.d.ts +2 -0
- package/dist/stripe/useStripeTheme.spec.d.ts.map +1 -0
- package/dist/stripe/useStripeTheme.spec.js +793 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +6 -5
- package/dist/telemetry.spec.js +495 -12
- package/dist/tokens/__tests__/colors.test.d.ts +2 -0
- package/dist/tokens/__tests__/colors.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/colors.test.js +152 -0
- package/dist/tokens/__tests__/radius.test.d.ts +2 -0
- package/dist/tokens/__tests__/radius.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/radius.test.js +118 -0
- package/dist/tokens/__tests__/shadows.test.d.ts +2 -0
- package/dist/tokens/__tests__/shadows.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/shadows.test.js +105 -0
- package/dist/tokens/__tests__/spacing.test.js +11 -8
- package/dist/tokens/__tests__/typography.test.d.ts +2 -0
- package/dist/tokens/__tests__/typography.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/typography.test.js +156 -0
- package/dist/tokens/__tests__/z-index.test.d.ts +2 -0
- package/dist/tokens/__tests__/z-index.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/z-index.test.js +121 -0
- package/dist/utils/apiConfig.spec.js +102 -1
- package/dist/utils/formatters.spec.d.ts +2 -0
- package/dist/utils/formatters.spec.d.ts.map +1 -0
- package/dist/utils/formatters.spec.js +82 -0
- package/dist/utils/transitions.spec.d.ts +2 -0
- package/dist/utils/transitions.spec.d.ts.map +1 -0
- package/dist/utils/transitions.spec.js +130 -0
- package/package.json +8 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlertModal.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/modals/AlertModal.spec.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { render, screen, waitFor } from "@testing-library/svelte";
|
|
2
|
+
import userEvent from "@testing-library/user-event";
|
|
3
|
+
import { expect, describe, test, vi, beforeEach, afterEach } from "vitest";
|
|
4
|
+
import AlertModal from "./AlertModal.svelte";
|
|
5
|
+
|
|
6
|
+
function setupTest(args = {}) {
|
|
7
|
+
const user = userEvent.setup();
|
|
8
|
+
const { component } = render(AlertModal, {
|
|
9
|
+
props: {
|
|
10
|
+
show: true,
|
|
11
|
+
title: "Test Alert",
|
|
12
|
+
message: "This is a test message",
|
|
13
|
+
...args,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
return { user, component };
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe("AlertModal Component Tests", () => {
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
vi.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Note: Modal renders both mobile sheet and desktop centered versions
|
|
25
|
+
// CSS hides one based on viewport, but in tests both are in DOM
|
|
26
|
+
// Use getAllByText/queryAllByText and check length or first element
|
|
27
|
+
|
|
28
|
+
test("Does not render when show is false", () => {
|
|
29
|
+
render(AlertModal, { props: { show: false } });
|
|
30
|
+
expect(screen.queryByText("Test Alert")).not.toBeInTheDocument();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("Renders when show is true", () => {
|
|
34
|
+
setupTest();
|
|
35
|
+
// Modal renders both mobile and desktop versions
|
|
36
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("Displays title", () => {
|
|
40
|
+
setupTest({ title: "Success!" });
|
|
41
|
+
expect(screen.getAllByText("Success!").length).toBeGreaterThan(0);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test("Displays message", () => {
|
|
45
|
+
setupTest({ message: "Operation completed successfully" });
|
|
46
|
+
expect(
|
|
47
|
+
screen.getAllByText("Operation completed successfully").length
|
|
48
|
+
).toBeGreaterThan(0);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("Hides title when not provided", () => {
|
|
52
|
+
setupTest({ title: "" });
|
|
53
|
+
const headings = screen.queryAllByRole("heading", { level: 2 });
|
|
54
|
+
expect(headings.length).toBe(0);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("Hides message when not provided", () => {
|
|
58
|
+
setupTest({ message: "" });
|
|
59
|
+
// When message is empty, there should be no paragraph with message content
|
|
60
|
+
const paragraphs = document.querySelectorAll("p");
|
|
61
|
+
expect(paragraphs.length).toBe(0);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
test("Displays custom button text", () => {
|
|
65
|
+
setupTest({ buttonText: "Got it" });
|
|
66
|
+
expect(screen.getAllByText("Got it").length).toBeGreaterThan(0);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test("Displays default button text", () => {
|
|
70
|
+
setupTest();
|
|
71
|
+
expect(screen.getAllByText("OK").length).toBeGreaterThan(0);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test("Calls onconfirm when button is clicked", async () => {
|
|
75
|
+
const onconfirm = vi.fn();
|
|
76
|
+
const { user } = setupTest({ onconfirm, autoClose: 0 });
|
|
77
|
+
|
|
78
|
+
const button = screen.getAllByText("OK")[0];
|
|
79
|
+
await user.click(button);
|
|
80
|
+
|
|
81
|
+
await waitFor(() => {
|
|
82
|
+
expect(onconfirm).toHaveBeenCalledOnce();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test("Calls onclose when button is clicked", async () => {
|
|
87
|
+
const onclose = vi.fn();
|
|
88
|
+
const { user } = setupTest({ onclose, autoClose: 0 });
|
|
89
|
+
|
|
90
|
+
const button = screen.getAllByText("OK")[0];
|
|
91
|
+
await user.click(button);
|
|
92
|
+
|
|
93
|
+
await waitFor(() => {
|
|
94
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test("Calls both onconfirm and onclose when button is clicked", async () => {
|
|
99
|
+
const onconfirm = vi.fn();
|
|
100
|
+
const onclose = vi.fn();
|
|
101
|
+
const { user } = setupTest({ onconfirm, onclose, autoClose: 0 });
|
|
102
|
+
|
|
103
|
+
const button = screen.getAllByText("OK")[0];
|
|
104
|
+
await user.click(button);
|
|
105
|
+
|
|
106
|
+
await waitFor(() => {
|
|
107
|
+
expect(onconfirm).toHaveBeenCalledOnce();
|
|
108
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test("Closes modal when button is clicked", async () => {
|
|
113
|
+
const onclose = vi.fn();
|
|
114
|
+
const { user } = setupTest({ autoClose: 0, onclose });
|
|
115
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
116
|
+
|
|
117
|
+
const button = screen.getAllByText("OK")[0];
|
|
118
|
+
await user.click(button);
|
|
119
|
+
|
|
120
|
+
// Verify close was called (actual DOM removal is tested in Modal component)
|
|
121
|
+
await waitFor(() => {
|
|
122
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// Variant tests - Success
|
|
127
|
+
test("Renders success variant with correct icon", () => {
|
|
128
|
+
setupTest({ variant: "success" });
|
|
129
|
+
// CheckOutline icon should be present
|
|
130
|
+
const iconContainer = document.querySelector(".bg-green-100");
|
|
131
|
+
expect(iconContainer).toBeInTheDocument();
|
|
132
|
+
const icon = iconContainer?.querySelector(".text-green-600");
|
|
133
|
+
expect(icon).toBeInTheDocument();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test("Success variant has green styling", () => {
|
|
137
|
+
setupTest({ variant: "success" });
|
|
138
|
+
const iconContainer = document.querySelector(".bg-green-100");
|
|
139
|
+
expect(iconContainer).toHaveClass("bg-green-100");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test("Success variant button uses default variant", () => {
|
|
143
|
+
setupTest({ variant: "success" });
|
|
144
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
145
|
+
// Default variant has primary/blue styling
|
|
146
|
+
expect(button).toHaveClass("bg-blue-700");
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// Variant tests - Error
|
|
150
|
+
test("Renders error variant with correct icon", () => {
|
|
151
|
+
setupTest({ variant: "error" });
|
|
152
|
+
// CloseOutline icon should be present
|
|
153
|
+
const iconContainer = document.querySelector(".bg-red-100");
|
|
154
|
+
expect(iconContainer).toBeInTheDocument();
|
|
155
|
+
const icon = iconContainer?.querySelector(".text-red-600");
|
|
156
|
+
expect(icon).toBeInTheDocument();
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
test("Error variant has red styling", () => {
|
|
160
|
+
setupTest({ variant: "error" });
|
|
161
|
+
const iconContainer = document.querySelector(".bg-red-100");
|
|
162
|
+
expect(iconContainer).toHaveClass("bg-red-100");
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
test("Error variant button uses red variant", () => {
|
|
166
|
+
setupTest({ variant: "error" });
|
|
167
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
168
|
+
// Red variant has red styling
|
|
169
|
+
expect(button).toHaveClass("bg-red-700");
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Variant tests - Warning
|
|
173
|
+
test("Renders warning variant with correct icon", () => {
|
|
174
|
+
setupTest({ variant: "warning" });
|
|
175
|
+
// ExclamationTriangleOutline icon should be present
|
|
176
|
+
const iconContainer = document.querySelector(".bg-amber-100");
|
|
177
|
+
expect(iconContainer).toBeInTheDocument();
|
|
178
|
+
const icon = iconContainer?.querySelector(".text-amber-600");
|
|
179
|
+
expect(icon).toBeInTheDocument();
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
test("Warning variant has amber styling", () => {
|
|
183
|
+
setupTest({ variant: "warning" });
|
|
184
|
+
const iconContainer = document.querySelector(".bg-amber-100");
|
|
185
|
+
expect(iconContainer).toHaveClass("bg-amber-100");
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
test("Warning variant button uses default variant", () => {
|
|
189
|
+
setupTest({ variant: "warning" });
|
|
190
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
191
|
+
// Default variant has primary/blue styling
|
|
192
|
+
expect(button).toHaveClass("bg-blue-700");
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
// Variant tests - Info
|
|
196
|
+
test("Renders info variant with correct icon", () => {
|
|
197
|
+
setupTest({ variant: "info" });
|
|
198
|
+
// InfoCircleOutline icon should be present
|
|
199
|
+
const iconContainer = document.querySelector(".bg-blue-100");
|
|
200
|
+
expect(iconContainer).toBeInTheDocument();
|
|
201
|
+
const icon = iconContainer?.querySelector(".text-blue-600");
|
|
202
|
+
expect(icon).toBeInTheDocument();
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test("Info variant has blue styling", () => {
|
|
206
|
+
setupTest({ variant: "info" });
|
|
207
|
+
const iconContainer = document.querySelector(".bg-blue-100");
|
|
208
|
+
expect(iconContainer).toHaveClass("bg-blue-100");
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
test("Info variant button uses default variant", () => {
|
|
212
|
+
setupTest({ variant: "info" });
|
|
213
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
214
|
+
// Default variant has primary/blue styling
|
|
215
|
+
expect(button).toHaveClass("bg-blue-700");
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
test("Defaults to info variant when invalid variant provided", () => {
|
|
219
|
+
setupTest({ variant: "invalid" });
|
|
220
|
+
// Should fall back to info variant
|
|
221
|
+
const iconContainer = document.querySelector(".bg-blue-100");
|
|
222
|
+
expect(iconContainer).toBeInTheDocument();
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
// Auto-close tests
|
|
226
|
+
test("Does not auto-close when autoClose is 0", async () => {
|
|
227
|
+
vi.useFakeTimers();
|
|
228
|
+
try {
|
|
229
|
+
setupTest({ autoClose: 0 });
|
|
230
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
231
|
+
|
|
232
|
+
// Advance time significantly
|
|
233
|
+
await vi.advanceTimersByTimeAsync(5000);
|
|
234
|
+
|
|
235
|
+
// Modal should still be visible
|
|
236
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
237
|
+
} finally {
|
|
238
|
+
vi.useRealTimers();
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
test("Auto-closes after specified delay", async () => {
|
|
243
|
+
vi.useFakeTimers();
|
|
244
|
+
try {
|
|
245
|
+
const onclose = vi.fn();
|
|
246
|
+
setupTest({ autoClose: 3000, onclose });
|
|
247
|
+
|
|
248
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
249
|
+
|
|
250
|
+
// Advance time by the auto-close delay
|
|
251
|
+
await vi.advanceTimersByTimeAsync(3000);
|
|
252
|
+
|
|
253
|
+
// Wait for onclose to be called
|
|
254
|
+
await waitFor(() => {
|
|
255
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
256
|
+
});
|
|
257
|
+
} finally {
|
|
258
|
+
vi.useRealTimers();
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
test("Auto-close timer is cleared when modal closes manually", async () => {
|
|
263
|
+
// This test verifies that manually closing the modal clears the auto-close timer
|
|
264
|
+
// We test this by ensuring the close callback is only called once, not twice
|
|
265
|
+
const onclose = vi.fn();
|
|
266
|
+
const { user } = setupTest({ autoClose: 10000, onclose });
|
|
267
|
+
|
|
268
|
+
// Click button immediately to close before auto-close triggers
|
|
269
|
+
const button = screen.getAllByText("OK")[0];
|
|
270
|
+
await user.click(button);
|
|
271
|
+
|
|
272
|
+
await waitFor(() => {
|
|
273
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
// If timer wasn't cleared, it would call onclose again after 10 seconds
|
|
277
|
+
// Since we can't easily test this with real timers in a fast test,
|
|
278
|
+
// we verify the timer cleanup exists in the component (lines 84-85)
|
|
279
|
+
// and that onclose was only called once
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
// Size prop test
|
|
283
|
+
test("Passes size prop to Modal", () => {
|
|
284
|
+
setupTest({ size: "medium" });
|
|
285
|
+
// Modal component receives the size prop
|
|
286
|
+
// We can't easily test this without mocking Modal, but we can verify it doesn't error
|
|
287
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
test("Uses default small size", () => {
|
|
291
|
+
setupTest();
|
|
292
|
+
// Default size is small
|
|
293
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
// Layout and styling tests
|
|
297
|
+
test("Icon container is centered", () => {
|
|
298
|
+
setupTest();
|
|
299
|
+
const iconWrapper = document.querySelector(".flex.justify-center.items-center");
|
|
300
|
+
expect(iconWrapper).toBeInTheDocument();
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
test("Icon container has proper dimensions", () => {
|
|
304
|
+
setupTest();
|
|
305
|
+
const iconContainer = document.querySelector(".w-14.h-14.rounded-full");
|
|
306
|
+
expect(iconContainer).toBeInTheDocument();
|
|
307
|
+
expect(iconContainer).toHaveClass("w-14");
|
|
308
|
+
expect(iconContainer).toHaveClass("h-14");
|
|
309
|
+
expect(iconContainer).toHaveClass("rounded-full");
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
test("Title has proper styling", () => {
|
|
313
|
+
setupTest({ title: "Alert Title" });
|
|
314
|
+
const title = screen.getAllByText("Alert Title")[0];
|
|
315
|
+
expect(title.tagName).toBe("H2");
|
|
316
|
+
expect(title).toHaveClass("mt-4");
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
test("Message has proper styling", () => {
|
|
320
|
+
setupTest({ message: "Alert message" });
|
|
321
|
+
const message = screen.getAllByText("Alert message")[0];
|
|
322
|
+
expect(message.tagName).toBe("P");
|
|
323
|
+
expect(message).toHaveClass("leading-relaxed");
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
test("Button has full width", () => {
|
|
327
|
+
setupTest();
|
|
328
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
329
|
+
// Button should be in a container with w-full
|
|
330
|
+
const buttonContainer = button?.parentElement;
|
|
331
|
+
expect(buttonContainer).toHaveClass("w-full");
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
test("Content is centered", () => {
|
|
335
|
+
setupTest();
|
|
336
|
+
const header = document.querySelector(".text-center");
|
|
337
|
+
expect(header).toBeInTheDocument();
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
// Dark mode styling tests
|
|
341
|
+
test("Success variant has dark mode classes", () => {
|
|
342
|
+
setupTest({ variant: "success" });
|
|
343
|
+
const iconContainer = document.querySelector(".bg-green-100");
|
|
344
|
+
expect(iconContainer).toHaveClass("dark:bg-green-900/30");
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
test("Error variant has dark mode classes", () => {
|
|
348
|
+
setupTest({ variant: "error" });
|
|
349
|
+
const iconContainer = document.querySelector(".bg-red-100");
|
|
350
|
+
expect(iconContainer).toHaveClass("dark:bg-red-900/30");
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
test("Warning variant has dark mode classes", () => {
|
|
354
|
+
setupTest({ variant: "warning" });
|
|
355
|
+
const iconContainer = document.querySelector(".bg-amber-100");
|
|
356
|
+
expect(iconContainer).toHaveClass("dark:bg-amber-900/30");
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
test("Info variant has dark mode classes", () => {
|
|
360
|
+
setupTest({ variant: "info" });
|
|
361
|
+
const iconContainer = document.querySelector(".bg-blue-100");
|
|
362
|
+
expect(iconContainer).toHaveClass("dark:bg-blue-900/30");
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
// Integration tests
|
|
366
|
+
test("Full success flow", async () => {
|
|
367
|
+
const onconfirm = vi.fn();
|
|
368
|
+
const onclose = vi.fn();
|
|
369
|
+
const { user } = setupTest({
|
|
370
|
+
variant: "success",
|
|
371
|
+
title: "Success!",
|
|
372
|
+
message: "Your changes have been saved.",
|
|
373
|
+
buttonText: "Great",
|
|
374
|
+
onconfirm,
|
|
375
|
+
onclose,
|
|
376
|
+
autoClose: 0,
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
// Verify content
|
|
380
|
+
expect(screen.getAllByText("Success!").length).toBeGreaterThan(0);
|
|
381
|
+
expect(
|
|
382
|
+
screen.getAllByText("Your changes have been saved.").length
|
|
383
|
+
).toBeGreaterThan(0);
|
|
384
|
+
expect(screen.getAllByText("Great").length).toBeGreaterThan(0);
|
|
385
|
+
|
|
386
|
+
// Verify success styling
|
|
387
|
+
expect(document.querySelector(".bg-green-100")).toBeInTheDocument();
|
|
388
|
+
|
|
389
|
+
// Click button
|
|
390
|
+
const button = screen.getAllByText("Great")[0];
|
|
391
|
+
await user.click(button);
|
|
392
|
+
|
|
393
|
+
// Verify callbacks were called
|
|
394
|
+
await waitFor(() => {
|
|
395
|
+
expect(onconfirm).toHaveBeenCalledOnce();
|
|
396
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
test("Full error flow with auto-close", async () => {
|
|
401
|
+
vi.useFakeTimers();
|
|
402
|
+
try {
|
|
403
|
+
const onclose = vi.fn();
|
|
404
|
+
setupTest({
|
|
405
|
+
variant: "error",
|
|
406
|
+
title: "Error",
|
|
407
|
+
message: "Something went wrong.",
|
|
408
|
+
autoClose: 2000,
|
|
409
|
+
onclose,
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
// Verify content
|
|
413
|
+
expect(screen.getAllByText("Error").length).toBeGreaterThan(0);
|
|
414
|
+
expect(
|
|
415
|
+
screen.getAllByText("Something went wrong.").length
|
|
416
|
+
).toBeGreaterThan(0);
|
|
417
|
+
|
|
418
|
+
// Verify error styling
|
|
419
|
+
expect(document.querySelector(".bg-red-100")).toBeInTheDocument();
|
|
420
|
+
|
|
421
|
+
// Advance time to trigger auto-close
|
|
422
|
+
await vi.advanceTimersByTimeAsync(2000);
|
|
423
|
+
|
|
424
|
+
// Verify onclose was called
|
|
425
|
+
await vi.waitFor(() => {
|
|
426
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
427
|
+
});
|
|
428
|
+
} finally {
|
|
429
|
+
vi.useRealTimers();
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
});
|
|
@@ -88,48 +88,49 @@ describe("ConfirmationModal Component Tests", () => {
|
|
|
88
88
|
expect(confirmFn).toHaveBeenCalled();
|
|
89
89
|
});
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
// Note: Svelte 5 removed $on - component no longer dispatches custom events
|
|
92
|
+
// The component calls action.onClick directly, which we test above
|
|
93
|
+
test("Clicking action calls onClick handler", async () => {
|
|
92
94
|
const confirmFn = vi.fn();
|
|
93
95
|
const actions = [{ label: "Delete", onClick: confirmFn }];
|
|
94
|
-
const { user
|
|
95
|
-
|
|
96
|
-
const deleteSpy = vi.fn();
|
|
97
|
-
component.$on("delete", deleteSpy);
|
|
96
|
+
const { user } = setupTest({ actions });
|
|
98
97
|
|
|
99
98
|
await user.click(screen.getAllByText("Delete")[0]);
|
|
100
|
-
expect(
|
|
99
|
+
expect(confirmFn).toHaveBeenCalled();
|
|
101
100
|
});
|
|
102
101
|
|
|
103
102
|
test("Shows close button when closeBtn is true", () => {
|
|
104
103
|
setupTest({ closeBtn: true });
|
|
105
|
-
const closeImg = document.querySelector('img[alt="Close
|
|
104
|
+
const closeImg = document.querySelector('img[alt="Close"]');
|
|
106
105
|
expect(closeImg).toBeInTheDocument();
|
|
107
106
|
});
|
|
108
107
|
|
|
109
108
|
test("Does not show close button by default", () => {
|
|
110
109
|
setupTest({ closeBtn: false });
|
|
111
|
-
const closeImg = document.querySelector('img[alt="Close
|
|
110
|
+
const closeImg = document.querySelector('img[alt="Close"]');
|
|
112
111
|
expect(closeImg).not.toBeInTheDocument();
|
|
113
112
|
});
|
|
114
113
|
|
|
115
114
|
test("Shows icon when provided", () => {
|
|
116
115
|
setupTest({ icon: "/test-icon.svg" });
|
|
117
|
-
const icon = document.querySelector('img[alt="
|
|
116
|
+
const icon = document.querySelector('img[alt=""]');
|
|
118
117
|
expect(icon).toBeInTheDocument();
|
|
119
118
|
expect(icon).toHaveAttribute("src", "/test-icon.svg");
|
|
120
119
|
});
|
|
121
120
|
|
|
122
121
|
test("Does not show icon by default", () => {
|
|
123
122
|
setupTest();
|
|
124
|
-
const icon = document.querySelector('img[alt="
|
|
123
|
+
const icon = document.querySelector('img[alt=""]');
|
|
125
124
|
expect(icon).not.toBeInTheDocument();
|
|
126
125
|
});
|
|
127
126
|
|
|
128
|
-
test("Maps danger action to red
|
|
127
|
+
test("Maps danger action to red variant", async () => {
|
|
129
128
|
const actions = [{ label: "Delete", onClick: vi.fn(), danger: true }];
|
|
130
129
|
setupTest({ actions });
|
|
131
130
|
const button = screen.getAllByText("Delete")[0].closest("button");
|
|
132
|
-
|
|
131
|
+
// Button applies Tailwind classes for red variant
|
|
132
|
+
expect(button).toHaveClass("bg-red-700");
|
|
133
|
+
expect(button).toHaveClass("text-white");
|
|
133
134
|
});
|
|
134
135
|
|
|
135
136
|
test("Maps strokebtn + danger to red-outline variant", async () => {
|
|
@@ -138,41 +139,55 @@ describe("ConfirmationModal Component Tests", () => {
|
|
|
138
139
|
];
|
|
139
140
|
setupTest({ actions });
|
|
140
141
|
const button = screen.getAllByText("Remove")[0].closest("button, a");
|
|
141
|
-
|
|
142
|
+
// Button applies Tailwind classes for red-outline variant
|
|
143
|
+
expect(button).toHaveClass("text-red-700");
|
|
144
|
+
expect(button).toHaveClass("bg-transparent");
|
|
145
|
+
expect(button).toHaveClass("border-red-700");
|
|
142
146
|
});
|
|
143
147
|
|
|
144
|
-
test("Maps strokebtn + deemphasized to
|
|
148
|
+
test("Maps strokebtn + deemphasized to alternative variant", async () => {
|
|
145
149
|
const actions = [
|
|
146
150
|
{ label: "Cancel", onClick: vi.fn(), strokebtn: true, deemphasized: true },
|
|
147
151
|
];
|
|
148
152
|
setupTest({ actions });
|
|
149
153
|
const button = screen.getAllByText("Cancel")[0].closest("button, a");
|
|
150
|
-
|
|
154
|
+
// Button applies Tailwind classes for alternative variant
|
|
155
|
+
expect(button).toHaveClass("text-gray-900");
|
|
156
|
+
expect(button).toHaveClass("bg-white");
|
|
157
|
+
expect(button).toHaveClass("border-gray-200");
|
|
151
158
|
});
|
|
152
159
|
|
|
153
|
-
test("Maps textBtn + danger to red
|
|
160
|
+
test("Maps textBtn + danger to ghost-red variant", async () => {
|
|
154
161
|
const actions = [
|
|
155
162
|
{ label: "Delete Text", onClick: vi.fn(), textBtn: true, danger: true },
|
|
156
163
|
];
|
|
157
164
|
setupTest({ actions });
|
|
158
165
|
const button = screen.getAllByText("Delete Text")[0].closest("button, a");
|
|
159
|
-
|
|
166
|
+
// Button applies Tailwind classes for ghost-red variant
|
|
167
|
+
expect(button).toHaveClass("text-red-700");
|
|
168
|
+
expect(button).toHaveClass("bg-transparent");
|
|
169
|
+
expect(button).toHaveClass("border-transparent");
|
|
160
170
|
});
|
|
161
171
|
|
|
162
172
|
test("Uses explicit variant when provided", async () => {
|
|
163
173
|
const actions = [
|
|
164
|
-
{ label: "Custom", onClick: vi.fn(), variant: "
|
|
174
|
+
{ label: "Custom", onClick: vi.fn(), variant: "outline" },
|
|
165
175
|
];
|
|
166
176
|
setupTest({ actions });
|
|
167
177
|
const button = screen.getAllByText("Custom")[0].closest("button, a");
|
|
168
|
-
|
|
178
|
+
// Button applies Tailwind classes for outline variant
|
|
179
|
+
expect(button).toHaveClass("text-blue-700");
|
|
180
|
+
expect(button).toHaveClass("bg-transparent");
|
|
181
|
+
expect(button).toHaveClass("border-blue-700");
|
|
169
182
|
});
|
|
170
183
|
|
|
171
|
-
test("Auto-maps Delete label to red
|
|
184
|
+
test("Auto-maps Delete label to red variant", async () => {
|
|
172
185
|
const actions = [{ label: "Delete", onClick: vi.fn() }];
|
|
173
186
|
setupTest({ actions });
|
|
174
187
|
const button = screen.getAllByText("Delete")[0].closest("button, a");
|
|
175
|
-
|
|
188
|
+
// Button applies Tailwind classes for red variant (auto-detected from "Delete" label)
|
|
189
|
+
expect(button).toHaveClass("bg-red-700");
|
|
190
|
+
expect(button).toHaveClass("text-white");
|
|
176
191
|
});
|
|
177
192
|
|
|
178
193
|
test("Title has proper styling", () => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputModal.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/modals/InputModal.spec.js"],"names":[],"mappings":""}
|