Switch to Svelte
This commit is contained in:
@@ -293,26 +293,14 @@ def test_set_role_endpoint():
|
||||
def get_session_override():
|
||||
yield session
|
||||
|
||||
# Dynamically find the get_session function object used by the route
|
||||
get_session_func = None
|
||||
for route in app.routes:
|
||||
if route.path == "/game/{game_id}/player/{player_id}/set-role":
|
||||
for dep in route.dependant.dependencies:
|
||||
if dep.name == "db":
|
||||
get_session_func = dep.call
|
||||
break
|
||||
if get_session_func:
|
||||
break
|
||||
|
||||
assert get_session_func is not None, "Could not find get_session dependency in route"
|
||||
app.dependency_overrides[get_session_func] = get_session_override
|
||||
from pirats.database import get_session
|
||||
app.dependency_overrides[get_session] = get_session_override
|
||||
client = TestClient(app)
|
||||
|
||||
try:
|
||||
response = client.post(f"/game/{game.id}/player/{player.id}/set-role?role=pirat")
|
||||
response = client.post(f"/api/game/{game.id}/player/{player.id}/set-role", data={"role": "pirat"})
|
||||
assert response.status_code == 200
|
||||
# The response should contain the rendered scene setup template
|
||||
assert "Play Pi-Rat" in response.text
|
||||
assert response.json()["status"] == "ok"
|
||||
# The database should be updated
|
||||
session.refresh(player)
|
||||
assert player.role == "pirat"
|
||||
@@ -344,24 +332,13 @@ def test_create_game_endpoint():
|
||||
def get_session_override():
|
||||
yield session
|
||||
|
||||
# Dynamically find the get_session function object used by the route
|
||||
get_session_func = None
|
||||
for route in app.routes:
|
||||
if route.path == "/game/create":
|
||||
for dep in route.dependant.dependencies:
|
||||
if dep.name == "db":
|
||||
get_session_func = dep.call
|
||||
break
|
||||
if get_session_func:
|
||||
break
|
||||
|
||||
assert get_session_func is not None, "Could not find get_session dependency in route"
|
||||
app.dependency_overrides[get_session_func] = get_session_override
|
||||
from pirats.database import get_session
|
||||
app.dependency_overrides[get_session] = get_session_override
|
||||
client = TestClient(app, base_url="http://testserver")
|
||||
|
||||
try:
|
||||
response = client.post("/game/create", data={"crew_name": "The Math Mutineers"})
|
||||
assert response.status_code in [200, 303] # starlette redirects can be 303
|
||||
response = client.post("/api/game", data={"crew_name": "The Math Mutineers"})
|
||||
assert response.status_code == 200
|
||||
|
||||
# Verify the database has the game with the crew name
|
||||
from pirats.models import Game
|
||||
@@ -463,10 +440,9 @@ def test_submit_vote_endpoint():
|
||||
client = TestClient(app)
|
||||
|
||||
try:
|
||||
response = client.post(f"/game/{game.id}/player/{p1.id}/submit-vote", data={"nominated_id": p2.id})
|
||||
# TestClient follows redirects by default
|
||||
response = client.post(f"/api/game/{game.id}/player/{p1.id}/submit-vote", data={"nominated_id": p2.id})
|
||||
assert response.status_code == 200
|
||||
assert "Vote submitted" in response.text
|
||||
assert response.json()["status"] == "ok"
|
||||
finally:
|
||||
app.dependency_overrides.clear()
|
||||
|
||||
@@ -505,3 +481,111 @@ def test_single_eligible_deep_player(session):
|
||||
success, msg = crud.confirm_scene_setup(session, game.id)
|
||||
assert success
|
||||
|
||||
def test_player_death_toggle(session):
|
||||
game = crud.create_game(session)
|
||||
player = crud.add_player(session, game.id, "DeadRat")
|
||||
assert not player.is_dead
|
||||
assert not player.completed_personal_3
|
||||
|
||||
# Toggle objective 3
|
||||
crud.toggle_objective(session, game.id, player.id, "personal_3", True)
|
||||
session.refresh(player)
|
||||
assert player.is_dead
|
||||
assert player.completed_personal_3
|
||||
|
||||
# Toggle off
|
||||
crud.toggle_objective(session, game.id, player.id, "personal_3", False)
|
||||
session.refresh(player)
|
||||
assert not player.is_dead
|
||||
assert not player.completed_personal_3
|
||||
|
||||
def test_become_ghost_flow(session):
|
||||
game = crud.create_game(session)
|
||||
player = crud.add_player(session, game.id, "DeadRat")
|
||||
player.is_dead = True
|
||||
session.add(player)
|
||||
session.commit()
|
||||
|
||||
from fastapi.testclient import TestClient
|
||||
from pirats.main import app
|
||||
from pirats.database import get_session
|
||||
|
||||
def get_session_override():
|
||||
yield session
|
||||
|
||||
app.dependency_overrides[get_session] = get_session_override
|
||||
client = TestClient(app)
|
||||
|
||||
try:
|
||||
response = client.post(f"/api/game/{game.id}/player/{player.id}/become-ghost")
|
||||
assert response.status_code == 200
|
||||
session.refresh(player)
|
||||
assert player.is_ghost
|
||||
assert not player.is_dead
|
||||
finally:
|
||||
app.dependency_overrides.clear()
|
||||
|
||||
def test_roll_new_character(session):
|
||||
game = crud.create_game(session)
|
||||
p1 = crud.add_player(session, game.id, "P1")
|
||||
p2 = crud.add_player(session, game.id, "P2") # helper player for delegation target
|
||||
|
||||
p1.is_dead = True
|
||||
p1.rank = 3
|
||||
p1.hand_cards = json.dumps(["2C", "3D", "4H"])
|
||||
p1.completed_personal_1 = True
|
||||
p1.completed_personal_2 = True
|
||||
p1.completed_personal_3 = True
|
||||
|
||||
session.add_all([p1, p2])
|
||||
session.commit()
|
||||
|
||||
crud.roll_new_character(
|
||||
session,
|
||||
game.id,
|
||||
p1.id,
|
||||
avatar_look="Shiny eyes",
|
||||
avatar_smell="Spiced Rum",
|
||||
first_words="No fear!",
|
||||
good_at_math="Yes"
|
||||
)
|
||||
|
||||
session.refresh(p1)
|
||||
session.refresh(game)
|
||||
|
||||
# Verify properties
|
||||
assert not p1.is_dead
|
||||
assert not p1.is_ghost
|
||||
assert not p1.completed_personal_1
|
||||
assert not p1.completed_personal_2
|
||||
assert not p1.completed_personal_3
|
||||
assert p1.avatar_look == "Shiny eyes"
|
||||
assert p1.avatar_smell == "Spiced Rum"
|
||||
assert p1.first_words == "No fear!"
|
||||
assert p1.good_at_math == "Yes"
|
||||
|
||||
# Verify rank randomized between 1-3
|
||||
assert p1.rank in [1, 2, 3]
|
||||
|
||||
# Verify name is "Recruit Spiced Rum"
|
||||
assert p1.name == "Recruit Spiced Rum"
|
||||
|
||||
# Verify techniques auto-assigned
|
||||
assert p1.tech_jack != ""
|
||||
assert p1.tech_queen != ""
|
||||
assert p1.tech_king != ""
|
||||
|
||||
# Verify delegated targets exist (p2 is the only other player)
|
||||
assert p1.other_like_from_player_id == p2.id
|
||||
assert p1.other_hate_from_player_id == p2.id
|
||||
|
||||
# Verify hand was refreshed up to new max hand size
|
||||
hand = json.loads(p1.hand_cards)
|
||||
assert len(hand) > 0
|
||||
# Old cards returned to deck
|
||||
deck = json.loads(game.deck_cards)
|
||||
assert "2C" in deck or "2C" in hand
|
||||
assert "3D" in deck or "3D" in hand
|
||||
assert "4H" in deck or "4H" in hand
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user