- Vitest multi-project setup (unit / integration / component) - Real-Postgres integration harness via in-process PGlite (TEST_DATABASE_URL override), migrations applied per worker; production code untouched - Unit: routing, locale, validation/Zod schemas, metadata, mail, site-theme, marquee, media, portfolio helpers, plus architecture-rule tests - Integration: Prisma data layer, API routes, and all server actions - Component: UI primitives and form components (jsdom + Testing Library) - 371 tests passing
29 lines
1.2 KiB
TypeScript
29 lines
1.2 KiB
TypeScript
import { render, screen } from "@testing-library/react";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
|
|
import { MarqueeSettingsForm } from "@/components/admin/marquee-settings-form";
|
|
import { buildDefaultMarqueeSettings } from "@/lib/marquee-settings";
|
|
|
|
describe("MarqueeSettingsForm", () => {
|
|
it("renders a textarea per row with german default values", () => {
|
|
const settings = buildDefaultMarqueeSettings();
|
|
settings.locales.de.row1 = "First row value";
|
|
render(<MarqueeSettingsForm action={vi.fn()} initialSettings={settings} />);
|
|
|
|
for (const name of ["row1-de", "row2-de", "row3-de", "row4-de"]) {
|
|
const field = document.querySelector(`textarea[name="${name}"]`);
|
|
expect(field).not.toBeNull();
|
|
}
|
|
expect((document.querySelector('textarea[name="row1-de"]') as HTMLTextAreaElement).value).toBe(
|
|
"First row value",
|
|
);
|
|
});
|
|
|
|
it("wires the server action onto the form and renders a submit button", () => {
|
|
const action = vi.fn();
|
|
render(<MarqueeSettingsForm action={action} initialSettings={buildDefaultMarqueeSettings()} />);
|
|
expect(document.querySelector("form#marquee-settings-form")).not.toBeNull();
|
|
expect(screen.getByRole("button", { name: /save marquee/i })).toBeInTheDocument();
|
|
});
|
|
});
|