import pytest import subprocess import sys from pathlib import Path API_SERVER_PATH = Path(__file__).parent.parent / "api_server.py" class TestApiServerSyntax: def test_api_server_syntax(self): """Test that api_server.py has valid Python syntax.""" result = subprocess.run( [sys.executable, "-m", "py_compile", str(API_SERVER_PATH)], capture_output=True, text=True ) assert result.returncode == 0, f"Syntax error in api_server.py:\n{result.stderr}" def test_api_server_can_parse(self): """Test that api_server.py can be parsed.""" result = subprocess.run( [sys.executable, "-c", f"import ast; ast.parse(open('{API_SERVER_PATH}').read())"], capture_output=True, text=True ) assert result.returncode == 0, f"Parse error:\n{result.stderr}" class TestModelUsedAssignment: def test_model_used_logic(self): """Test the model_used assignment logic.""" test_cases = [ {"fallback_to_flux": True, "image_model": "flux", "expected": "flux"}, {"fallback_to_flux": True, "image_model": "ssd", "expected": "ssd"}, {"fallback_to_flux": False, "image_model": "flux", "expected": "flux"}, {"fallback_to_flux": False, "image_model": "ssd", "expected": "ssd"}, {"fallback_to_flux": True, "image_model": None, "expected": None}, {"fallback_to_flux": False, "image_model": None, "expected": None}, ] for tc in test_cases: fallback = tc["fallback_to_flux"] img_model = tc["image_model"] expected = tc["expected"] result = img_model if not fallback or img_model == "flux" else img_model assert result == expected, f"Failed for {tc}: got {result}, expected {expected}" def test_model_used_fallback_to_flux(self): """Test that fallback to flux works correctly.""" image_model = "ssd" fallback_to_flux = True result = image_model if not fallback_to_flux or image_model == "flux" else image_model assert result == "ssd" image_model = "flux" result = image_model if not fallback_to_flux or image_model == "flux" else image_model assert result == "flux" class TestStoriesStructure: def test_stories_response_structure(self): """Test that /api/stories returns expected structure.""" import requests resp = requests.get("https://cybermedia-darkmedia-x-api.hf.space/api/stories", timeout=10) assert resp.status_code == 200 data = resp.json() assert "stories" in data assert isinstance(data["stories"], list) for story in data["stories"]: assert "id" in story assert "title" in story assert "image_count" in story assert "image_model" in story def test_stories_endpoint_count(self): """Test that stories endpoint returns stories.""" import requests resp = requests.get("https://cybermedia-darkmedia-x-api.hf.space/api/stories", timeout=10) data = resp.json() assert len(data["stories"]) > 0