@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,514 @@
|
|
|
1
|
+
import { render, screen, fireEvent, waitFor } from '@testing-library/svelte';
|
|
2
|
+
import { expect, describe, it, beforeEach, afterEach, vi } from 'vitest';
|
|
3
|
+
import PatternsGallery from './PatternsGallery.svelte';
|
|
4
|
+
|
|
5
|
+
// Mock SvelteKit modules
|
|
6
|
+
vi.mock('$app/stores', () => ({
|
|
7
|
+
page: {
|
|
8
|
+
subscribe: (fn) => {
|
|
9
|
+
fn({ url: { pathname: '/' } });
|
|
10
|
+
return () => {};
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}));
|
|
14
|
+
|
|
15
|
+
vi.mock('$app/paths', () => ({
|
|
16
|
+
base: ''
|
|
17
|
+
}));
|
|
18
|
+
|
|
19
|
+
// Mock fetch for any API calls
|
|
20
|
+
const mockFetch = vi.fn(() =>
|
|
21
|
+
Promise.resolve({
|
|
22
|
+
ok: true,
|
|
23
|
+
json: () => Promise.resolve([]),
|
|
24
|
+
})
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
global.fetch = mockFetch;
|
|
28
|
+
|
|
29
|
+
describe('PatternsGallery', () => {
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
// Reset dark mode class before each test
|
|
32
|
+
document.documentElement.classList.remove('dark');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
afterEach(() => {
|
|
36
|
+
// Cleanup after each test
|
|
37
|
+
document.documentElement.classList.remove('dark');
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('Component Rendering', () => {
|
|
41
|
+
it('renders the main gallery container', () => {
|
|
42
|
+
render(PatternsGallery);
|
|
43
|
+
const heading = screen.getByText('Patterns Gallery');
|
|
44
|
+
expect(heading).toBeInTheDocument();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('renders the subtitle', () => {
|
|
48
|
+
render(PatternsGallery);
|
|
49
|
+
const subtitle = screen.getByText('Layout & flow components (Layer 3)');
|
|
50
|
+
expect(subtitle).toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('renders dark mode toggle button', () => {
|
|
54
|
+
render(PatternsGallery);
|
|
55
|
+
const toggleButton = screen.getByRole('button', { name: /Dark/i });
|
|
56
|
+
expect(toggleButton).toBeInTheDocument();
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
describe('Dark Mode Toggle', () => {
|
|
61
|
+
it('starts in light mode', () => {
|
|
62
|
+
render(PatternsGallery);
|
|
63
|
+
const toggleButton = screen.getByRole('button', { name: /Dark/i });
|
|
64
|
+
expect(toggleButton).toHaveTextContent('🌙 Dark');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('toggles to dark mode when clicked', async () => {
|
|
68
|
+
render(PatternsGallery);
|
|
69
|
+
const toggleButton = screen.getByRole('button', { name: /Dark/i });
|
|
70
|
+
|
|
71
|
+
await fireEvent.click(toggleButton);
|
|
72
|
+
|
|
73
|
+
expect(document.documentElement.classList.contains('dark')).toBe(true);
|
|
74
|
+
expect(toggleButton).toHaveTextContent('☀️ Light');
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('toggles back to light mode', async () => {
|
|
78
|
+
render(PatternsGallery);
|
|
79
|
+
const toggleButton = screen.getByRole('button', { name: /Dark/i });
|
|
80
|
+
|
|
81
|
+
// Toggle to dark
|
|
82
|
+
await fireEvent.click(toggleButton);
|
|
83
|
+
expect(document.documentElement.classList.contains('dark')).toBe(true);
|
|
84
|
+
|
|
85
|
+
// Toggle back to light
|
|
86
|
+
await fireEvent.click(toggleButton);
|
|
87
|
+
expect(document.documentElement.classList.contains('dark')).toBe(false);
|
|
88
|
+
expect(toggleButton).toHaveTextContent('🌙 Dark');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
describe('Page Patterns Section', () => {
|
|
93
|
+
it('renders PageHeader section', () => {
|
|
94
|
+
render(PatternsGallery);
|
|
95
|
+
const heading = screen.getByText('PageHeader');
|
|
96
|
+
expect(heading).toBeInTheDocument();
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('renders PageHeader description', () => {
|
|
100
|
+
render(PatternsGallery);
|
|
101
|
+
const description = screen.getByText('Page title with optional actions and breadcrumb');
|
|
102
|
+
expect(description).toBeInTheDocument();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('renders multiple PageHeader examples', () => {
|
|
106
|
+
render(PatternsGallery);
|
|
107
|
+
expect(screen.getByText('Page Title')).toBeInTheDocument();
|
|
108
|
+
expect(screen.getByText('With Subtitle')).toBeInTheDocument();
|
|
109
|
+
expect(screen.getByText('With Actions')).toBeInTheDocument();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('renders SectionHeader section', () => {
|
|
113
|
+
render(PatternsGallery);
|
|
114
|
+
expect(screen.getByText('SectionHeader')).toBeInTheDocument();
|
|
115
|
+
expect(screen.getByText('Section dividers with optional description')).toBeInTheDocument();
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('renders SectionHeader examples', () => {
|
|
119
|
+
render(PatternsGallery);
|
|
120
|
+
expect(screen.getByText('Basic Section')).toBeInTheDocument();
|
|
121
|
+
expect(screen.getByText('With Description')).toBeInTheDocument();
|
|
122
|
+
expect(screen.getByText('With Action')).toBeInTheDocument();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('renders PageLoader section', () => {
|
|
126
|
+
render(PatternsGallery);
|
|
127
|
+
expect(screen.getByText('PageLoader')).toBeInTheDocument();
|
|
128
|
+
expect(screen.getByText('Full-page loading indicator')).toBeInTheDocument();
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('shows PageLoader when button is clicked', async () => {
|
|
132
|
+
const { container } = render(PatternsGallery);
|
|
133
|
+
const button = screen.getByRole('button', { name: /Show PageLoader/i });
|
|
134
|
+
|
|
135
|
+
await fireEvent.click(button);
|
|
136
|
+
|
|
137
|
+
// PageLoader should be visible (contains a Spinner which has role="status")
|
|
138
|
+
await waitFor(() => {
|
|
139
|
+
const spinner = container.querySelector('[role="status"]');
|
|
140
|
+
expect(spinner).toBeInTheDocument();
|
|
141
|
+
}, { timeout: 100 });
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('hides PageLoader after 2 seconds', async () => {
|
|
145
|
+
const { container } = render(PatternsGallery);
|
|
146
|
+
const button = screen.getByRole('button', { name: /Show PageLoader/i });
|
|
147
|
+
|
|
148
|
+
await fireEvent.click(button);
|
|
149
|
+
|
|
150
|
+
// Wait for PageLoader to appear
|
|
151
|
+
await waitFor(() => {
|
|
152
|
+
const spinner = container.querySelector('[role="status"]');
|
|
153
|
+
expect(spinner).toBeInTheDocument();
|
|
154
|
+
}, { timeout: 100 });
|
|
155
|
+
|
|
156
|
+
// Wait for it to disappear
|
|
157
|
+
await waitFor(() => {
|
|
158
|
+
const spinner = container.querySelector('[role="status"]');
|
|
159
|
+
expect(spinner).not.toBeInTheDocument();
|
|
160
|
+
}, { timeout: 2500 });
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
describe('Form Patterns Section', () => {
|
|
165
|
+
it('renders FormSection heading', () => {
|
|
166
|
+
render(PatternsGallery);
|
|
167
|
+
expect(screen.getByText('FormSection')).toBeInTheDocument();
|
|
168
|
+
expect(screen.getByText('Grouped form fields with title and description')).toBeInTheDocument();
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it('renders FormSection example', () => {
|
|
172
|
+
render(PatternsGallery);
|
|
173
|
+
expect(screen.getByText('Personal Information')).toBeInTheDocument();
|
|
174
|
+
expect(screen.getByText('Enter your personal details')).toBeInTheDocument();
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it('renders FormGrid section', () => {
|
|
178
|
+
render(PatternsGallery);
|
|
179
|
+
expect(screen.getByText('FormGrid')).toBeInTheDocument();
|
|
180
|
+
expect(screen.getByText('Responsive grid layout for form fields')).toBeInTheDocument();
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it('renders FormGrid with 2 columns', () => {
|
|
184
|
+
render(PatternsGallery);
|
|
185
|
+
expect(screen.getByPlaceholderText('John')).toBeInTheDocument();
|
|
186
|
+
expect(screen.getByPlaceholderText('Doe')).toBeInTheDocument();
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('renders FormGrid with 3 columns', () => {
|
|
190
|
+
render(PatternsGallery);
|
|
191
|
+
expect(screen.getByText('3 Columns')).toBeInTheDocument();
|
|
192
|
+
expect(screen.getByPlaceholderText('New York')).toBeInTheDocument();
|
|
193
|
+
expect(screen.getByPlaceholderText('NY')).toBeInTheDocument();
|
|
194
|
+
expect(screen.getByPlaceholderText('10001')).toBeInTheDocument();
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it('renders FormActions section', () => {
|
|
198
|
+
render(PatternsGallery);
|
|
199
|
+
expect(screen.getByText('FormActions')).toBeInTheDocument();
|
|
200
|
+
expect(screen.getByText('Form submit/cancel button group')).toBeInTheDocument();
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it('renders FormActions examples', () => {
|
|
204
|
+
render(PatternsGallery);
|
|
205
|
+
expect(screen.getByText('Default (right-aligned)')).toBeInTheDocument();
|
|
206
|
+
expect(screen.getByText('With loading state')).toBeInTheDocument();
|
|
207
|
+
expect(screen.getByText('Delete confirmation')).toBeInTheDocument();
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
it('renders FormValidationSummary section', () => {
|
|
211
|
+
render(PatternsGallery);
|
|
212
|
+
expect(screen.getByText('FormValidationSummary')).toBeInTheDocument();
|
|
213
|
+
expect(screen.getByText('Summary of form validation errors')).toBeInTheDocument();
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
describe('Data Patterns Section', () => {
|
|
218
|
+
it('renders DataTable section', () => {
|
|
219
|
+
render(PatternsGallery);
|
|
220
|
+
expect(screen.getByText('DataTable')).toBeInTheDocument();
|
|
221
|
+
expect(screen.getByText('Tabular data display with sorting and actions')).toBeInTheDocument();
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('renders DataTable with sample data', () => {
|
|
225
|
+
render(PatternsGallery);
|
|
226
|
+
expect(screen.getByText('John Doe')).toBeInTheDocument();
|
|
227
|
+
expect(screen.getByText('john@example.com')).toBeInTheDocument();
|
|
228
|
+
expect(screen.getByText('Jane Smith')).toBeInTheDocument();
|
|
229
|
+
expect(screen.getByText('jane@example.com')).toBeInTheDocument();
|
|
230
|
+
expect(screen.getByText('Bob Wilson')).toBeInTheDocument();
|
|
231
|
+
expect(screen.getByText('bob@example.com')).toBeInTheDocument();
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
it('renders DataTable status columns', () => {
|
|
235
|
+
render(PatternsGallery);
|
|
236
|
+
const statuses = screen.getAllByText(/Active|Pending|Inactive/);
|
|
237
|
+
expect(statuses.length).toBeGreaterThan(0);
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
it('renders DataList section', () => {
|
|
241
|
+
render(PatternsGallery);
|
|
242
|
+
expect(screen.getByText('DataList')).toBeInTheDocument();
|
|
243
|
+
expect(screen.getByText('Vertical list of items with primary/secondary text')).toBeInTheDocument();
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
it('renders DataList items', () => {
|
|
247
|
+
render(PatternsGallery);
|
|
248
|
+
expect(screen.getByText('Primary text 1')).toBeInTheDocument();
|
|
249
|
+
expect(screen.getByText('Secondary text')).toBeInTheDocument();
|
|
250
|
+
expect(screen.getByText('Primary text 2')).toBeInTheDocument();
|
|
251
|
+
expect(screen.getByText('More details here')).toBeInTheDocument();
|
|
252
|
+
expect(screen.getByText('Primary text 3')).toBeInTheDocument();
|
|
253
|
+
expect(screen.getByText('Additional info')).toBeInTheDocument();
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it('renders DataGrid section', () => {
|
|
257
|
+
render(PatternsGallery);
|
|
258
|
+
expect(screen.getByText('DataGrid')).toBeInTheDocument();
|
|
259
|
+
expect(screen.getByText('Responsive grid of cards')).toBeInTheDocument();
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
it('renders DataGrid items', () => {
|
|
263
|
+
render(PatternsGallery);
|
|
264
|
+
expect(screen.getByText('Item 1')).toBeInTheDocument();
|
|
265
|
+
expect(screen.getByText('Description for item 1')).toBeInTheDocument();
|
|
266
|
+
expect(screen.getByText('Item 2')).toBeInTheDocument();
|
|
267
|
+
expect(screen.getByText('Description for item 2')).toBeInTheDocument();
|
|
268
|
+
expect(screen.getByText('Item 6')).toBeInTheDocument();
|
|
269
|
+
expect(screen.getByText('Description for item 6')).toBeInTheDocument();
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
describe('Layout Patterns Section', () => {
|
|
274
|
+
it('renders Stack section', () => {
|
|
275
|
+
render(PatternsGallery);
|
|
276
|
+
expect(screen.getByText('Stack')).toBeInTheDocument();
|
|
277
|
+
expect(screen.getByText('Vertical spacing utility')).toBeInTheDocument();
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it('renders Stack items', () => {
|
|
281
|
+
render(PatternsGallery);
|
|
282
|
+
expect(screen.getByText('Stack Item 1')).toBeInTheDocument();
|
|
283
|
+
expect(screen.getByText('Stack Item 2')).toBeInTheDocument();
|
|
284
|
+
expect(screen.getByText('Stack Item 3')).toBeInTheDocument();
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('renders Grid section', () => {
|
|
288
|
+
render(PatternsGallery);
|
|
289
|
+
expect(screen.getByText('Grid')).toBeInTheDocument();
|
|
290
|
+
expect(screen.getByText('Responsive grid layout utility')).toBeInTheDocument();
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
it('renders Grid with 8 items', () => {
|
|
294
|
+
render(PatternsGallery);
|
|
295
|
+
for (let i = 1; i <= 8; i++) {
|
|
296
|
+
const items = screen.getAllByText(i.toString());
|
|
297
|
+
expect(items.length).toBeGreaterThan(0);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
it('renders Sidebar section', () => {
|
|
302
|
+
render(PatternsGallery);
|
|
303
|
+
expect(screen.getByText('Sidebar')).toBeInTheDocument();
|
|
304
|
+
expect(screen.getByText('Sidebar + main content layout')).toBeInTheDocument();
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
it('renders Sidebar navigation', () => {
|
|
308
|
+
render(PatternsGallery);
|
|
309
|
+
expect(screen.getByText('Navigation')).toBeInTheDocument();
|
|
310
|
+
// These may appear in multiple places (Header and Sidebar)
|
|
311
|
+
expect(screen.getAllByText('Dashboard').length).toBeGreaterThan(0);
|
|
312
|
+
expect(screen.getAllByText('Settings').length).toBeGreaterThan(0);
|
|
313
|
+
expect(screen.getAllByText('Profile').length).toBeGreaterThan(0);
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
it('renders Sidebar main content', () => {
|
|
317
|
+
render(PatternsGallery);
|
|
318
|
+
expect(screen.getByText('Main content area')).toBeInTheDocument();
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
describe('Navigation Patterns Section', () => {
|
|
323
|
+
it('renders Header section', () => {
|
|
324
|
+
render(PatternsGallery);
|
|
325
|
+
expect(screen.getByText('Header')).toBeInTheDocument();
|
|
326
|
+
expect(screen.getByText('Top navigation bar with logo, nav links, and user menu')).toBeInTheDocument();
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
it('renders BottomNav section', () => {
|
|
330
|
+
render(PatternsGallery);
|
|
331
|
+
expect(screen.getByText('BottomNav')).toBeInTheDocument();
|
|
332
|
+
expect(screen.getByText('Mobile bottom navigation')).toBeInTheDocument();
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
describe('PageLayout Section', () => {
|
|
337
|
+
it('renders PageLayout section', () => {
|
|
338
|
+
render(PatternsGallery);
|
|
339
|
+
expect(screen.getByText('PageLayout')).toBeInTheDocument();
|
|
340
|
+
expect(screen.getByText('Complete page structure with breadcrumb, title, and content')).toBeInTheDocument();
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
it('renders PageLayout example', () => {
|
|
344
|
+
render(PatternsGallery);
|
|
345
|
+
expect(screen.getByText('PageLayout Demo')).toBeInTheDocument();
|
|
346
|
+
expect(screen.getByText('Example page layout')).toBeInTheDocument();
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it('renders PageLayout content', () => {
|
|
350
|
+
render(PatternsGallery);
|
|
351
|
+
expect(screen.getByText(/Main page content goes here/)).toBeInTheDocument();
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
describe('Styling and Classes', () => {
|
|
356
|
+
it('applies light mode background by default', () => {
|
|
357
|
+
const { container } = render(PatternsGallery);
|
|
358
|
+
const mainDiv = container.querySelector('.min-h-screen');
|
|
359
|
+
expect(mainDiv).toHaveClass('bg-gray-50');
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
it('applies dark mode background when dark mode is toggled', async () => {
|
|
363
|
+
const { container } = render(PatternsGallery);
|
|
364
|
+
const toggleButton = screen.getByRole('button', { name: /Dark/i });
|
|
365
|
+
|
|
366
|
+
await fireEvent.click(toggleButton);
|
|
367
|
+
|
|
368
|
+
const mainDiv = container.querySelector('.min-h-screen');
|
|
369
|
+
expect(mainDiv).toHaveClass('bg-gray-900');
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
it('applies correct section styling in light mode', () => {
|
|
373
|
+
const { container } = render(PatternsGallery);
|
|
374
|
+
const sections = container.querySelectorAll('section');
|
|
375
|
+
expect(sections.length).toBeGreaterThan(0);
|
|
376
|
+
expect(sections[0]).toHaveClass('bg-white');
|
|
377
|
+
});
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
describe('Sample Data Rendering', () => {
|
|
381
|
+
it('renders all table rows', () => {
|
|
382
|
+
render(PatternsGallery);
|
|
383
|
+
expect(screen.getByText('John Doe')).toBeInTheDocument();
|
|
384
|
+
expect(screen.getByText('Jane Smith')).toBeInTheDocument();
|
|
385
|
+
expect(screen.getByText('Bob Wilson')).toBeInTheDocument();
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
it('renders all grid items', () => {
|
|
389
|
+
render(PatternsGallery);
|
|
390
|
+
for (let i = 1; i <= 6; i++) {
|
|
391
|
+
expect(screen.getByText(`Item ${i}`)).toBeInTheDocument();
|
|
392
|
+
expect(screen.getByText(`Description for item ${i}`)).toBeInTheDocument();
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
it('renders all list items', () => {
|
|
397
|
+
render(PatternsGallery);
|
|
398
|
+
expect(screen.getByText('Primary text 1')).toBeInTheDocument();
|
|
399
|
+
expect(screen.getByText('Primary text 2')).toBeInTheDocument();
|
|
400
|
+
expect(screen.getByText('Primary text 3')).toBeInTheDocument();
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
describe('Interactive Elements', () => {
|
|
405
|
+
it('renders action buttons in examples', () => {
|
|
406
|
+
render(PatternsGallery);
|
|
407
|
+
expect(screen.getByRole('button', { name: 'Add New' })).toBeInTheDocument();
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
it('renders View All link button', () => {
|
|
411
|
+
render(PatternsGallery);
|
|
412
|
+
expect(screen.getByRole('button', { name: 'View All' })).toBeInTheDocument();
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
it('renders form action buttons', () => {
|
|
416
|
+
render(PatternsGallery);
|
|
417
|
+
expect(screen.getByRole('button', { name: 'Save Changes' })).toBeInTheDocument();
|
|
418
|
+
const cancelButtons = screen.getAllByRole('button', { name: 'Cancel' });
|
|
419
|
+
expect(cancelButtons.length).toBeGreaterThan(0);
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
it('renders PageLoader trigger button', () => {
|
|
423
|
+
render(PatternsGallery);
|
|
424
|
+
expect(screen.getByRole('button', { name: /Show PageLoader/i })).toBeInTheDocument();
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
describe('Component Structure', () => {
|
|
429
|
+
it('renders all major sections', () => {
|
|
430
|
+
const { container } = render(PatternsGallery);
|
|
431
|
+
const sections = container.querySelectorAll('section');
|
|
432
|
+
|
|
433
|
+
// Should have multiple sections for all the pattern categories
|
|
434
|
+
expect(sections.length).toBeGreaterThanOrEqual(15);
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
it('renders main heading', () => {
|
|
438
|
+
render(PatternsGallery);
|
|
439
|
+
const h1 = screen.getByRole('heading', { level: 1, name: 'Patterns Gallery' });
|
|
440
|
+
expect(h1).toBeInTheDocument();
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
it('renders multiple section headings', () => {
|
|
444
|
+
render(PatternsGallery);
|
|
445
|
+
const h2s = screen.getAllByRole('heading', { level: 2 });
|
|
446
|
+
expect(h2s.length).toBeGreaterThan(10);
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
it('renders all pattern category headings', () => {
|
|
450
|
+
render(PatternsGallery);
|
|
451
|
+
|
|
452
|
+
// Page patterns
|
|
453
|
+
expect(screen.getByText('PageHeader')).toBeInTheDocument();
|
|
454
|
+
expect(screen.getByText('SectionHeader')).toBeInTheDocument();
|
|
455
|
+
expect(screen.getByText('PageLoader')).toBeInTheDocument();
|
|
456
|
+
|
|
457
|
+
// Form patterns
|
|
458
|
+
expect(screen.getByText('FormSection')).toBeInTheDocument();
|
|
459
|
+
expect(screen.getByText('FormGrid')).toBeInTheDocument();
|
|
460
|
+
expect(screen.getByText('FormActions')).toBeInTheDocument();
|
|
461
|
+
expect(screen.getByText('FormValidationSummary')).toBeInTheDocument();
|
|
462
|
+
|
|
463
|
+
// Data patterns
|
|
464
|
+
expect(screen.getByText('DataTable')).toBeInTheDocument();
|
|
465
|
+
expect(screen.getByText('DataList')).toBeInTheDocument();
|
|
466
|
+
expect(screen.getByText('DataGrid')).toBeInTheDocument();
|
|
467
|
+
|
|
468
|
+
// Layout patterns
|
|
469
|
+
expect(screen.getByText('Stack')).toBeInTheDocument();
|
|
470
|
+
expect(screen.getByText('Grid')).toBeInTheDocument();
|
|
471
|
+
expect(screen.getByText('Sidebar')).toBeInTheDocument();
|
|
472
|
+
|
|
473
|
+
// Navigation patterns
|
|
474
|
+
expect(screen.getByText('Header')).toBeInTheDocument();
|
|
475
|
+
expect(screen.getByText('BottomNav')).toBeInTheDocument();
|
|
476
|
+
|
|
477
|
+
// Page layout
|
|
478
|
+
expect(screen.getByText('PageLayout')).toBeInTheDocument();
|
|
479
|
+
});
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
describe('Accessibility', () => {
|
|
483
|
+
it('has accessible button labels', () => {
|
|
484
|
+
render(PatternsGallery);
|
|
485
|
+
|
|
486
|
+
// Dark mode toggle should have accessible text
|
|
487
|
+
const darkModeButton = screen.getByRole('button', { name: /Dark/i });
|
|
488
|
+
expect(darkModeButton).toBeInTheDocument();
|
|
489
|
+
|
|
490
|
+
// Action buttons
|
|
491
|
+
expect(screen.getByRole('button', { name: 'Add New' })).toBeInTheDocument();
|
|
492
|
+
expect(screen.getByRole('button', { name: 'View All' })).toBeInTheDocument();
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
it('has main h1 heading', () => {
|
|
496
|
+
const { container } = render(PatternsGallery);
|
|
497
|
+
|
|
498
|
+
// Should have at least one h1 (the main gallery heading, plus examples in PageHeader demos)
|
|
499
|
+
const h1s = container.querySelectorAll('h1');
|
|
500
|
+
expect(h1s.length).toBeGreaterThanOrEqual(1);
|
|
501
|
+
|
|
502
|
+
// The first h1 should be the main gallery heading
|
|
503
|
+
expect(h1s[0]).toHaveTextContent('Patterns Gallery');
|
|
504
|
+
});
|
|
505
|
+
|
|
506
|
+
it('has multiple h2 section headings', () => {
|
|
507
|
+
const { container } = render(PatternsGallery);
|
|
508
|
+
|
|
509
|
+
// Should have multiple h2s for sections
|
|
510
|
+
const h2s = container.querySelectorAll('h2');
|
|
511
|
+
expect(h2s.length).toBeGreaterThan(10);
|
|
512
|
+
});
|
|
513
|
+
});
|
|
514
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrimitivesGallery.spec.d.ts","sourceRoot":"","sources":["../../src/lib/stories/PrimitivesGallery.spec.js"],"names":[],"mappings":""}
|