mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-14 18:01:06 +00:00
test(date-picker): add unit tests
This commit is contained in:
parent
f09c2e2c31
commit
e358736e38
4 changed files with 168 additions and 81 deletions
|
@ -1,81 +0,0 @@
|
|||
<script lang="ts">
|
||||
import {
|
||||
DatePicker,
|
||||
DatePickerSkeleton,
|
||||
DatePickerInput,
|
||||
} from "carbon-components-svelte";
|
||||
import { Russian } from "flatpickr/dist/l10n/ru.js";
|
||||
</script>
|
||||
|
||||
<DatePicker
|
||||
locale={Russian}
|
||||
datePickerType="single"
|
||||
flatpickrProps={{ static: true }}
|
||||
on:change
|
||||
>
|
||||
<DatePickerInput labelText="Meeting date" placeholder="mm/dd/yyyy" on:paste />
|
||||
</DatePicker>
|
||||
|
||||
<DatePicker
|
||||
locale="az"
|
||||
on:change={(e) => {
|
||||
console.log(e.detail);
|
||||
}}
|
||||
>
|
||||
<DatePickerInput
|
||||
labelText="Date of birth"
|
||||
helperText="Example: 01/12/1990"
|
||||
placeholder="mm/dd/yyyy"
|
||||
/>
|
||||
</DatePicker>
|
||||
|
||||
<DatePicker>
|
||||
<DatePickerInput
|
||||
hideLabel
|
||||
labelText="Date of birth"
|
||||
placeholder="mm/dd/yyyy"
|
||||
/>
|
||||
</DatePicker>
|
||||
|
||||
<DatePicker light>
|
||||
<DatePickerInput labelText="Date of birth" placeholder="mm/dd/yyyy" />
|
||||
</DatePicker>
|
||||
|
||||
<DatePicker>
|
||||
<DatePickerInput
|
||||
size="xl"
|
||||
labelText="Date of birth"
|
||||
placeholder="mm/dd/yyyy"
|
||||
/>
|
||||
</DatePicker>
|
||||
|
||||
<DatePicker>
|
||||
<DatePickerInput
|
||||
size="sm"
|
||||
labelText="Date of birth"
|
||||
placeholder="mm/dd/yyyy"
|
||||
/>
|
||||
</DatePicker>
|
||||
|
||||
<DatePicker>
|
||||
<DatePickerInput
|
||||
invalid
|
||||
invalidText="Invalid date"
|
||||
labelText="Date of birth"
|
||||
placeholder="mm/dd/yyyy"
|
||||
/>
|
||||
</DatePicker>
|
||||
|
||||
<DatePicker>
|
||||
<DatePickerInput
|
||||
disabled
|
||||
labelText="Date of birth"
|
||||
placeholder="mm/dd/yyyy"
|
||||
/>
|
||||
</DatePicker>
|
||||
|
||||
<DatePicker valueFrom="" valueTo="" datePickerType="single">
|
||||
<DatePickerInput labelText="Schedule a meeting" placeholder="mm/dd/yyyy" />
|
||||
</DatePicker>
|
||||
|
||||
<DatePickerSkeleton />
|
55
tests/DatePicker/DatePicker.test.svelte
Normal file
55
tests/DatePicker/DatePicker.test.svelte
Normal file
|
@ -0,0 +1,55 @@
|
|||
<script lang="ts">
|
||||
import { DatePicker, DatePickerInput } from "carbon-components-svelte";
|
||||
import type { ComponentProps } from "svelte";
|
||||
|
||||
export let datePickerType: ComponentProps<DatePicker>["datePickerType"] =
|
||||
"simple";
|
||||
export let value = "";
|
||||
export let valueFrom = "";
|
||||
export let valueTo = "";
|
||||
export let dateFormat = "m/d/Y";
|
||||
export let maxDate: ComponentProps<DatePicker>["maxDate"] = null;
|
||||
export let minDate: ComponentProps<DatePicker>["minDate"] = null;
|
||||
export let locale: ComponentProps<DatePicker>["locale"] = "en";
|
||||
export let short = false;
|
||||
export let light = false;
|
||||
export let flatpickrProps: ComponentProps<DatePicker>["flatpickrProps"] = {
|
||||
static: true,
|
||||
};
|
||||
export let disabled = false;
|
||||
export let invalid = false;
|
||||
export let invalidText = "";
|
||||
export let warn = false;
|
||||
export let warnText = "";
|
||||
export let helperText = "";
|
||||
export let hideLabel = false;
|
||||
</script>
|
||||
|
||||
<DatePicker
|
||||
{datePickerType}
|
||||
{value}
|
||||
{valueFrom}
|
||||
{valueTo}
|
||||
{dateFormat}
|
||||
{maxDate}
|
||||
{minDate}
|
||||
{locale}
|
||||
{short}
|
||||
{light}
|
||||
{flatpickrProps}
|
||||
on:change={(e) => {
|
||||
console.log("change", e.detail);
|
||||
}}
|
||||
>
|
||||
<DatePickerInput
|
||||
labelText="Date"
|
||||
placeholder="mm/dd/yyyy"
|
||||
{disabled}
|
||||
{invalid}
|
||||
{invalidText}
|
||||
{warn}
|
||||
{warnText}
|
||||
{helperText}
|
||||
{hideLabel}
|
||||
/>
|
||||
</DatePicker>
|
105
tests/DatePicker/DatePicker.test.ts
Normal file
105
tests/DatePicker/DatePicker.test.ts
Normal file
|
@ -0,0 +1,105 @@
|
|||
import { render, screen } from "@testing-library/svelte";
|
||||
import { user } from "../setup-tests";
|
||||
import DatePicker from "./DatePicker.test.svelte";
|
||||
import DatePickerRange from "./DatePickerRange.test.svelte";
|
||||
|
||||
describe("DatePicker", () => {
|
||||
it("renders with default props", async () => {
|
||||
render(DatePicker);
|
||||
|
||||
const input = screen.getByLabelText("Date");
|
||||
|
||||
expect(input).toBeInTheDocument();
|
||||
expect(input).toHaveAttribute("placeholder", "mm/dd/yyyy");
|
||||
|
||||
await user.type(input, "01/01/2023");
|
||||
expect(input).toHaveValue("01/01/2023");
|
||||
});
|
||||
|
||||
it("renders light variant", () => {
|
||||
const { container } = render(DatePicker, { light: true });
|
||||
|
||||
const wrapper = container.querySelector(".bx--date-picker");
|
||||
expect(wrapper).toHaveClass("bx--date-picker--light");
|
||||
});
|
||||
|
||||
it("renders short variant", () => {
|
||||
const { container } = render(DatePicker, { short: true });
|
||||
|
||||
const wrapper = container.querySelector(".bx--date-picker");
|
||||
expect(wrapper).toHaveClass("bx--date-picker--short");
|
||||
});
|
||||
|
||||
it("renders single mode", async () => {
|
||||
const { container } = render(DatePicker, { datePickerType: "single" });
|
||||
|
||||
const input = screen.getByLabelText("Date");
|
||||
expect(input).toHaveAttribute("placeholder", "mm/dd/yyyy");
|
||||
|
||||
const wrapper = container.querySelector(".bx--date-picker");
|
||||
expect(wrapper).toHaveClass("bx--date-picker--single");
|
||||
|
||||
expect(
|
||||
screen.queryByLabelText("calendar-container"),
|
||||
).not.toBeInTheDocument();
|
||||
await user.click(input);
|
||||
expect(screen.getByLabelText("calendar-container")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("renders range mode", async () => {
|
||||
const { container } = render(DatePickerRange);
|
||||
|
||||
const inputStart = screen.getByLabelText("Start date");
|
||||
const inputEnd = screen.getByLabelText("End date");
|
||||
|
||||
expect(inputStart).toHaveAttribute("placeholder", "mm/dd/yyyy");
|
||||
expect(inputEnd).toHaveAttribute("placeholder", "mm/dd/yyyy");
|
||||
|
||||
const wrapper = container.querySelector(".bx--date-picker");
|
||||
expect(wrapper).toHaveClass("bx--date-picker--range");
|
||||
|
||||
expect(
|
||||
screen.queryByLabelText("calendar-container"),
|
||||
).not.toBeInTheDocument();
|
||||
await user.click(inputStart);
|
||||
expect(screen.getByLabelText("calendar-container")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("handles disabled state", () => {
|
||||
render(DatePicker, { disabled: true });
|
||||
const input = screen.getByPlaceholderText("mm/dd/yyyy");
|
||||
expect(input).toBeDisabled();
|
||||
});
|
||||
|
||||
it("handles invalid state", () => {
|
||||
const { container } = render(DatePicker, {
|
||||
invalid: true,
|
||||
invalidText: "Invalid date",
|
||||
});
|
||||
expect(screen.getByText("Invalid date")).toBeInTheDocument();
|
||||
const wrapper = container.querySelector(".bx--date-picker-input__wrapper");
|
||||
expect(wrapper).toHaveClass("bx--date-picker-input__wrapper--invalid");
|
||||
});
|
||||
|
||||
it("handles warning state", () => {
|
||||
const { container } = render(DatePicker, {
|
||||
warn: true,
|
||||
warnText: "Warning message",
|
||||
});
|
||||
expect(screen.getByText("Warning message")).toBeInTheDocument();
|
||||
const wrapper = container.querySelector(".bx--date-picker-input__wrapper");
|
||||
expect(wrapper).toHaveClass("bx--date-picker-input__wrapper--warn");
|
||||
});
|
||||
|
||||
it("handles helper text", () => {
|
||||
render(DatePicker, { helperText: "Helper message" });
|
||||
expect(screen.getByText("Helper message")).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("handles hidden label", () => {
|
||||
render(DatePicker, { hideLabel: true });
|
||||
const input = screen.getByLabelText("Date");
|
||||
expect(input).toHaveAttribute("placeholder", "mm/dd/yyyy");
|
||||
expect(screen.getByText("Date")).toHaveClass("bx--visually-hidden");
|
||||
});
|
||||
});
|
8
tests/DatePicker/DatePickerRange.test.svelte
Normal file
8
tests/DatePicker/DatePickerRange.test.svelte
Normal file
|
@ -0,0 +1,8 @@
|
|||
<script lang="ts">
|
||||
import { DatePicker, DatePickerInput } from "carbon-components-svelte";
|
||||
</script>
|
||||
|
||||
<DatePicker datePickerType="range" on:change>
|
||||
<DatePickerInput labelText="Start date" placeholder="mm/dd/yyyy" />
|
||||
<DatePickerInput labelText="End date" placeholder="mm/dd/yyyy" />
|
||||
</DatePicker>
|
Loading…
Add table
Add a link
Reference in a new issue