aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/App.test.tsx
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-12-06 18:01:31 +0900
committernsfisis <nsfisis@gmail.com>2025-12-06 18:01:31 +0900
commit17ba3c603e4c522ccca282f6786fff2e0b3f4f6e (patch)
tree9cc28e1dcb0be2a89ada63de2717f061e66aa5cd /src/client/App.test.tsx
parent4f924d8004b6273230b23dcfe73bacbf114e4fac (diff)
downloadkioku-17ba3c603e4c522ccca282f6786fff2e0b3f4f6e.tar.gz
kioku-17ba3c603e4c522ccca282f6786fff2e0b3f4f6e.tar.zst
kioku-17ba3c603e4c522ccca282f6786fff2e0b3f4f6e.zip
feat(client): setup routing with wouter
Add wouter router with pages for home, login, register, and 404. Include tests for all routes using @testing-library/react. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'src/client/App.test.tsx')
-rw-r--r--src/client/App.test.tsx47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/client/App.test.tsx b/src/client/App.test.tsx
new file mode 100644
index 0000000..cd448bf
--- /dev/null
+++ b/src/client/App.test.tsx
@@ -0,0 +1,47 @@
+/**
+ * @vitest-environment jsdom
+ */
+import { cleanup, render, screen } from "@testing-library/react";
+import { afterEach, describe, expect, it } from "vitest";
+import { Router } from "wouter";
+import { memoryLocation } from "wouter/memory-location";
+import { App } from "./App";
+
+function renderWithRouter(path: string) {
+ const { hook } = memoryLocation({ path, static: true });
+ return render(
+ <Router hook={hook}>
+ <App />
+ </Router>,
+ );
+}
+
+afterEach(() => {
+ cleanup();
+});
+
+describe("App routing", () => {
+ it("renders home page at /", () => {
+ renderWithRouter("/");
+ expect(screen.getByRole("heading", { name: "Kioku" })).toBeDefined();
+ expect(screen.getByText("Spaced repetition learning app")).toBeDefined();
+ });
+
+ it("renders login page at /login", () => {
+ renderWithRouter("/login");
+ expect(screen.getByRole("heading", { name: "Login" })).toBeDefined();
+ });
+
+ it("renders register page at /register", () => {
+ renderWithRouter("/register");
+ expect(screen.getByRole("heading", { name: "Register" })).toBeDefined();
+ });
+
+ it("renders 404 page for unknown routes", () => {
+ renderWithRouter("/unknown-route");
+ expect(
+ screen.getByRole("heading", { name: "404 - Not Found" }),
+ ).toBeDefined();
+ expect(screen.getByRole("link", { name: "Go to Home" })).toBeDefined();
+ });
+});