Defer challenge redraws until resolution and limit card plays
This commit is contained in:
+42
-11
@@ -216,21 +216,14 @@ def test_scene_start_and_challenges(session):
|
||||
# Obstacle current value should update to 10
|
||||
assert obs.current_value == 10
|
||||
|
||||
# Check if hand size matches card draw rule
|
||||
# 10D was played (-1 card). If colors matched, drew 1 back (+1 card).
|
||||
hand = crud.get_player_hand(p2)
|
||||
if orig_is_red:
|
||||
assert len(hand) == 4
|
||||
assert res["drew_card"] is not None
|
||||
else:
|
||||
assert len(hand) == 3
|
||||
assert res["drew_card"] is None
|
||||
|
||||
# The Deep resolves the challenge: at least one success -> succeeded
|
||||
# Replacements wait until the Deep resolves the Challenge.
|
||||
assert len(crud.get_player_hand(p2)) == 3
|
||||
assert res["drew_card"] is None
|
||||
ok, msg = crud.resolve_challenge(session, challenge.id, deep.id)
|
||||
assert ok
|
||||
session.refresh(challenge)
|
||||
assert challenge.status == "succeeded"
|
||||
assert len(crud.get_player_hand(p2)) == (4 if orig_is_red else 3)
|
||||
|
||||
def test_assistant_does_not_draw(session):
|
||||
game, deep, (p2, p3) = make_scene_game(session, num_pirats=2)
|
||||
@@ -2855,3 +2848,41 @@ def test_pvp_redraw_depends_on_color_not_success(session, defense, success, redr
|
||||
assert crud.get_player_hand(attacker) == []
|
||||
assert crud.get_player_hand(defender) == (['AD'] if redraw else [])
|
||||
assert not crud.play_pvp_defense(session, duel.id, defender.id, 'AD')[0]
|
||||
|
||||
|
||||
def test_challenge_draw_waits_for_resolution_and_cannot_repeat(session):
|
||||
game, deep, (rat, helper) = make_scene_game(session, num_pirats=2)
|
||||
obs = game.obstacles[0]
|
||||
obs.original_card, obs.suit, obs.current_value = '7C', 'C', 7
|
||||
rat.hand_cards = '["2S", "9S"]'
|
||||
game.deck_cards = '["AD"]'
|
||||
session.commit()
|
||||
assert crud.create_challenge(session, game.id, deep.id, rat.id, [obs.id])[0]
|
||||
challenge = game.challenges[0]
|
||||
assert crud.play_challenge_card(session, rat.id, obs.id, '2S')[0]
|
||||
assert crud.get_player_hand(rat) == ['9S']
|
||||
assert not crud.play_challenge_card(session, rat.id, obs.id, '9S')[0]
|
||||
assert not crud.request_tax(session, challenge.id, rat.id, helper.id)[0]
|
||||
assert crud.resolve_challenge(session, challenge.id, deep.id)[0]
|
||||
assert challenge.status == 'failed'
|
||||
assert crud.get_player_hand(rat) == ['9S', 'AD']
|
||||
assert not crud.resolve_challenge(session, challenge.id, deep.id)[0]
|
||||
assert crud.get_player_hand(rat) == ['9S', 'AD']
|
||||
|
||||
|
||||
def test_completed_obstacle_still_awards_deferred_draw(session):
|
||||
game, deep, (rat,) = make_scene_game(session)
|
||||
obs = game.obstacles[0]
|
||||
obs.original_card = '7C'
|
||||
obs.played_cards = '[{"card":"JC", "success":true}]'
|
||||
rat.hand_cards = '["QS"]'
|
||||
game.deck_cards = '["AD"]'
|
||||
session.commit()
|
||||
assert crud.create_challenge(session, game.id, deep.id, rat.id, [obs.id])[0]
|
||||
challenge = game.challenges[0]
|
||||
oid = obs.id
|
||||
assert crud.play_challenge_card(session, rat.id, oid, 'QS')[0]
|
||||
assert session.get(Obstacle, oid) is None
|
||||
assert crud.get_player_hand(rat) == []
|
||||
assert crud.resolve_challenge(session, challenge.id, deep.id)[0]
|
||||
assert crud.get_player_hand(rat) == ['AD']
|
||||
|
||||
Reference in New Issue
Block a user