Files
cookbook/test_wtc.py
T

98 lines
3.1 KiB
Python
Executable File

"""
Automated Integration and Unit Tests for WTC Essen-Zufallsgenerator
"""
import sys
import unittest
from fastapi.testclient import TestClient
from app.main import app
from app.database import (
init_db,
get_all_dishes,
add_dish,
update_dish,
delete_dish,
query_candidates,
CATEGORIES,
EFFORTS
)
class TestWtcApp(unittest.TestCase):
@classmethod
def setUpClass(cls):
init_db()
cls.client = TestClient(app)
# Create a few temporary dishes for test execution
cls.created_dish_ids = []
for i, cat in enumerate(["Reis", "Nudeln", "Kartoffeln", "asiatisch", "Hausmannskost"]):
d = add_dish(f"_Testgericht {cat} {i}", cat, "mittel")
cls.created_dish_ids.append(d["id"])
@classmethod
def tearDownClass(cls):
for did in cls.created_dish_ids:
delete_dish(did)
def test_01_categories_present(self):
self.assertIn("Nudeln", CATEGORIES)
self.assertIn("Reis", CATEGORIES)
self.assertIn("Kartoffeln", CATEGORIES)
self.assertEqual(len(EFFORTS), 3)
def test_02_roll_5_dishes_no_duplicates(self):
payload = {
"slots": [
{"slot_number": 1, "category": "Reis", "efforts": ["mittel"]},
{"slot_number": 2, "category": "Nudeln", "efforts": ["mittel"]},
{"slot_number": 3, "category": "Kartoffeln", "efforts": None},
{"slot_number": 4, "category": "asiatisch", "efforts": ["mittel"]},
{"slot_number": 5, "category": "Hausmannskost", "efforts": None},
]
}
res = self.client.post("/api/roll", json=payload)
self.assertEqual(res.status_code, 200)
data = res.json()
self.assertEqual(data["status"], "ok")
results = data["results"]
self.assertEqual(len(results), 5)
chosen_ids = set()
for r in results:
self.assertEqual(r["status"], "ok")
dish = r["dish"]
self.assertIsNotNone(dish)
self.assertNotIn(dish["id"], chosen_ids)
chosen_ids.add(dish["id"])
def test_03_admin_crud(self):
test_dish_name = "_CRUD_Test_Dish"
# 1. Create
create_res = self.client.post("/api/dishes", json={
"name": test_dish_name,
"category": "Teigig",
"effort": "gering"
})
self.assertEqual(create_res.status_code, 200)
dish_id = create_res.json()["dish"]["id"]
# 2. Read
get_res = self.client.get(f"/api/dishes?search={test_dish_name}")
self.assertEqual(get_res.status_code, 200)
dishes = get_res.json()
self.assertEqual(len(dishes), 1)
# 3. Update
up_res = self.client.put(f"/api/dishes/{dish_id}", json={
"name": test_dish_name + "_upd",
"category": "Teigig",
"effort": "mittel"
})
self.assertEqual(up_res.status_code, 200)
# 4. Delete
del_res = self.client.delete(f"/api/dishes/{dish_id}")
self.assertEqual(del_res.status_code, 200)
if __name__ == "__main__":
unittest.main()