Skip to content

Commit 11246f6

Browse files
committed
test(selectable-tile): add unit tests
1 parent 892f35a commit 11246f6

File tree

3 files changed

+130
-15
lines changed

3 files changed

+130
-15
lines changed

tests/SelectableTile.test.svelte

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<script lang="ts">
2+
import { SelectableTile } from "carbon-components-svelte";
3+
4+
export let selected = false;
5+
export let light = false;
6+
export let disabled = false;
7+
export let title = "Test Tile";
8+
export let value = "test-value";
9+
export let name = "test-name";
10+
export let iconDescription = "Test checkmark";
11+
</script>
12+
13+
<SelectableTile
14+
data-testid="selectable-tile"
15+
{selected}
16+
{light}
17+
{disabled}
18+
{title}
19+
{value}
20+
{name}
21+
{iconDescription}
22+
on:select={(e) => {
23+
console.log("select", e.detail);
24+
}}
25+
on:deselect={(e) => {
26+
console.log("deselect", e.detail);
27+
}}
28+
>
29+
Test Tile Content
30+
</SelectableTile>

tests/Tile/SelectableTile.test.ts

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import { render, screen } from "@testing-library/svelte";
2+
import { user } from "../setup-tests";
3+
import SelectableTileTest from "./SelectableTile.test.svelte";
4+
5+
describe("SelectableTile", () => {
6+
it("renders with default props", () => {
7+
render(SelectableTileTest);
8+
const tile = screen.getByTestId("selectable-tile");
9+
expect(tile).toHaveClass("bx--tile");
10+
expect(tile).toHaveClass("bx--tile--selectable");
11+
});
12+
13+
it("renders with selected state", () => {
14+
render(SelectableTileTest, { selected: true });
15+
const tile = screen.getByTestId("selectable-tile");
16+
expect(tile).toHaveClass("bx--tile--is-selected");
17+
});
18+
19+
it("renders with light variant", () => {
20+
render(SelectableTileTest, { light: true });
21+
const tile = screen.getByTestId("selectable-tile");
22+
expect(tile).toHaveClass("bx--tile--light");
23+
});
24+
25+
it("renders with disabled state", () => {
26+
render(SelectableTileTest, { disabled: true });
27+
const tile = screen.getByTestId("selectable-tile");
28+
expect(tile).toHaveClass("bx--tile--disabled");
29+
});
30+
31+
it("renders with custom title and value", () => {
32+
render(SelectableTileTest, {
33+
title: "Custom Title",
34+
value: "custom-value",
35+
});
36+
const input = screen.getByRole("checkbox");
37+
expect(input).toHaveAttribute("title", "Custom Title");
38+
expect(input).toHaveAttribute("value", "custom-value");
39+
});
40+
41+
it("renders with custom name and icon description", () => {
42+
render(SelectableTileTest, {
43+
name: "custom-name",
44+
iconDescription: "Custom checkmark",
45+
});
46+
47+
const input = screen.getByRole("checkbox");
48+
expect(input).toHaveAttribute("name", "custom-name");
49+
50+
const icon = screen.getByTestId("selectable-tile").querySelector("svg");
51+
expect(icon).toHaveAttribute("aria-label", "Custom checkmark");
52+
});
53+
54+
describe("interaction", () => {
55+
it("handles click selection", async () => {
56+
const consoleLog = vi.spyOn(console, "log");
57+
render(SelectableTileTest);
58+
59+
const tile = screen.getByTestId("selectable-tile");
60+
await user.click(tile);
61+
expect(consoleLog).toHaveBeenCalledWith("select", expect.any(String));
62+
});
63+
64+
it("handles click deselection", async () => {
65+
const consoleLog = vi.spyOn(console, "log");
66+
render(SelectableTileTest, { selected: true });
67+
68+
const tile = screen.getByTestId("selectable-tile");
69+
await user.click(tile);
70+
expect(consoleLog).toHaveBeenCalledWith("deselect", expect.any(String));
71+
});
72+
73+
it("prevents selection when disabled", async () => {
74+
const consoleLog = vi.spyOn(console, "log");
75+
render(SelectableTileTest, { disabled: true });
76+
77+
const tile = screen.getByTestId("selectable-tile");
78+
await user.click(tile);
79+
expect(consoleLog).not.toHaveBeenCalled();
80+
});
81+
82+
it("handles keyboard selection", async () => {
83+
const consoleLog = vi.spyOn(console, "log");
84+
render(SelectableTileTest);
85+
86+
await user.keyboard("{Tab}");
87+
await user.keyboard("{Enter}");
88+
expect(consoleLog).toHaveBeenCalledWith("select", expect.any(String));
89+
});
90+
91+
it("handles keyboard deselection", async () => {
92+
const consoleLog = vi.spyOn(console, "log");
93+
render(SelectableTileTest, { selected: true });
94+
95+
await user.keyboard("{Tab}");
96+
await user.keyboard("{Enter}");
97+
expect(consoleLog).toHaveBeenCalledWith("deselect", expect.any(String));
98+
});
99+
});
100+
});

0 commit comments

Comments
 (0)