-
-
Anmelden
-
Login-Formular folgt.
+
diff --git a/frontend/src/routes/(public)/login/page.test.ts b/frontend/src/routes/(public)/login/page.test.ts
new file mode 100644
index 0000000..29485a0
--- /dev/null
+++ b/frontend/src/routes/(public)/login/page.test.ts
@@ -0,0 +1,44 @@
+import { describe, it, expect, vi } from 'vitest';
+import { render, screen } from '@testing-library/svelte';
+import Page from './+page.svelte';
+
+vi.mock('$app/stores', async () => {
+ const { readable } = await import('svelte/store');
+ return {
+ page: readable({ url: new URL('http://localhost/login') })
+ };
+});
+
+vi.mock('$app/forms', () => ({
+ enhance: () => ({ destroy: () => {} })
+}));
+
+describe('login page', () => {
+ it('renders the login form', () => {
+ render(Page);
+ expect(screen.getByText('Willkommen zurück')).toBeInTheDocument();
+ });
+
+ it('renders the brand panel', () => {
+ render(Page);
+ expect(screen.getByText('Mealprep')).toBeInTheDocument();
+ });
+
+ it('sets the page title', () => {
+ render(Page);
+ expect(document.title).toBe('Anmelden — Mealprep');
+ });
+
+ it('does not render any navigation chrome', () => {
+ render(Page);
+ expect(screen.queryByRole('navigation')).not.toBeInTheDocument();
+ expect(screen.queryByText('Planer')).not.toBeInTheDocument();
+ expect(screen.queryByText('Rezepte')).not.toBeInTheDocument();
+ });
+
+ it('renders a link to the signup page', () => {
+ render(Page);
+ const link = screen.getByRole('link', { name: /registrieren/i });
+ expect(link).toHaveAttribute('href', '/signup');
+ });
+});