@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,235 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/svelte';
|
|
2
|
+
import userEvent from '@testing-library/user-event';
|
|
3
|
+
import { expect, describe, test, vi } from 'vitest';
|
|
4
|
+
import NumberInput from './NumberInput.svelte';
|
|
5
|
+
|
|
6
|
+
describe('NumberInput Component', () => {
|
|
7
|
+
test('renders a container div', () => {
|
|
8
|
+
const { container } = render(NumberInput);
|
|
9
|
+
expect(container.querySelector('div')).toBeInTheDocument();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test('renders increment and decrement buttons', () => {
|
|
13
|
+
const { container } = render(NumberInput);
|
|
14
|
+
expect(container.querySelector('[aria-label="Decrease quantity"]')).toBeInTheDocument();
|
|
15
|
+
expect(container.querySelector('[aria-label="Increase quantity"]')).toBeInTheDocument();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test('displays the current value', () => {
|
|
19
|
+
render(NumberInput, { props: { value: 5 } });
|
|
20
|
+
expect(screen.getByText('5')).toBeInTheDocument();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test('applies custom className', () => {
|
|
24
|
+
const { container } = render(NumberInput, { props: { class: 'custom-number-input' } });
|
|
25
|
+
const wrapper = container.querySelector('div');
|
|
26
|
+
expect(wrapper).toHaveClass('custom-number-input');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test('passes through additional props', () => {
|
|
30
|
+
const { container } = render(NumberInput, { props: { 'data-testid': 'my-number-input' } });
|
|
31
|
+
expect(container.querySelector('[data-testid="my-number-input"]')).toBeInTheDocument();
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe('NumberInput Props', () => {
|
|
36
|
+
test('value defaults to 0', () => {
|
|
37
|
+
render(NumberInput);
|
|
38
|
+
expect(screen.getByText('0')).toBeInTheDocument();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test('min defaults to 0', () => {
|
|
42
|
+
const { container } = render(NumberInput, { props: { value: 0 } });
|
|
43
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
44
|
+
expect(decrementBtn).toBeDisabled();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('max defaults to Infinity', () => {
|
|
48
|
+
const { container } = render(NumberInput, { props: { value: 9999 } });
|
|
49
|
+
const incrementBtn = container.querySelector('[aria-label="Increase quantity"]');
|
|
50
|
+
expect(incrementBtn).not.toBeDisabled();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('disabled prop disables both buttons', () => {
|
|
54
|
+
const { container } = render(NumberInput, { props: { disabled: true, value: 5 } });
|
|
55
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
56
|
+
const incrementBtn = container.querySelector('[aria-label="Increase quantity"]');
|
|
57
|
+
expect(decrementBtn).toBeDisabled();
|
|
58
|
+
expect(incrementBtn).toBeDisabled();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('NumberInput Increment/Decrement', () => {
|
|
63
|
+
test('clicking increment calls onchange with value + 1', async () => {
|
|
64
|
+
const user = userEvent.setup();
|
|
65
|
+
const onchange = vi.fn();
|
|
66
|
+
const { container } = render(NumberInput, { props: { value: 5, onchange } });
|
|
67
|
+
|
|
68
|
+
const incrementBtn = container.querySelector('[aria-label="Increase quantity"]');
|
|
69
|
+
await user.click(incrementBtn);
|
|
70
|
+
expect(onchange).toHaveBeenCalledWith(6);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('clicking decrement calls onchange with value - 1', async () => {
|
|
74
|
+
const user = userEvent.setup();
|
|
75
|
+
const onchange = vi.fn();
|
|
76
|
+
const { container } = render(NumberInput, { props: { value: 5, onchange } });
|
|
77
|
+
|
|
78
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
79
|
+
await user.click(decrementBtn);
|
|
80
|
+
expect(onchange).toHaveBeenCalledWith(4);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('decrement is disabled at min value', () => {
|
|
84
|
+
const { container } = render(NumberInput, { props: { value: 0, min: 0 } });
|
|
85
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
86
|
+
expect(decrementBtn).toBeDisabled();
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test('increment is disabled at max value', () => {
|
|
90
|
+
const { container } = render(NumberInput, { props: { value: 10, max: 10 } });
|
|
91
|
+
const incrementBtn = container.querySelector('[aria-label="Increase quantity"]');
|
|
92
|
+
expect(incrementBtn).toBeDisabled();
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test('does not increment past max', async () => {
|
|
96
|
+
const user = userEvent.setup();
|
|
97
|
+
const onchange = vi.fn();
|
|
98
|
+
const { container } = render(NumberInput, { props: { value: 10, max: 10, onchange } });
|
|
99
|
+
|
|
100
|
+
const incrementBtn = container.querySelector('[aria-label="Increase quantity"]');
|
|
101
|
+
await user.click(incrementBtn);
|
|
102
|
+
expect(onchange).not.toHaveBeenCalled();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test('does not decrement below min', async () => {
|
|
106
|
+
const user = userEvent.setup();
|
|
107
|
+
const onchange = vi.fn();
|
|
108
|
+
const { container } = render(NumberInput, { props: { value: 0, min: 0, onchange } });
|
|
109
|
+
|
|
110
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
111
|
+
await user.click(decrementBtn);
|
|
112
|
+
expect(onchange).not.toHaveBeenCalled();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
describe('NumberInput Styling', () => {
|
|
117
|
+
test('container has inline-flex class', () => {
|
|
118
|
+
const { container } = render(NumberInput);
|
|
119
|
+
const wrapper = container.querySelector('div');
|
|
120
|
+
expect(wrapper).toHaveClass('inline-flex');
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test('container has items-center class', () => {
|
|
124
|
+
const { container } = render(NumberInput);
|
|
125
|
+
const wrapper = container.querySelector('div');
|
|
126
|
+
expect(wrapper).toHaveClass('items-center');
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('buttons have type="button"', () => {
|
|
130
|
+
const { container } = render(NumberInput);
|
|
131
|
+
const buttons = container.querySelectorAll('button');
|
|
132
|
+
buttons.forEach(btn => {
|
|
133
|
+
expect(btn).toHaveAttribute('type', 'button');
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
test('decrement button has rounded-l-lg', () => {
|
|
138
|
+
const { container } = render(NumberInput);
|
|
139
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
140
|
+
expect(decrementBtn).toHaveClass('rounded-l-lg');
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test('increment button has rounded-r-lg', () => {
|
|
144
|
+
const { container } = render(NumberInput);
|
|
145
|
+
const incrementBtn = container.querySelector('[aria-label="Increase quantity"]');
|
|
146
|
+
expect(incrementBtn).toHaveClass('rounded-r-lg');
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test('buttons have bg-gray-100 background', () => {
|
|
150
|
+
const { container } = render(NumberInput);
|
|
151
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
152
|
+
expect(decrementBtn).toHaveClass('bg-gray-100');
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
test('buttons have border-gray-300 border', () => {
|
|
156
|
+
const { container } = render(NumberInput);
|
|
157
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
158
|
+
expect(decrementBtn).toHaveClass('border-gray-300');
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test('display has bg-gray-50 background', () => {
|
|
162
|
+
const { container } = render(NumberInput);
|
|
163
|
+
const display = container.querySelector('span');
|
|
164
|
+
expect(display).toHaveClass('bg-gray-50');
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
test('display has text-gray-500 color', () => {
|
|
168
|
+
const { container } = render(NumberInput);
|
|
169
|
+
const display = container.querySelector('span');
|
|
170
|
+
expect(display).toHaveClass('text-gray-500');
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
describe('NumberInput Dark Mode', () => {
|
|
175
|
+
test('buttons have dark mode background', () => {
|
|
176
|
+
const { container } = render(NumberInput);
|
|
177
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
178
|
+
expect(decrementBtn).toHaveClass('dark:bg-gray-700');
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
test('buttons have dark mode border', () => {
|
|
182
|
+
const { container } = render(NumberInput);
|
|
183
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
184
|
+
expect(decrementBtn).toHaveClass('dark:border-gray-600');
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
test('display has dark mode background', () => {
|
|
188
|
+
const { container } = render(NumberInput);
|
|
189
|
+
const display = container.querySelector('span');
|
|
190
|
+
expect(display).toHaveClass('dark:bg-gray-800');
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test('display has dark mode text color', () => {
|
|
194
|
+
const { container } = render(NumberInput);
|
|
195
|
+
const display = container.querySelector('span');
|
|
196
|
+
expect(display).toHaveClass('dark:text-gray-400');
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
describe('NumberInput Icons', () => {
|
|
201
|
+
test('decrement button has minus icon', () => {
|
|
202
|
+
const { container } = render(NumberInput);
|
|
203
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
204
|
+
expect(decrementBtn.querySelector('svg')).toBeInTheDocument();
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
test('increment button has plus icon', () => {
|
|
208
|
+
const { container } = render(NumberInput);
|
|
209
|
+
const incrementBtn = container.querySelector('[aria-label="Increase quantity"]');
|
|
210
|
+
expect(incrementBtn.querySelector('svg')).toBeInTheDocument();
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
test('icons have w-3 h-3 size', () => {
|
|
214
|
+
const { container } = render(NumberInput);
|
|
215
|
+
const svgs = container.querySelectorAll('svg');
|
|
216
|
+
svgs.forEach(svg => {
|
|
217
|
+
expect(svg).toHaveClass('w-3');
|
|
218
|
+
expect(svg).toHaveClass('h-3');
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
describe('NumberInput Accessibility', () => {
|
|
224
|
+
test('decrement button has aria-label', () => {
|
|
225
|
+
const { container } = render(NumberInput);
|
|
226
|
+
const decrementBtn = container.querySelector('[aria-label="Decrease quantity"]');
|
|
227
|
+
expect(decrementBtn).toHaveAttribute('aria-label', 'Decrease quantity');
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test('increment button has aria-label', () => {
|
|
231
|
+
const { container } = render(NumberInput);
|
|
232
|
+
const incrementBtn = container.querySelector('[aria-label="Increase quantity"]');
|
|
233
|
+
expect(incrementBtn).toHaveAttribute('aria-label', 'Increase quantity');
|
|
234
|
+
});
|
|
235
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pagination.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Pagination/Pagination.spec.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/svelte';
|
|
2
|
+
import userEvent from '@testing-library/user-event';
|
|
3
|
+
import { expect, describe, test, vi } from 'vitest';
|
|
4
|
+
import Pagination from './Pagination.svelte';
|
|
5
|
+
|
|
6
|
+
describe('Pagination Component', () => {
|
|
7
|
+
test('renders navigation element', () => {
|
|
8
|
+
const { container } = render(Pagination, { props: { totalPages: 5 } });
|
|
9
|
+
expect(container.querySelector('nav')).toBeInTheDocument();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test('has aria-label="Pagination"', () => {
|
|
13
|
+
const { container } = render(Pagination, { props: { totalPages: 5 } });
|
|
14
|
+
const nav = container.querySelector('nav');
|
|
15
|
+
expect(nav).toHaveAttribute('aria-label', 'Pagination');
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test('applies custom className', () => {
|
|
19
|
+
const { container } = render(Pagination, { props: { totalPages: 5, class: 'custom-pagination' } });
|
|
20
|
+
const nav = container.querySelector('nav');
|
|
21
|
+
expect(nav).toHaveClass('custom-pagination');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('passes through additional props', () => {
|
|
25
|
+
const { container } = render(Pagination, { props: { totalPages: 5, 'data-testid': 'my-pagination' } });
|
|
26
|
+
const nav = container.querySelector('[data-testid="my-pagination"]');
|
|
27
|
+
expect(nav).toBeInTheDocument();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
describe('Pagination Page Numbers', () => {
|
|
32
|
+
test('renders correct number of page buttons', () => {
|
|
33
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 1 } });
|
|
34
|
+
const pageButtons = container.querySelectorAll('button');
|
|
35
|
+
// 5 pages + prev + next = 7 buttons
|
|
36
|
+
expect(pageButtons.length).toBe(7);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('currentPage button has aria-current="page"', () => {
|
|
40
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 2 } });
|
|
41
|
+
const currentButton = container.querySelector('[aria-current="page"]');
|
|
42
|
+
expect(currentButton).toBeInTheDocument();
|
|
43
|
+
expect(currentButton).toHaveTextContent('2');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('first page is shown by default', () => {
|
|
47
|
+
render(Pagination, { props: { totalPages: 5 } });
|
|
48
|
+
expect(screen.getByRole('button', { name: '1' })).toBeInTheDocument();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
describe('Pagination Navigation Buttons', () => {
|
|
53
|
+
test('shows prev/next buttons by default', () => {
|
|
54
|
+
const { container } = render(Pagination, { props: { totalPages: 5 } });
|
|
55
|
+
expect(container.querySelector('[aria-label="Previous page"]')).toBeInTheDocument();
|
|
56
|
+
expect(container.querySelector('[aria-label="Next page"]')).toBeInTheDocument();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('hides prev/next when showPrevNext is false', () => {
|
|
60
|
+
const { container } = render(Pagination, { props: { totalPages: 5, showPrevNext: false } });
|
|
61
|
+
expect(container.querySelector('[aria-label="Previous page"]')).not.toBeInTheDocument();
|
|
62
|
+
expect(container.querySelector('[aria-label="Next page"]')).not.toBeInTheDocument();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('previous button is disabled on first page', () => {
|
|
66
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 1 } });
|
|
67
|
+
const prevButton = container.querySelector('[aria-label="Previous page"]');
|
|
68
|
+
expect(prevButton).toBeDisabled();
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test('next button is disabled on last page', () => {
|
|
72
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 5 } });
|
|
73
|
+
const nextButton = container.querySelector('[aria-label="Next page"]');
|
|
74
|
+
expect(nextButton).toBeDisabled();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test('previous button is enabled when not on first page', () => {
|
|
78
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 3 } });
|
|
79
|
+
const prevButton = container.querySelector('[aria-label="Previous page"]');
|
|
80
|
+
expect(prevButton).not.toBeDisabled();
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('next button is enabled when not on last page', () => {
|
|
84
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 3 } });
|
|
85
|
+
const nextButton = container.querySelector('[aria-label="Next page"]');
|
|
86
|
+
expect(nextButton).not.toBeDisabled();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
describe('Pagination Click Events', () => {
|
|
91
|
+
test('calls onchange when page button is clicked', async () => {
|
|
92
|
+
const user = userEvent.setup();
|
|
93
|
+
const onchange = vi.fn();
|
|
94
|
+
render(Pagination, { props: { totalPages: 5, currentPage: 1, onchange } });
|
|
95
|
+
|
|
96
|
+
await user.click(screen.getByRole('button', { name: '3' }));
|
|
97
|
+
expect(onchange).toHaveBeenCalledWith({ page: 3 });
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test('calls onPageChange when page button is clicked', async () => {
|
|
101
|
+
const user = userEvent.setup();
|
|
102
|
+
const onPageChange = vi.fn();
|
|
103
|
+
render(Pagination, { props: { totalPages: 5, currentPage: 1, onPageChange } });
|
|
104
|
+
|
|
105
|
+
await user.click(screen.getByRole('button', { name: '2' }));
|
|
106
|
+
expect(onPageChange).toHaveBeenCalledWith(2);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test('clicking next moves to next page', async () => {
|
|
110
|
+
const user = userEvent.setup();
|
|
111
|
+
const onchange = vi.fn();
|
|
112
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 2, onchange } });
|
|
113
|
+
|
|
114
|
+
const nextButton = container.querySelector('[aria-label="Next page"]');
|
|
115
|
+
await user.click(nextButton);
|
|
116
|
+
expect(onchange).toHaveBeenCalledWith({ page: 3 });
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test('clicking previous moves to previous page', async () => {
|
|
120
|
+
const user = userEvent.setup();
|
|
121
|
+
const onchange = vi.fn();
|
|
122
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 3, onchange } });
|
|
123
|
+
|
|
124
|
+
const prevButton = container.querySelector('[aria-label="Previous page"]');
|
|
125
|
+
await user.click(prevButton);
|
|
126
|
+
expect(onchange).toHaveBeenCalledWith({ page: 2 });
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
describe('Pagination Sizes', () => {
|
|
131
|
+
test('sm size applies correct classes', () => {
|
|
132
|
+
const { container } = render(Pagination, { props: { totalPages: 3, size: 'sm' } });
|
|
133
|
+
const button = container.querySelector('[aria-label="Previous page"]');
|
|
134
|
+
expect(button).toHaveClass('h-8');
|
|
135
|
+
expect(button).toHaveClass('text-sm');
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
test('md size applies correct classes', () => {
|
|
139
|
+
const { container } = render(Pagination, { props: { totalPages: 3, size: 'md' } });
|
|
140
|
+
const button = container.querySelector('[aria-label="Previous page"]');
|
|
141
|
+
expect(button).toHaveClass('h-9');
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test('lg size applies correct classes', () => {
|
|
145
|
+
const { container } = render(Pagination, { props: { totalPages: 3, size: 'lg' } });
|
|
146
|
+
const button = container.querySelector('[aria-label="Previous page"]');
|
|
147
|
+
expect(button).toHaveClass('h-10');
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
describe('Pagination Variant', () => {
|
|
152
|
+
test('table variant renders with entries text', () => {
|
|
153
|
+
const { container } = render(Pagination, { props: {
|
|
154
|
+
variant: 'table',
|
|
155
|
+
totalPages: 5,
|
|
156
|
+
totalItems: 50,
|
|
157
|
+
perPage: 10,
|
|
158
|
+
currentPage: 1
|
|
159
|
+
} });
|
|
160
|
+
// Check that the component renders in table variant mode
|
|
161
|
+
const wrapper = container.querySelector('div.flex.flex-col');
|
|
162
|
+
expect(wrapper).toBeInTheDocument();
|
|
163
|
+
expect(container.textContent).toContain('entries');
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('table variant shows nav element', () => {
|
|
167
|
+
const { container } = render(Pagination, { props: {
|
|
168
|
+
variant: 'table',
|
|
169
|
+
totalPages: 5,
|
|
170
|
+
totalItems: 50,
|
|
171
|
+
perPage: 10,
|
|
172
|
+
currentPage: 1
|
|
173
|
+
} });
|
|
174
|
+
expect(container.querySelector('nav')).toBeInTheDocument();
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
test('default variant has inline-flex class', () => {
|
|
178
|
+
const { container } = render(Pagination, { props: { totalPages: 5 } });
|
|
179
|
+
const nav = container.querySelector('nav');
|
|
180
|
+
expect(nav).toHaveClass('inline-flex');
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
describe('Pagination Button Styling', () => {
|
|
185
|
+
test('buttons have flex and items-center classes', () => {
|
|
186
|
+
const { container } = render(Pagination, { props: { totalPages: 3 } });
|
|
187
|
+
const button = container.querySelector('[aria-label="Previous page"]');
|
|
188
|
+
expect(button).toHaveClass('flex');
|
|
189
|
+
expect(button).toHaveClass('items-center');
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
test('buttons have border classes', () => {
|
|
193
|
+
const { container } = render(Pagination, { props: { totalPages: 3 } });
|
|
194
|
+
const button = container.querySelector('[aria-label="Previous page"]');
|
|
195
|
+
expect(button).toHaveClass('border');
|
|
196
|
+
expect(button).toHaveClass('border-gray-300');
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
test('buttons have bg-white background', () => {
|
|
200
|
+
const { container } = render(Pagination, { props: { totalPages: 3, currentPage: 1 } });
|
|
201
|
+
const nextButton = container.querySelector('[aria-label="Next page"]');
|
|
202
|
+
expect(nextButton).toHaveClass('bg-white');
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test('prev button has rounded-s-lg', () => {
|
|
206
|
+
const { container } = render(Pagination, { props: { totalPages: 3 } });
|
|
207
|
+
const prevButton = container.querySelector('[aria-label="Previous page"]');
|
|
208
|
+
expect(prevButton).toHaveClass('rounded-s-lg');
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
test('next button has rounded-e-lg', () => {
|
|
212
|
+
const { container } = render(Pagination, { props: { totalPages: 3 } });
|
|
213
|
+
const nextButton = container.querySelector('[aria-label="Next page"]');
|
|
214
|
+
expect(nextButton).toHaveClass('rounded-e-lg');
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
test('active page has bg-blue-50', () => {
|
|
218
|
+
const { container } = render(Pagination, { props: { totalPages: 3, currentPage: 2 } });
|
|
219
|
+
const activeButton = container.querySelector('[aria-current="page"]');
|
|
220
|
+
expect(activeButton).toHaveClass('bg-blue-50');
|
|
221
|
+
expect(activeButton).toHaveClass('text-blue-600');
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
test('disabled buttons have opacity-50', () => {
|
|
225
|
+
const { container } = render(Pagination, { props: { totalPages: 5, currentPage: 1 } });
|
|
226
|
+
const prevButton = container.querySelector('[aria-label="Previous page"]');
|
|
227
|
+
expect(prevButton).toHaveClass('opacity-50');
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
describe('Pagination Ellipsis', () => {
|
|
232
|
+
test('shows ellipsis when needed', () => {
|
|
233
|
+
const { container } = render(Pagination, { props: { totalPages: 10, currentPage: 8, maxVisible: 3 } });
|
|
234
|
+
const ellipses = container.querySelectorAll('.cursor-default');
|
|
235
|
+
expect(ellipses.length).toBeGreaterThan(0);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
test('shows page 1 with ellipsis when not in visible range', () => {
|
|
239
|
+
render(Pagination, { props: { totalPages: 10, currentPage: 8, maxVisible: 3 } });
|
|
240
|
+
expect(screen.getByRole('button', { name: '1' })).toBeInTheDocument();
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
describe('Pagination Props', () => {
|
|
245
|
+
test('maxVisible controls visible page count', () => {
|
|
246
|
+
const { container } = render(Pagination, { props: { totalPages: 10, maxVisible: 3, currentPage: 5 } });
|
|
247
|
+
// Should have 3 visible pages plus ellipsis buttons plus prev/next
|
|
248
|
+
const pageButtons = container.querySelectorAll('button');
|
|
249
|
+
expect(pageButtons.length).toBeGreaterThan(3);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
test('showIcons prop works as alias for showPrevNext', () => {
|
|
253
|
+
const { container } = render(Pagination, { props: { totalPages: 5, showIcons: false } });
|
|
254
|
+
expect(container.querySelector('[aria-label="Previous page"]')).not.toBeInTheDocument();
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
test('previousLabel replaces chevron icon', () => {
|
|
258
|
+
render(Pagination, { props: { totalPages: 5, previousLabel: 'Back' } });
|
|
259
|
+
expect(screen.getByText('Back')).toBeInTheDocument();
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
test('nextLabel replaces chevron icon', () => {
|
|
263
|
+
render(Pagination, { props: { totalPages: 5, nextLabel: 'Forward' } });
|
|
264
|
+
expect(screen.getByText('Forward')).toBeInTheDocument();
|
|
265
|
+
});
|
|
266
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Radio.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Radio/Radio.spec.js"],"names":[],"mappings":""}
|