UNPKG

vueless

Version:

Vue Styleless UI Component Library, powered by Tailwind CSS.

240 lines (188 loc) 6.27 kB
import { mount } from "@vue/test-utils"; import { describe, it, expect } from "vitest"; import USwitch from "../USwitch.vue"; import ULabel from "../../ui.form-label/ULabel.vue"; import UIcon from "../../ui.image-icon/UIcon.vue"; import type { Props } from "../types.ts"; describe("USwitch.vue", () => { describe("Props", () => { it("Model Value – sets the correct model value", async () => { const modelValue = true; const component = mount(USwitch, { props: { modelValue, "onUpdate:modelValue": (e) => component.setProps({ modelValue: e }), }, }); const inputElement = component.find("input"); await inputElement.trigger("click"); expect(component.emitted("update:modelValue")![0][0]).toBe(false); await inputElement.trigger("click"); expect(component.emitted("update:modelValue")![1][0]).toBe(true); }); it("Label – passes label to ULabel component", () => { const labelText = "Test Label"; const component = mount(USwitch, { props: { label: labelText, }, }); expect(component.getComponent(ULabel).props("label")).toBe(labelText); }); it("Label Align – passes labelAlign prop to ULabel component", () => { const labelAlign = "left"; const component = mount(USwitch, { props: { label: "Test Label", labelAlign, }, }); expect(component.getComponent(ULabel).props("align")).toBe(labelAlign); }); it("Description – passes description to ULabel component", () => { const descriptionText = "This is a description"; const component = mount(USwitch, { props: { description: descriptionText, }, }); expect(component.getComponent(ULabel).props("description")).toBe(descriptionText); }); it("Size – applies the correct size class", () => { const size = { sm: "size-3", md: "size-4", lg: "size-5", }; Object.entries(size).forEach(([size, classes]) => { const component = mount(USwitch, { props: { size: size as Props["size"], }, }); expect(component.get("[vl-key='circle']").attributes("class")).toContain(classes); }); }); it("Color – applies the correct color class when checked", () => { const colors = [ "primary", "secondary", "error", "warning", "success", "info", "notice", "neutral", "grayscale", ]; colors.forEach((color) => { const component = mount(USwitch, { props: { color: color as Props["color"], modelValue: true, }, }); expect(component.find("label").attributes("class")).toContain(color); }); }); it("Toggle Icon – shows toggle icon when toggleIcon prop is true", () => { const component = mount(USwitch, { props: { toggleIcon: true, modelValue: true, }, }); const iconComponent = component.findComponent(UIcon); expect(iconComponent.props("name")).toBe("check"); }); it("Toggle Icon – shows correct toggle icon when switch is off", () => { const component = mount(USwitch, { props: { toggleIcon: true, modelValue: false, }, }); const iconComponent = component.findComponent(UIcon); expect(iconComponent.props("name")).toBe("close"); }); it("Toggle Label – shows toggle icon when toggleLabel prop is true", () => { const component = mount(USwitch, { props: { toggleLabel: true, modelValue: true, }, }); expect(component.find("[vl-key='toggleLabel']").text()).toBe("On"); }); it("Toggle Label – shows correct toggle label when switch is off", () => { const component = mount(USwitch, { props: { toggleLabel: true, modelValue: false, }, }); expect(component.find("[vl-key='toggleLabel']").text()).toBe("Off"); }); it("Disabled – applies disabled attribute when disabled prop is true", () => { const component = mount(USwitch, { props: { disabled: true, }, }); expect(component.find("input").attributes("disabled")).toBeDefined(); const labelComponent = component.findComponent(ULabel); expect(labelComponent.props("disabled")).toBe(true); expect(component.find("label").attributes("class")).toContain("pointer-events-none"); }); it("Id – applies the correct id attribute", () => { const id = "test-switch-id"; const component = mount(USwitch, { props: { id, }, }); expect(component.find("input").attributes("id")).toBe(id); }); it("Data Test – applies the correct data-test attribute", () => { const dataTest = "test-switch"; const component = mount(USwitch, { props: { dataTest, }, }); expect(component.findComponent(ULabel).attributes("data-test")).toBe(dataTest); }); }); describe("Slots", () => { it("Label – renders custom content from label slot", () => { const customLabelContent = "Custom Label Content"; const component = mount(USwitch, { props: { label: "Default Label", }, slots: { label: customLabelContent, }, }); expect(component.findAll("label")[1].text()).toBe(customLabelContent); }); it("Label – exposes label prop to slot", () => { const defaultLabel = "Test Label"; const component = mount(USwitch, { props: { label: defaultLabel, }, slots: { label: "Modified {{ params.label }}", }, }); expect(component.findAll("label")[1].text()).toBe(`Modified ${defaultLabel}`); }); }); describe("Exposed properties", () => { it("Wrapper element – exposes wrapperRef", () => { const component = mount(USwitch); expect(component.vm.wrapperRef).toBeDefined(); }); }); });