tschunkorder/backend/test_api.py

133 lines
No EOL
4.7 KiB
Python

#!/usr/bin/env python3
"""
Test-Skript für die Tschunk Order API
"""
import requests
import json
from datetime import datetime
BASE_URL = "http://localhost:8000"
def test_api():
"""Testet alle API-Endpunkte."""
print("🚀 Starte API-Tests...\n")
# Test 1: Root endpoint
print("1. Teste Root-Endpoint...")
try:
response = requests.get(f"{BASE_URL}/")
print(f"✅ Root endpoint: {response.status_code}")
print(f" Verfügbare Getränke: {response.json()['available_drinks']}")
print(f" Verfügbare Mate-Sorten: {response.json()['available_mate_types']}\n")
except Exception as e:
print(f"❌ Fehler beim Root endpoint: {e}\n")
# Test 2: Getränke anzeigen
print("2. Teste Getränke-Endpoint...")
try:
response = requests.get(f"{BASE_URL}/drinks")
print(f"✅ Getränke endpoint: {response.status_code}")
print(f" Getränke: {response.json()}\n")
except Exception as e:
print(f"❌ Fehler beim Getränke endpoint: {e}\n")
# Test 3: Bestellung erstellen (mit quantity und notes)
print("3. Teste Bestellung erstellen (mit Mengenangabe und Sonderwünschen)...")
test_order = {
"drinks": [
{
"drink_type": "Tschunk",
"mate_type": "Club Mate",
"quantity": 2,
"notes": "Bitte extra kalt servieren"
},
{
"drink_type": "Virgin Tschunk",
"mate_type": "Flora Mate"
# quantity und notes werden nicht angegeben, sollten automatisch 1 bzw. None sein
},
{
"drink_type": "Tschunk Hannover-Mische",
"mate_type": "Club Mate",
"quantity": 3,
"notes": "Ohne Eiswürfel, bitte mit Limettenscheibe"
}
]
}
try:
response = requests.post(
f"{BASE_URL}/orders",
json=test_order,
headers={"Content-Type": "application/json"}
)
print(f"✅ Bestellung erstellt: {response.status_code}")
order_data = response.json()
print(f" Bestell-ID: {order_data['id']}")
print(f" Bestelldatum: {order_data['order_date']}")
print(f" Anzahl Getränke: {len(order_data['drinks'])}")
# Zeige Details der Getränke
for i, drink in enumerate(order_data['drinks']):
notes_info = f" (Anmerkung: {drink['notes']})" if drink.get('notes') else ""
print(f" - Getränk {i+1}: {drink['drink_type']} mit {drink['mate_type']} (Menge: {drink['quantity']}){notes_info}")
# Speichere Order-ID für späteren Test
order_id = order_data['id']
print()
except Exception as e:
print(f"❌ Fehler beim Erstellen der Bestellung: {e}")
return
# Test 4: Alle Bestellungen abrufen
print("4. Teste Alle Bestellungen abrufen...")
try:
response = requests.get(f"{BASE_URL}/orders")
print(f"✅ Alle Bestellungen: {response.status_code}")
orders = response.json()
print(f" Anzahl Bestellungen: {len(orders)}")
for order in orders:
total_quantity = sum(drink['quantity'] for drink in order['drinks'])
drinks_with_notes = sum(1 for drink in order['drinks'] if drink.get('notes'))
print(f" - Bestellung {order['id']}: {len(order['drinks'])} verschiedene Getränke (Gesamtmenge: {total_quantity}, {drinks_with_notes} mit Anmerkungen)")
print()
except Exception as e:
print(f"❌ Fehler beim Abrufen der Bestellungen: {e}\n")
# Test 5: Bestellung löschen
print("5. Teste Bestellung löschen...")
try:
response = requests.delete(f"{BASE_URL}/orders/{order_id}")
print(f"✅ Bestellung gelöscht: {response.status_code}")
print(f" Nachricht: {response.json()['message']}")
print()
except Exception as e:
print(f"❌ Fehler beim Löschen der Bestellung: {e}\n")
# Test 6: Bestätige Löschung
print("6. Bestätige Löschung...")
try:
response = requests.get(f"{BASE_URL}/orders")
orders = response.json()
print(f"✅ Verbleibende Bestellungen: {len(orders)}")
print()
except Exception as e:
print(f"❌ Fehler beim Abrufen der Bestellungen: {e}\n")
print("🎉 API-Tests abgeschlossen!")
if __name__ == "__main__":
print("=" * 50)
print("Tschunk Order API - Test Suite")
print("=" * 50)
print()
print("⚠️ Stelle sicher, dass der Server auf http://localhost:8000 läuft!")
print()
# Frage nach Bestätigung
input("Drücke Enter um fortzufahren...")
print()
test_api()