86 lines
3.2 KiB
Python
Executable File
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()
|