Refresh web UI and make ML imports optional
All checks were successful
ci / tests (push) Successful in 21s
All checks were successful
ci / tests (push) Successful in 21s
This commit is contained in:
51
tests/test_dev_rules.py
Normal file
51
tests/test_dev_rules.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from catan.data import DevelopmentCard
|
||||
from catan.game import Game, GameConfig, Phase
|
||||
|
||||
|
||||
def _prepare_turn(game: Game) -> None:
|
||||
game.phase = Phase.MAIN
|
||||
game.has_rolled = True
|
||||
game.robber_move_required = False
|
||||
game.pending_discards.clear()
|
||||
|
||||
|
||||
def _other_hex(game: Game, exclude: int) -> int:
|
||||
return next(h for h in game.board.hexes if h != exclude)
|
||||
|
||||
|
||||
def test_only_one_dev_card_per_turn() -> None:
|
||||
game = Game(GameConfig(player_names=["A", "B", "C", "D"]))
|
||||
_prepare_turn(game)
|
||||
player = game.current_player
|
||||
player.dev_cards = [DevelopmentCard.KNIGHT, DevelopmentCard.KNIGHT]
|
||||
player.new_dev_cards.clear()
|
||||
|
||||
first_target = _other_hex(game, game.board.robber_hex)
|
||||
game.play_knight(first_target, None)
|
||||
|
||||
second_target = _other_hex(game, first_target)
|
||||
with pytest.raises(ValueError, match="development card"):
|
||||
game.play_knight(second_target, None)
|
||||
|
||||
|
||||
def test_dev_card_limit_resets_next_turn() -> None:
|
||||
game = Game(GameConfig(player_names=["A", "B", "C", "D"]))
|
||||
_prepare_turn(game)
|
||||
player = game.current_player
|
||||
player.dev_cards = [DevelopmentCard.KNIGHT]
|
||||
player.new_dev_cards.clear()
|
||||
target_hex = _other_hex(game, game.board.robber_hex)
|
||||
game.play_knight(target_hex, None)
|
||||
game.end_turn()
|
||||
|
||||
_prepare_turn(game)
|
||||
next_player = game.current_player
|
||||
next_player.dev_cards = [DevelopmentCard.KNIGHT]
|
||||
next_player.new_dev_cards.clear()
|
||||
next_target = _other_hex(game, game.board.robber_hex)
|
||||
# Should not raise now that it's a new turn.
|
||||
game.play_knight(next_target, None)
|
||||
Reference in New Issue
Block a user