def test_city_requires_settlement_first(): board = Board() with pytest.raises(ValueError): # no settlement there board.build_city(Color.RED, 3) board.build_settlement(Color.RED, 3, initial_build_phase=True) board.build_city(Color.RED, 3)
def test_yield_resources_two_players_and_city(): board = Board() resource_freqdeck = starting_resource_bank() tile, edge1, edge2, red_node, blue_node = ( board.map.land_tiles[(0, 0, 0)], (2, 3), (3, 4), 4, 0, ) if tile.resource is None: # is desert tile, edge1, edge2, red_node, blue_node = ( board.map.land_tiles[(1, -1, 0)], (9, 2), (9, 8), 8, 6, ) # red has one settlements and one city on tile board.build_settlement(Color.RED, 2, initial_build_phase=True) board.build_road(Color.RED, edge1) board.build_road(Color.RED, edge2) board.build_settlement(Color.RED, red_node) board.build_city(Color.RED, red_node) # blue has a city in tile board.build_settlement(Color.BLUE, blue_node, initial_build_phase=True) board.build_city(Color.BLUE, blue_node) payout, depleted = yield_resources(board, resource_freqdeck, tile.number) assert len(depleted) == 0 assert freqdeck_count(payout[Color.RED], tile.resource) >= 3 # type: ignore assert freqdeck_count(payout[Color.BLUE], tile.resource) >= 2 # type: ignore
def test_empty_payout_if_not_enough_resources(): board = Board() resource_freqdeck = starting_resource_bank() tile = board.map.land_tiles[(0, 0, 0)] if tile.resource is None: # is desert tile = board.map.land_tiles[(-1, 0, 1)] board.build_settlement(Color.RED, 3, initial_build_phase=True) board.build_city(Color.RED, 3) freqdeck_draw(resource_freqdeck, 18, tile.resource) # type: ignore payout, depleted = yield_resources(board, resource_freqdeck, tile.number) assert depleted == [tile.resource] assert ( Color.RED not in payout or freqdeck_count(payout[Color.RED], tile.resource) == 0 # type: ignore )
def test_many_buildings(): board = Board() board.build_settlement(Color.ORANGE, 7, True) board.build_settlement(Color.ORANGE, 12, True) board.build_road(Color.ORANGE, (6, 7)) board.build_road(Color.ORANGE, (7, 8)) board.build_road(Color.ORANGE, (8, 9)) board.build_road(Color.ORANGE, (8, 27)) board.build_road(Color.ORANGE, (26, 27)) board.build_road(Color.ORANGE, (9, 10)) board.build_road(Color.ORANGE, (10, 11)) board.build_road(Color.ORANGE, (11, 12)) board.build_road(Color.ORANGE, (12, 13)) board.build_road(Color.ORANGE, (13, 34)) assert len(board.find_connected_components(Color.ORANGE)) == 1 board.build_settlement(Color.WHITE, 30, True) board.build_road(Color.WHITE, (29, 30)) board.build_road(Color.WHITE, (10, 29)) board.build_road(Color.WHITE, (28, 29)) board.build_road(Color.WHITE, (27, 28)) board.build_settlement(Color.WHITE, 10) # cut board.build_road(Color.WHITE, (30, 31)) board.build_road(Color.WHITE, (31, 32)) board.build_settlement(Color.WHITE, 32) board.build_road(Color.WHITE, (11, 32)) board.build_road(Color.WHITE, (32, 33)) board.build_road(Color.WHITE, (33, 34)) board.build_settlement(Color.WHITE, 34) board.build_road(Color.WHITE, (34, 35)) board.build_road(Color.WHITE, (35, 36)) board.build_settlement(Color.WHITE, 41, True) board.build_city(Color.WHITE, 41) board.build_road(Color.WHITE, (41, 42)) board.build_road(Color.WHITE, (40, 42)) board.build_settlement(Color.WHITE, 27) # cut assert len(board.find_connected_components(Color.WHITE)) == 2 assert len(board.find_connected_components(Color.ORANGE)) == 3