From 3c5300e5da8a3e54ff32a82d44d14ac9b0e3e04c Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Sun, 26 May 2024 20:04:46 +0100 Subject: [PATCH] fix sventagliata --- backend/bang/players.py | 5 ++- backend/tests/valley_of_shadows_test.py | 50 ++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/backend/bang/players.py b/backend/bang/players.py index 4a4710a..c6a7025 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -1528,7 +1528,10 @@ class Player: room=player.game.name, data=f"_play_card_against|{self.name}|Sventagliata|{player.name}", ) - self.pending_action = PendingAction.PLAY + self.bang_used += 1 + self.has_played_bang = True + if self.pending_action == PendingAction.CHOOSE: + self.pending_action = PendingAction.PLAY self.notify_self() elif "choose_play_as_bang" in self.choose_text: if card_index <= len(self.available_cards): diff --git a/backend/tests/valley_of_shadows_test.py b/backend/tests/valley_of_shadows_test.py index 00d7a60..6ba33ea 100644 --- a/backend/tests/valley_of_shadows_test.py +++ b/backend/tests/valley_of_shadows_test.py @@ -276,4 +276,52 @@ def test_tornado(): p1.choose(0) assert p.pending_action == PendingAction.PLAY assert len(p.hand) == 2 - assert len(p1.hand) == 2 \ No newline at end of file + assert len(p1.hand) == 2 + + +def test_sventagliata(): + g = Game('test') + ps = [Player(f'p{i}', f'p{i}') for i in range(3)] + for p in ps: + g.add_player(p) + g.start_game() + for p in ps: + p.available_characters = [Character('test_char', 4)] + p.set_character(p.available_characters[0].name) + + p = g.players[g.turn] + p1 = g.players[(g.turn + 1) % 3] + p2 = g.players[(g.turn + 2) % 3] + + p.draw('') + p.hand = [Sventagliata('Hearts', 10), Bang('Hearts', 10)] + p1.hand = [Mancato('Spades', 2)] + p2.hand = [Mancato('Clubs', 5)] + + # Play Sventagliata + p.play_card(0, against=p1.name) + assert p.pending_action == PendingAction.CHOOSE + assert len(p.available_cards) > 0 # Ensure there are available targets + + # Simulate choosing a secondary target + secondary_target = p.available_cards[0]['name'] + assert secondary_target != p.name and secondary_target != p1.name # Ensure the secondary target is correct + p.choose(0) # Choose the first available target + + assert p.pending_action == PendingAction.WAIT + assert p1.pending_action == PendingAction.RESPOND + + # Simulate p1 responding to the Bang + p1.respond(0) # Assuming p1 plays a Mancato card in response + assert p1.pending_action == PendingAction.WAIT + assert p.pending_action == PendingAction.WAIT + + p2.respond(0) # Assuming p2 plays a Mancato card in response + assert p2.pending_action == PendingAction.WAIT + assert p.pending_action == PendingAction.PLAY + + # check bang cannot be played + assert len(p.hand) == 1 + p.play_card(0, against=p2.name) + assert p.pending_action == PendingAction.PLAY + assert len(p.hand) == 1 \ No newline at end of file