81 lines
3.2 KiB
Python
81 lines
3.2 KiB
Python
import requests
|
|
import json
|
|
from diplomacy import Game
|
|
|
|
BASE_URL = "http://127.0.0.1:8000"
|
|
|
|
def get_initial_state():
|
|
resp = requests.get(f"{BASE_URL}/game/initial-state")
|
|
return resp.json()
|
|
|
|
def test_possible_orders_default():
|
|
print("--- Testing Default ---")
|
|
state = get_initial_state()
|
|
resp = requests.post(f"{BASE_URL}/calculate/possible-orders", json=state)
|
|
data = resp.json()
|
|
# Expect loc -> list
|
|
if "possible_orders" in data and isinstance(data["possible_orders"], dict):
|
|
first_key = list(data["possible_orders"].keys())[0]
|
|
if isinstance(data["possible_orders"][first_key], list):
|
|
print("OK: Default format is loc -> list")
|
|
else:
|
|
print(f"FAILED: Expected list for {first_key}, got {type(data['possible_orders'][first_key])}")
|
|
else:
|
|
print("FAILED: Response structure incorrect")
|
|
|
|
def test_possible_orders_power():
|
|
print("--- Testing Power Name (FRANCE) ---")
|
|
state = get_initial_state()
|
|
resp = requests.post(f"{BASE_URL}/calculate/possible-orders?power_name=FRANCE", json=state)
|
|
data = resp.json()
|
|
if data.get("power") == "FRANCE" and "possible_orders" in data:
|
|
# Check if only France units are there
|
|
locs = list(data["possible_orders"].keys())
|
|
# Initial France units are at BRE, MAR, PAR
|
|
expected = {"BRE", "MAR", "PAR"}
|
|
if set(locs) == expected:
|
|
print("OK: Filtered by power correctly")
|
|
else:
|
|
print(f"FAILED: Expected locs {expected}, got {locs}")
|
|
else:
|
|
print(f"FAILED: Response structure incorrect: {data}")
|
|
|
|
def test_possible_orders_by_power():
|
|
print("--- Testing By Power ---")
|
|
state = get_initial_state()
|
|
resp = requests.post(f"{BASE_URL}/calculate/possible-orders?by_power=true", json=state)
|
|
data = resp.json()
|
|
if "possible_orders" in data and "FRANCE" in data["possible_orders"]:
|
|
france_orders = data["possible_orders"]["FRANCE"]
|
|
if isinstance(france_orders, dict) and "PAR" in france_orders:
|
|
print("OK: Grouped by power correctly")
|
|
else:
|
|
print(f"FAILED: France orders structure incorrect: {france_orders}")
|
|
else:
|
|
print(f"FAILED: Response structure incorrect or FRANCE missing: {data.keys()}")
|
|
|
|
def test_possible_orders_both():
|
|
print("--- Testing Both (By Power + FRANCE) ---")
|
|
state = get_initial_state()
|
|
resp = requests.post(f"{BASE_URL}/calculate/possible-orders?by_power=true&power_name=FRANCE", json=state)
|
|
data = resp.json()
|
|
# My implementation returns just that power in filtered format if both provided?
|
|
# Actually, my code:
|
|
# if by_power:
|
|
# ...
|
|
# if power_name:
|
|
# return {"power": power_name, "possible_orders": results[power_name]}
|
|
if data.get("power") == "FRANCE" and "possible_orders" in data:
|
|
print("OK: Both parameters handled correctly (returned filtered power)")
|
|
else:
|
|
print(f"FAILED: Response structure incorrect: {data}")
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
test_possible_orders_default()
|
|
test_possible_orders_power()
|
|
test_possible_orders_by_power()
|
|
test_possible_orders_both()
|
|
except Exception as e:
|
|
print(f"Error during testing: {e}")
|