Skip to content

Commit 93850de

Browse files
committed
merge: test UI batch 7 — InputGroup, InputAddon, Input (10 test)
2 parents 40e5256 + 02cdcc6 commit 93850de

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/** Test UI batch 7 — InputGroup, InputAddon, Input (Checkbox/CheckboxGroup non esistono) */
2+
import { describe, it, expect } from "vitest";
3+
import fs from "node:fs";
4+
import path from "node:path";
5+
6+
const WEB = path.resolve(__dirname, "../../../web");
7+
function readSrc(rel: string) { return fs.readFileSync(path.join(WEB, rel), "utf-8"); }
8+
9+
/* ── InputGroup ── */
10+
describe("InputGroup", () => {
11+
const src = readSrc("app/components/InputGroup.tsx");
12+
13+
it("export InputGroup + InputAddon + Input + tipi InputSize + 3 interface", () => {
14+
expect(src).toMatch(/export function InputGroup\b/);
15+
expect(src).toMatch(/export function InputAddon\b/);
16+
expect(src).toMatch(/export function Input\b/);
17+
expect(src).toContain("export type InputSize");
18+
expect(src).toContain("export interface InputGroupProps");
19+
expect(src).toContain("export interface InputAddonProps");
20+
expect(src).toContain("export interface InputProps");
21+
});
22+
23+
it("InputSize sm/md/lg + ADDON_CLS + INPUT_CLS maps con px/py/text per ogni size", () => {
24+
expect(src).toContain("ADDON_CLS"); expect(src).toContain("INPUT_CLS");
25+
for (const s of ["sm", "md", "lg"]) expect(src).toContain(`${s}:`);
26+
expect(src).toContain("px-2 py-1"); expect(src).toContain("px-3 py-2"); expect(src).toContain("px-4 py-2.5");
27+
});
28+
29+
it("SizeCtx: createContext('md') + Provider + useContext per passare size", () => {
30+
expect(src).toContain("createContext"); expect(src).toContain("useContext");
31+
expect(src).toContain("SizeCtx"); expect(src).toContain("SizeCtx.Provider");
32+
});
33+
34+
it("prefix + suffix addon con borderRight/borderLeft + background var(--color-row)", () => {
35+
expect(src).toContain("{prefix}"); expect(src).toContain("{suffix}");
36+
expect(src).toContain("borderRight"); expect(src).toContain("borderLeft");
37+
expect(src).toContain("var(--color-row)"); expect(src).toContain("var(--color-dim)");
38+
});
39+
40+
it("error state: border red + focus green condizionale", () => {
41+
expect(src).toContain("error ? 'var(--color-red)' : 'var(--color-border)'");
42+
expect(src).toContain("error ? 'var(--color-red)' : 'var(--color-green)'");
43+
expect(src).toContain("{error}"); // error message rendered
44+
});
45+
46+
it("React.Children.map + cloneElement per iniettare stili nell'input child", () => {
47+
expect(src).toContain("React.Children.map"); expect(src).toContain("React.cloneElement");
48+
expect(src).toContain("React.isValidElement");
49+
expect(src).toContain("border: 'none'"); expect(src).toContain("borderRadius: 0");
50+
});
51+
52+
it("focus/blur: onFocusCapture + onBlurCapture cambiano borderColor", () => {
53+
expect(src).toContain("onFocusCapture"); expect(src).toContain("onBlurCapture");
54+
expect(src).toContain("e.currentTarget"); expect(src).toContain("focusBorder");
55+
});
56+
57+
it("InputAddon standalone: position left/right + useContext(SizeCtx)", () => {
58+
expect(src).toContain("position?: 'left' | 'right'");
59+
expect(src).toContain("useContext(SizeCtx)");
60+
expect(src).toContain("position === 'left' ? 'borderRight' : 'borderLeft'");
61+
});
62+
63+
it("Input standalone: extends InputHTMLAttributes + focus/blur con callback originali", () => {
64+
expect(src).toContain("React.InputHTMLAttributes<HTMLInputElement>");
65+
expect(src).toContain("rest.onFocus?.(e)"); expect(src).toContain("rest.onBlur?.(e)");
66+
expect(src).toContain("fullWidth ? 'w-full'");
67+
});
68+
69+
it("styling coerente: font-mono + placeholder dim + bg card + transition-colors", () => {
70+
expect(src).toContain("font-mono");
71+
expect(src).toContain("placeholder:text-[var(--color-dim)]");
72+
expect(src).toContain("bg-[var(--color-card)]");
73+
expect(src).toContain("transition-colors");
74+
});
75+
});

0 commit comments

Comments
 (0)