@hilum/ui 0.1.1 → 0.1.2

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.
@@ -1,248 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { render, screen } from "@testing-library/react";
3
- import { Button } from "../button";
4
- import { Badge } from "../badge";
5
- import { Input } from "../input";
6
- import { Textarea } from "../textarea";
7
- import { Label } from "../label";
8
- import { Spinner } from "../spinner";
9
- import { Skeleton } from "../skeleton";
10
- import { Separator } from "../separator";
11
- import { Kbd } from "../kbd";
12
-
13
- /* ------------------------------------------------------------------ */
14
- /* Button */
15
- /* ------------------------------------------------------------------ */
16
-
17
- describe("Button", () => {
18
- it("renders as a button element by default", () => {
19
- render(<Button>Click me</Button>);
20
- expect(screen.getByRole("button", { name: "Click me" })).toBeInTheDocument();
21
- });
22
-
23
- it("forwards data-slot attribute", () => {
24
- render(<Button>Test</Button>);
25
- expect(screen.getByRole("button")).toHaveAttribute("data-slot", "button");
26
- });
27
-
28
- it("renders all variants without error", () => {
29
- const variants = [
30
- "default",
31
- "destructive",
32
- "outline",
33
- "secondary",
34
- "brand",
35
- "ghost",
36
- "link",
37
- ] as const;
38
- for (const variant of variants) {
39
- const { unmount } = render(<Button variant={variant}>Btn</Button>);
40
- expect(screen.getByRole("button")).toBeInTheDocument();
41
- unmount();
42
- }
43
- });
44
-
45
- it("renders all sizes without error", () => {
46
- const sizes = ["default", "xs", "sm", "lg", "icon", "icon-xs", "icon-sm", "icon-lg"] as const;
47
- for (const size of sizes) {
48
- const { unmount } = render(<Button size={size}>B</Button>);
49
- expect(screen.getByRole("button")).toBeInTheDocument();
50
- unmount();
51
- }
52
- });
53
-
54
- it("renders as child element when asChild is true", () => {
55
- render(
56
- <Button asChild>
57
- <a href="/home">Home</a>
58
- </Button>,
59
- );
60
- expect(screen.getByRole("link", { name: "Home" })).toBeInTheDocument();
61
- });
62
-
63
- it("is disabled when disabled prop is set", () => {
64
- render(<Button disabled>Disabled</Button>);
65
- expect(screen.getByRole("button")).toBeDisabled();
66
- });
67
- });
68
-
69
- /* ------------------------------------------------------------------ */
70
- /* Badge */
71
- /* ------------------------------------------------------------------ */
72
-
73
- describe("Badge", () => {
74
- it("renders children", () => {
75
- render(<Badge>Active</Badge>);
76
- expect(screen.getByText("Active")).toBeInTheDocument();
77
- });
78
-
79
- it("renders all variants without error", () => {
80
- const variants = [
81
- "default",
82
- "secondary",
83
- "outline",
84
- "brand",
85
- "success",
86
- "warning",
87
- "destructive",
88
- ] as const;
89
- for (const variant of variants) {
90
- const { unmount } = render(<Badge variant={variant}>v</Badge>);
91
- expect(screen.getByText("v")).toBeInTheDocument();
92
- unmount();
93
- }
94
- });
95
-
96
- it("forwards className", () => {
97
- const { container } = render(<Badge className="custom-class">Badge</Badge>);
98
- expect(container.firstChild).toHaveClass("custom-class");
99
- });
100
- });
101
-
102
- /* ------------------------------------------------------------------ */
103
- /* Input */
104
- /* ------------------------------------------------------------------ */
105
-
106
- describe("Input", () => {
107
- it("renders an input element", () => {
108
- render(<Input />);
109
- expect(screen.getByRole("textbox")).toBeInTheDocument();
110
- });
111
-
112
- it("carries data-slot attribute", () => {
113
- render(<Input />);
114
- expect(screen.getByRole("textbox")).toHaveAttribute("data-slot", "input");
115
- });
116
-
117
- it("accepts a placeholder", () => {
118
- render(<Input placeholder="Type here" />);
119
- expect(screen.getByPlaceholderText("Type here")).toBeInTheDocument();
120
- });
121
-
122
- it("is disabled when disabled prop is set", () => {
123
- render(<Input disabled />);
124
- expect(screen.getByRole("textbox")).toBeDisabled();
125
- });
126
- });
127
-
128
- /* ------------------------------------------------------------------ */
129
- /* Textarea */
130
- /* ------------------------------------------------------------------ */
131
-
132
- describe("Textarea", () => {
133
- it("renders a textarea", () => {
134
- render(<Textarea />);
135
- expect(screen.getByRole("textbox")).toBeInTheDocument();
136
- });
137
-
138
- it("carries data-slot attribute", () => {
139
- render(<Textarea />);
140
- expect(screen.getByRole("textbox")).toHaveAttribute("data-slot", "textarea");
141
- });
142
-
143
- it("accepts placeholder", () => {
144
- render(<Textarea placeholder="Write here" />);
145
- expect(screen.getByPlaceholderText("Write here")).toBeInTheDocument();
146
- });
147
- });
148
-
149
- /* ------------------------------------------------------------------ */
150
- /* Label */
151
- /* ------------------------------------------------------------------ */
152
-
153
- describe("Label", () => {
154
- it("renders label text", () => {
155
- render(<Label>Username</Label>);
156
- expect(screen.getByText("Username")).toBeInTheDocument();
157
- });
158
-
159
- it("associates with an input via htmlFor", () => {
160
- render(
161
- <>
162
- <Label htmlFor="input-id">Name</Label>
163
- <input id="input-id" />
164
- </>,
165
- );
166
- expect(screen.getByLabelText("Name")).toBeInTheDocument();
167
- });
168
- });
169
-
170
- /* ------------------------------------------------------------------ */
171
- /* Spinner */
172
- /* ------------------------------------------------------------------ */
173
-
174
- describe("Spinner", () => {
175
- it('renders with role="status"', () => {
176
- render(<Spinner />);
177
- expect(screen.getByRole("status")).toBeInTheDocument();
178
- });
179
-
180
- it("has accessible label", () => {
181
- render(<Spinner />);
182
- expect(screen.getByRole("status")).toHaveAttribute("aria-label", "Loading");
183
- });
184
-
185
- it("renders all sizes without error", () => {
186
- const sizes = ["xs", "sm", "default", "lg", "xl"] as const;
187
- for (const size of sizes) {
188
- const { unmount } = render(<Spinner size={size} />);
189
- expect(screen.getByRole("status")).toBeInTheDocument();
190
- unmount();
191
- }
192
- });
193
- });
194
-
195
- /* ------------------------------------------------------------------ */
196
- /* Skeleton */
197
- /* ------------------------------------------------------------------ */
198
-
199
- describe("Skeleton", () => {
200
- it("renders a div with data-slot", () => {
201
- const { container } = render(<Skeleton />);
202
- expect(container.firstChild).toHaveAttribute("data-slot", "skeleton");
203
- });
204
-
205
- it("forwards className", () => {
206
- const { container } = render(<Skeleton className="w-24 h-4" />);
207
- expect(container.firstChild).toHaveClass("w-24", "h-4");
208
- });
209
- });
210
-
211
- /* ------------------------------------------------------------------ */
212
- /* Separator */
213
- /* ------------------------------------------------------------------ */
214
-
215
- describe("Separator", () => {
216
- it("renders a separator with role", () => {
217
- render(<Separator />);
218
- expect(screen.getByRole("none")).toBeInTheDocument();
219
- });
220
-
221
- it("renders horizontal orientation without error", () => {
222
- const { unmount } = render(<Separator orientation="horizontal" />);
223
- expect(screen.getByRole("none")).toBeInTheDocument();
224
- unmount();
225
- });
226
-
227
- it("renders vertical orientation without error", () => {
228
- const { unmount } = render(<Separator orientation="vertical" />);
229
- expect(screen.getByRole("none")).toBeInTheDocument();
230
- unmount();
231
- });
232
- });
233
-
234
- /* ------------------------------------------------------------------ */
235
- /* Kbd */
236
- /* ------------------------------------------------------------------ */
237
-
238
- describe("Kbd", () => {
239
- it("renders keyboard shortcut text", () => {
240
- render(<Kbd>⌘K</Kbd>);
241
- expect(screen.getByText("⌘K")).toBeInTheDocument();
242
- });
243
-
244
- it("renders as kbd element", () => {
245
- const { container } = render(<Kbd>Esc</Kbd>);
246
- expect(container.querySelector("kbd")).toBeInTheDocument();
247
- });
248
- });