from __future__ import annotations import json from threading import Thread from urllib.request import Request, urlopen from spriteforge.studio.server import StudioServer from spriteforge.studio.store import ProjectStore def test_studio_http_project_and_asset(tmp_path): store = ProjectStore.create(tmp_path / "art", "test_project", "Test Project") server = StudioServer(("127.0.0.1", 0), store) thread = Thread(target=server.serve_forever, daemon=True) thread.start() base = f"http://127.0.0.1:{server.server_port}" try: with urlopen(base + "/api/project") as response: assert json.load(response)["id"] == "test_project" body = json.dumps({"id": "agent", "name": "Agent", "kind": "character", "target_width": 60, "target_height": 60}).encode() request = Request(base + "/api/assets", data=body, headers={"Content-Type": "application/json"}) with urlopen(request) as response: assert json.load(response)["assets"][0]["id"] == "agent" with urlopen(base + "/") as response: assert b"SPRITEFORGE // STUDIO" in response.read() finally: server.shutdown() server.server_close()