Files
cookbook/scripts/test_endpoints.py

66 lines
2.7 KiB
Python

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'<div class="step-text">\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'<span class="toc-rec-title">([^<]+)</span>', 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 '<h3 class="recipe-title">Kressesuppe</h3>' in res_cb.text
assert '<div class="recipe-subtitle">mit Croutons</div>' 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 '<h2 class="recipe-title">Kressesuppe</h2>' in res_detail.text
assert '<div class="recipe-subtitle">mit Croutons</div>' in res_detail.text
print("✓ Recipe detail page check: Title and subtitle present.")
print("\nAll route tests passed successfully!")
if __name__ == "__main__":
test_routes()