diff options
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/App.test.tsx | 47 | ||||
| -rw-r--r-- | src/client/App.tsx | 13 | ||||
| -rw-r--r-- | src/client/pages/HomePage.tsx | 8 | ||||
| -rw-r--r-- | src/client/pages/LoginPage.tsx | 8 | ||||
| -rw-r--r-- | src/client/pages/NotFoundPage.tsx | 11 | ||||
| -rw-r--r-- | src/client/pages/RegisterPage.tsx | 8 | ||||
| -rw-r--r-- | src/client/pages/index.ts | 4 |
7 files changed, 95 insertions, 4 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(); + }); +}); diff --git a/src/client/App.tsx b/src/client/App.tsx index fa42302..01d843a 100644 --- a/src/client/App.tsx +++ b/src/client/App.tsx @@ -1,8 +1,13 @@ +import { Route, Switch } from "wouter"; +import { HomePage, LoginPage, NotFoundPage, RegisterPage } from "./pages"; + export function App() { return ( - <div> - <h1>Kioku</h1> - <p>Spaced repetition learning app</p> - </div> + <Switch> + <Route path="/" component={HomePage} /> + <Route path="/login" component={LoginPage} /> + <Route path="/register" component={RegisterPage} /> + <Route component={NotFoundPage} /> + </Switch> ); } diff --git a/src/client/pages/HomePage.tsx b/src/client/pages/HomePage.tsx new file mode 100644 index 0000000..1d65484 --- /dev/null +++ b/src/client/pages/HomePage.tsx @@ -0,0 +1,8 @@ +export function HomePage() { + return ( + <div> + <h1>Kioku</h1> + <p>Spaced repetition learning app</p> + </div> + ); +} diff --git a/src/client/pages/LoginPage.tsx b/src/client/pages/LoginPage.tsx new file mode 100644 index 0000000..459e2ce --- /dev/null +++ b/src/client/pages/LoginPage.tsx @@ -0,0 +1,8 @@ +export function LoginPage() { + return ( + <div> + <h1>Login</h1> + <p>Login page coming soon</p> + </div> + ); +} diff --git a/src/client/pages/NotFoundPage.tsx b/src/client/pages/NotFoundPage.tsx new file mode 100644 index 0000000..289dab5 --- /dev/null +++ b/src/client/pages/NotFoundPage.tsx @@ -0,0 +1,11 @@ +import { Link } from "wouter"; + +export function NotFoundPage() { + return ( + <div> + <h1>404 - Not Found</h1> + <p>The page you're looking for doesn't exist.</p> + <Link href="/">Go to Home</Link> + </div> + ); +} diff --git a/src/client/pages/RegisterPage.tsx b/src/client/pages/RegisterPage.tsx new file mode 100644 index 0000000..a7fbb59 --- /dev/null +++ b/src/client/pages/RegisterPage.tsx @@ -0,0 +1,8 @@ +export function RegisterPage() { + return ( + <div> + <h1>Register</h1> + <p>Registration page coming soon</p> + </div> + ); +} diff --git a/src/client/pages/index.ts b/src/client/pages/index.ts new file mode 100644 index 0000000..99cf046 --- /dev/null +++ b/src/client/pages/index.ts @@ -0,0 +1,4 @@ +export { HomePage } from "./HomePage"; +export { LoginPage } from "./LoginPage"; +export { NotFoundPage } from "./NotFoundPage"; +export { RegisterPage } from "./RegisterPage"; |
