import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from fastapi.testclient import TestClient from app.main import app, create_auth_token, COOKIE_NAME sys.stdout.reconfigure(encoding='utf-8') client = TestClient(app) token = create_auth_token("admin") client.cookies.set(COOKIE_NAME, token) def test_routes(): # Test Home res = client.get("/") assert res.status_code == 200, f"Home failed: {res.status_code}" assert "Wochenmenü" in res.text or "Wochenmen" in res.text assert "Shuffle" in res.text print("✓ Home page (/) OK: contains Wochenmenü and Shuffle") # Test Cookbook res = client.get("/cookbook") assert res.status_code == 200, f"Cookbook failed: {res.status_code}" assert "Grießnockerlsuppe" in res.text assert "Fleischpflanzerl" in res.text assert "Kaiserschmarren" in res.text assert "Kartoffelsalat" in res.text print("✓ Cookbook page (/cookbook) OK: 200 OK and recipes found") # Test Recipe Detail res = client.get("/cookbook/recipe/1") assert res.status_code == 200, f"Recipe 1 failed: {res.status_code}" print("✓ Recipe detail (/cookbook/recipe/1) OK") # Verify no double numbers in /cookbook import re res_cb = client.get("/cookbook") pattern = re.compile(r'
\s*((?:Schritt\s*\d+[:.]?|\d+[\.\)\:])\s*[^<]*)', re.IGNORECASE) matches = pattern.findall(res_cb.text) assert len(matches) == 0, f"Found {len(matches)} double numbers in /cookbook: {matches[:3]}" print("✓ Zero double numbers in rendered /cookbook steps confirmed!") # Verify subtitle behavior: # 1. Kressesuppe is in TOC, without subtitle toc_titles = re.findall(r'([^<]+)', res_cb.text) assert "Kressesuppe" in toc_titles, "Kressesuppe not found in TOC titles!" assert "Kressesuppe mit Croutons" not in toc_titles, "Old combined title still in TOC!" print("✓ TOC Title check: Only 'Kressesuppe' appears in TOC, not the subtitle.") # 2. Recipe page renders title and subtitle assert '

Kressesuppe

' in res_cb.text assert '
mit Croutons
' in res_cb.text print("✓ Cookbook recipe page check: Title is Kressesuppe, Subtitle is mit Croutons.") # 3. Recipe detail page renders title and subtitle res_detail = client.get("/cookbook/recipe/51") assert '

Kressesuppe

' in res_detail.text assert '
mit Croutons
' in res_detail.text print("✓ Recipe detail page check: Title and subtitle present.") print("\nAll route tests passed successfully!") if __name__ == "__main__": test_routes()