52839a9bc8
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G796GsLCvJQKVN7hwV2cDx
83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
import importlib
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture
|
|
def client(tmp_path, monkeypatch):
|
|
monkeypatch.setenv("LYRA_DB_PATH", str(tmp_path / "test.db"))
|
|
from lyra import llm
|
|
monkeypatch.setattr(llm, "embed", lambda texts: [[0.1, 0.2, 0.3] for _ in texts])
|
|
import lyra.memory as memory
|
|
importlib.reload(memory)
|
|
import lyra.poker as poker
|
|
importlib.reload(poker)
|
|
import lyra.web.server as server
|
|
importlib.reload(server)
|
|
from fastapi.testclient import TestClient
|
|
return TestClient(server.app), poker
|
|
|
|
|
|
def test_post_stack_logs_and_returns_state(client):
|
|
c, poker = client
|
|
poker.start_session(venue="Meadows", stakes="1/3", buy_in=400)
|
|
r = c.post("/session/stack", json={"amount": 373})
|
|
assert r.status_code == 200
|
|
body = r.json()
|
|
assert body["ok"] is True
|
|
assert body["stack"]["current"] == 373
|
|
assert body["stack"]["net"] == pytest.approx(-27)
|
|
|
|
|
|
def test_post_stack_without_session_errors(client):
|
|
c, _ = client
|
|
r = c.post("/session/stack", json={"amount": 373})
|
|
assert r.json()["ok"] is False
|
|
assert "error" in r.json()
|
|
|
|
|
|
def test_post_buyin_increments_total(client):
|
|
c, poker = client
|
|
poker.start_session(buy_in=400)
|
|
r = c.post("/session/buyin", json={"amount": 200})
|
|
assert r.json()["buy_in_total"] == pytest.approx(600)
|
|
|
|
|
|
def test_post_session_starts_live(client):
|
|
c, poker = client
|
|
r = c.post("/session", json={"venue": "Wheeling", "stakes": "1/3", "buy_in": 400})
|
|
sid = r.json()["id"]
|
|
assert poker.live_session()["id"] == sid
|
|
|
|
|
|
def test_post_hand_edit_and_delete(client):
|
|
c, poker = client
|
|
poker.start_session(buy_in=400)
|
|
r = c.post("/session/hand", json={"position": "BTN", "hole_cards": "22", "result": 120})
|
|
assert r.json()["ok"] is True
|
|
hid = r.json()["id"]
|
|
r2 = c.patch(f"/hand/{hid}", json={"hole_cards": "2c2d"})
|
|
assert r2.json()["ok"] is True
|
|
assert r2.json()["hand"]["hole_cards"] == "2c2d"
|
|
r3 = c.delete(f"/hand/{hid}")
|
|
assert r3.json()["ok"] is True
|
|
assert poker.get_hand(hid) is None
|
|
|
|
|
|
def test_post_read(client):
|
|
c, poker = client
|
|
poker.start_session(buy_in=400)
|
|
r = c.post("/session/read", json={"note": "3-bets light", "name": "James K"})
|
|
assert r.json()["ok"] is True
|
|
assert isinstance(r.json()["id"], int)
|
|
|
|
|
|
def test_rename_player_fixes_mislabel(client):
|
|
c, poker = client
|
|
pid = poker.upsert_player("Dave the rock", category="reg")
|
|
r = c.patch(f"/player/{pid}", json={"name": "Dave the mechanic"})
|
|
assert r.json()["ok"] is True
|
|
assert r.json()["player"]["name"] == "Dave the mechanic"
|