Dev mode revamp

This commit is contained in:
2026-06-12 11:50:34 -07:00
parent f61201144f
commit 3395b127b4
13 changed files with 347 additions and 132 deletions

View File

@@ -1291,3 +1291,68 @@ def test_websocket_state_push():
assert ws.receive_json() == {"type": "state_changed"}
finally:
app.dependency_overrides.clear()
def test_skip_character_creation(session):
game = crud.create_game(session)
p1 = crud.add_player(session, game.id, "Carlos", is_creator=True)
p2 = crud.add_player(session, game.id, "Barry")
p3 = crud.add_player(session, game.id, "Jaspar")
session.refresh(game)
game.phase = "character_creation"
game.dev_mode = True
session.add(game)
session.commit()
# p1 did part of the work by hand; the skip must not overwrite it
p1.avatar_look = "Hand-written bandana"
session.add(p1)
session.commit()
crud.submit_techniques(session, p1.id, "Carlos Strike", "Hide", "Roll")
fills = {p.id: {
"avatar_look": f"Look for {p.name}",
"avatar_smell": "of test cheese",
"first_words": "Test!",
"good_at_math": "Only in tests",
"like": "Their test coverage",
"hate": "Their flaky tests",
} for p in game.players}
ok, msg = crud.skip_character_creation(session, game, fills)
assert ok, msg
session.refresh(game)
assert game.phase == "scene_setup"
for p in (p1, p2, p3):
session.refresh(p)
assert p.avatar_look and p.avatar_smell and p.first_words and p.good_at_math
assert p.other_like and p.other_hate
assert p.tech_jack and p.tech_queen and p.tech_king
# Everyone holds techniques created by someone else
own = {t.lower() for t in json.loads(p.created_techniques)}
held = {p.tech_jack.lower(), p.tech_queen.lower(), p.tech_king.lower()}
assert not (own & held)
session.refresh(p1)
assert p1.avatar_look == "Hand-written bandana"
assert json.loads(p1.created_techniques) == ["Carlos Strike", "Hide", "Roll"]
# Ranks were rolled: one rank-3 Deep, one rank-1 Pi-Rat, rest rank 2
ranks = sorted(p.rank for p in (p1, p2, p3))
assert ranks == [1, 2, 3]
def test_skip_character_creation_wrong_phase(session):
game = crud.create_game(session)
crud.add_player(session, game.id, "Carlos", is_creator=True)
session.refresh(game)
ok, msg = crud.skip_character_creation(session, game, {})
assert not ok
def test_dev_mode_default_env(session, monkeypatch):
# Unset = local checkout, defaults on
monkeypatch.delenv("PIRATS_DEV_MODE", raising=False)
assert crud.create_game(session).dev_mode is True
# Set = deployment controls it explicitly
monkeypatch.setenv("PIRATS_DEV_MODE", "false")
assert crud.create_game(session).dev_mode is False
monkeypatch.setenv("PIRATS_DEV_MODE", "true")
assert crud.create_game(session).dev_mode is True