diff --git a/backend/bang/players.py b/backend/bang/players.py index ea73550..943aa6e 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -1079,6 +1079,7 @@ class Player: else: self.hand.append(self.game.deck.draw(True)) card.use_card(self) + print(f'{self.game.name}: {self.name} responded with {card.name}') self.sio.emit('chat_message', room=self.game.name, data=f'_respond|{self.name}|{card.name}') self.game.deck.scrap(card, True) self.notify_self() diff --git a/backend/tests/character_test.py b/backend/tests/character_test.py index c3fbefd..740f757 100644 --- a/backend/tests/character_test.py +++ b/backend/tests/character_test.py @@ -88,17 +88,236 @@ def test_calamityjanet(): g.players[g.turn].play_card(0, g.players[(g.turn+1)%2].name) assert g.players[(g.turn+1)%2].lives == 1 -# TODO: Test ElGringo -# TODO: Test JesseJones -# TODO: Test Jourdonnais -# TODO: Test KitCarlson -# TODO: Test LuckyDuke -# TODO: Test PaulRegret -# TODO: Test PedroRamirez -# TODO: Test RoseDoolan -# TODO: Test SidKetchum -# TODO: Test SlabTheKiller -# TODO: Test SuzyLafayette +def test_ElGringo(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 2), ElGringo()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + if isinstance(g.players[g.turn].character, ElGringo): + g.players[g.turn].draw('') + g.players[g.turn].hand = [] + g.players[g.turn].end_turn() + g.players[(g.turn+1)%2].hand = [] + g.players[g.turn].draw('') + g.players[g.turn].hand = [Bang(0,0), Bang(0,0)] + assert len(g.players[(g.turn+1)%2].hand) == 0 + g.players[g.turn].play_card(0, g.players[(g.turn+1)%2].name) + assert len(g.players[(g.turn+1)%2].hand) == 1 + assert len(g.players[g.turn].hand) == 0 + +def test_JesseJones(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 2), JesseJones()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + if not isinstance(g.players[g.turn].character, JesseJones): + g.players[g.turn].draw('') + g.players[g.turn].hand = [] + g.players[g.turn].end_turn() + g.players[(g.turn+1)%2].hand = [Bang(0,0)] + g.players[g.turn].draw('p1' if g.turn == 0 else 'p0') + g.players[g.turn].hand = [Bang(0,0), Bang(0,0)] + assert len(g.players[(g.turn+1)%2].hand) == 0 + assert len(g.players[g.turn].hand) == 2 + +def test_Jourdonnais(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 2), Jourdonnais()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + if isinstance(g.players[g.turn].character, Jourdonnais): + g.players[g.turn].draw('') + g.players[g.turn].hand = [] + g.players[g.turn].end_turn() + g.players[g.turn].draw('') + g.players[g.turn].hand = [Bang(0,0)] + g.players[g.turn].play_card(0, g.players[(g.turn+1)%2].name) + assert g.players[(g.turn+1)%2].pending_action == PendingAction.PICK + +def test_KitCarlson(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 4), KitCarlson()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + if not isinstance(g.players[g.turn].character, KitCarlson): + g.players[g.turn].draw('') + g.players[g.turn].hand = [Mancato(0,0)] + g.players[g.turn].end_turn() + g.players[g.turn].draw('') + assert g.players[g.turn].pending_action == PendingAction.CHOOSE + assert len(g.players[g.turn].available_cards) == 3 + g.players[g.turn].choose(0) + assert len(g.players[g.turn].available_cards) == 2 + g.players[g.turn].choose(1) + assert g.players[g.turn].pending_action == PendingAction.PLAY + +def test_LuckyDuke(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [LuckyDuke(), LuckyDuke()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + g.players[0].equipment = [Prigione(0,0)] + g.players[1].equipment = [Prigione(0,0)] + g.players[g.turn].draw('') + g.players[g.turn].hand = [] + g.players[g.turn].end_turn() + assert g.players[g.turn].pending_action == PendingAction.PICK + g.deck.cards.insert(0, Bang(Suit.SPADES,0)) + g.deck.cards.insert(1, Bang(Suit.HEARTS,0)) + g.players[g.turn].pick() + assert g.players[g.turn].pending_action == PendingAction.DRAW + +def test_PaulRegret(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 2), PaulRegret()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + pls = g.get_visible_players(g.players[0]) + assert len(pls) == 1 + assert pls[0]['name'] == g.players[1].name + assert pls[0]['dist'] > g.players[0].get_sight() + +def test_PedroRamirez(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 4), PedroRamirez()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + if not isinstance(g.players[g.turn].character, PedroRamirez): + g.players[g.turn].draw('') + g.players[g.turn].hand = [] + g.players[g.turn].end_turn() + g.deck.scrap_pile.append(Bang(0,0)) + g.players[g.turn].hand = [] + g.players[g.turn].draw('scrap') + assert len(g.players[g.turn].hand) == 2 + assert g.players[g.turn].hand[0].number == 0 + assert g.players[g.turn].hand[0].suit == 0 + assert isinstance(g.players[g.turn].hand[0], Bang) + +def test_RoseDoolan(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 2), RoseDoolan()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + g.players[0].equipment = [Mustang(0,0)] + g.players[0].notify_self() + pls = g.get_visible_players(g.players[1]) + print(pls) + assert len(pls) == 1 + assert pls[0]['name'] != g.players[1].name + assert pls[0]['dist'] <= g.players[1].get_sight() + +def test_SidKetchum(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 4), SidKetchum()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + if not isinstance(g.players[g.turn].character, SidKetchum): + g.players[g.turn].draw('') + g.players[g.turn].hand = [] + g.players[g.turn].end_turn() + g.players[g.turn].draw('') + g.players[g.turn].lives = 1 + g.players[g.turn].scrap(0) + assert g.players[g.turn].lives == 1 + g.players[g.turn].scrap(0) + assert g.players[g.turn].lives == 2 + +def test_SlabTheKiller(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 4), SlabTheKiller()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + if not isinstance(g.players[g.turn].character, SlabTheKiller): + g.players[g.turn].draw('') + g.players[g.turn].hand = [Mancato(0,0)] + g.players[g.turn].end_turn() + g.players[g.turn].draw('') + g.players[g.turn].hand = [Bang(0,0)] + g.players[g.turn].play_card(0, g.players[(g.turn+1)%2].name) + assert g.players[(g.turn+1)%2].pending_action == PendingAction.RESPOND + g.players[(g.turn+1)%2].respond(0) + assert g.players[(g.turn+1)%2].pending_action == PendingAction.RESPOND + g.players[(g.turn+1)%2].respond(-1) + assert g.players[(g.turn+1)%2].pending_action == PendingAction.WAIT + assert g.players[(g.turn+1)%2].lives == 3 + +def test_SuzyLafayette(): + sio = DummySocket() + g = Game('test', sio) + ps = [Player(f'p{i}', f'p{i}', sio) for i in range(2)] + for p in ps: + g.add_player(p) + g.start_game() + test_chars = [Character('test_char', 4), SuzyLafayette()] + for p in ps: + p.available_characters = [test_chars.pop(0)] + p.set_character(p.available_characters[0].name) + g.players[1].hand = [] + assert len(g.players[1].hand) == 0 + g.players[1].notify_self() + assert len(g.players[1].hand) == 1 + g.players[g.turn].end_turn() def test_VultureSam(): sio = DummySocket()