Files
cookbook/test_cookbook.py
T

86 lines
3.2 KiB
Python
Executable File

"""
Automated Integration Tests for WTC Kochbuch & Recipes
"""
import unittest
from fastapi.testclient import TestClient
from app.main import app
from app.database import (
init_db,
add_recipe,
get_all_recipes,
get_recipe,
update_recipe,
delete_recipe,
CHAPTERS
)
class TestCookbookApp(unittest.TestCase):
@classmethod
def setUpClass(cls):
init_db()
cls.client = TestClient(app)
def test_01_cookbook_pages(self):
# 1. Main cookbook view
res = self.client.get("/cookbook")
self.assertEqual(res.status_code, 200)
self.assertIn("Mein Kochbuch", res.text)
self.assertIn("Meine", res.text)
# 2. Recipe new view
res2 = self.client.get("/cookbook/new")
self.assertEqual(res2.status_code, 200)
self.assertIn("Neues Rezept eintragen", res2.text)
def test_02_create_recipe_and_view(self):
# Create recipe via API with source and checkbox 'on'
data = {
"title": "Klassische Tiramisu",
"chapter_number": 9,
"effort": "mittel",
"prep_time": "25 Min",
"cook_time": "0 Min",
"portions": 6,
"ingredients": "500g Mascarpone\n4 frische Eier\n100g Zucker\n200g Löffelbiskuits\nKalter Espresso\nKakaopulver zum Bestäuben",
"instructions": "Eigelb mit Zucker schaumig schlagen.\nMascarpone unterrühren.\nLöffelbiskuits in Espresso tränken und schichten.\nMit Kakaopulver bestäuben und kühlen.",
"notes": "Mindestens 4 Stunden im Kühlschrank durchziehen lassen!",
"source": "Oma Marias italienisches Originalrezept",
"add_to_dishes": "on"
}
res = self.client.post("/api/recipes", data=data)
self.assertEqual(res.status_code, 200)
recipe = res.json()["recipe"]
recipe_id = recipe["id"]
self.assertEqual(recipe["title"], "Klassische Tiramisu")
self.assertEqual(recipe["chapter_number"], 9)
self.assertEqual(recipe.get("source"), "Oma Marias italienisches Originalrezept")
# View recipe detail page
detail_res = self.client.get(f"/cookbook/recipe/{recipe_id}")
self.assertEqual(detail_res.status_code, 200)
self.assertIn("Klassische Tiramisu", detail_res.text)
self.assertIn("500g Mascarpone", detail_res.text)
self.assertIn("Oma Marias italienisches Originalrezept", detail_res.text)
# Edit recipe view
edit_res = self.client.get(f"/cookbook/edit/{recipe_id}")
self.assertEqual(edit_res.status_code, 200)
self.assertIn("Rezept bearbeiten", edit_res.text)
self.assertIn("Oma Marias italienisches Originalrezept", edit_res.text)
# Update recipe with modified source
data["source"] = "Familienkochbuch Seite 42"
del data["add_to_dishes"]
put_res = self.client.put(f"/api/recipes/{recipe_id}", data=data)
self.assertEqual(put_res.status_code, 200)
updated_recipe = put_res.json()["recipe"]
self.assertEqual(updated_recipe.get("source"), "Familienkochbuch Seite 42")
# Clean up
del_res = self.client.delete(f"/api/recipes/{recipe_id}")
self.assertEqual(del_res.status_code, 200)
if __name__ == "__main__":
unittest.main()