def test_1_repeated_win(): def round_runner(g): game_round = start_round_from_player_cards( [cards.Guard(), cards.Baron()], [cards.King(), cards.Princess()], first_player=0, ) object.__setattr__(g.state, "round", game_round) # work around frozen dataclass player0, player1 = game_round.players play_with_choices(player0, CardType.GUARD, player1, cards.Princess) play_random_move(player1) end = game_round.state assert end.type == RoundState.Type.ROUND_END assert end.winner is player0 game = Game(["Alice", "Bob"]) alice, bob = game.players game.start() for i in range(1, 8): assert game.state.round_no == i round_runner(game) game.advance() assert +game.points == {alice: i} assert game.ended assert game.state.winner is alice
def test_newGame_validPlayerList_works(players: List[str]): game = Game(players) assert len(game.players) == len(players) assert len(set(map(id, game.players))) == len(players) assert all(game.players[i].id == i for i in range(len(players))) assert not game.started assert game.current_round is None assert game.state.type == GameState.Type.INIT assert set(game.points).issubset(game.players) assert all(game.points[p] == 0 for p in game.players)
def new_game(players) -> Game: return Game(players)
def test_newRound_invalidNumPlayers_raises(players): with pytest.raises(valid8.ValidationError): Game(players)