""" 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()