From e358736e38d0643b7524c83376e3b4c65107307c Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Sat, 12 Apr 2025 16:23:38 -0700 Subject: [PATCH] test(date-picker): add unit tests --- tests/DatePicker.test.svelte | 81 -------------- tests/DatePicker/DatePicker.test.svelte | 55 ++++++++++ tests/DatePicker/DatePicker.test.ts | 105 +++++++++++++++++++ tests/DatePicker/DatePickerRange.test.svelte | 8 ++ 4 files changed, 168 insertions(+), 81 deletions(-) delete mode 100644 tests/DatePicker.test.svelte create mode 100644 tests/DatePicker/DatePicker.test.svelte create mode 100644 tests/DatePicker/DatePicker.test.ts create mode 100644 tests/DatePicker/DatePickerRange.test.svelte diff --git a/tests/DatePicker.test.svelte b/tests/DatePicker.test.svelte deleted file mode 100644 index b7bce24a..00000000 --- a/tests/DatePicker.test.svelte +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - { - console.log(e.detail); - }} -> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/DatePicker/DatePicker.test.svelte b/tests/DatePicker/DatePicker.test.svelte new file mode 100644 index 00000000..33592238 --- /dev/null +++ b/tests/DatePicker/DatePicker.test.svelte @@ -0,0 +1,55 @@ + + + { + console.log("change", e.detail); + }} +> + + diff --git a/tests/DatePicker/DatePicker.test.ts b/tests/DatePicker/DatePicker.test.ts new file mode 100644 index 00000000..bd72b875 --- /dev/null +++ b/tests/DatePicker/DatePicker.test.ts @@ -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"); + }); +}); diff --git a/tests/DatePicker/DatePickerRange.test.svelte b/tests/DatePicker/DatePickerRange.test.svelte new file mode 100644 index 00000000..91400b79 --- /dev/null +++ b/tests/DatePicker/DatePickerRange.test.svelte @@ -0,0 +1,8 @@ + + + + + +