98 lines
3.1 KiB
Python
Executable File
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()
|