def test_initialization_multiple_factions(self) -> None: halfling = faction.Halflings() engineer = faction.Engineers() cultBoard = cult.CultBoard(factions=[halfling, engineer]) for _, order in cultBoard.occupied_orders.items(): self.assertFalse(order) # faction.Halflings should be on earth and air. # faction.Engineers will be zero everywhere. self.assertEqual(cultBoard.positions[common.CultTrack.EARTH], { common.Terrain.PLAIN: 1, common.Terrain.MOUNTAIN: 0 }) self.assertEqual(cultBoard.positions[common.CultTrack.AIR], { common.Terrain.PLAIN: 1, common.Terrain.MOUNTAIN: 0 }) self.assertEqual(cultBoard.positions[common.CultTrack.FIRE], { common.Terrain.PLAIN: 0, common.Terrain.MOUNTAIN: 0 }) self.assertEqual(cultBoard.positions[common.CultTrack.WATER], { common.Terrain.PLAIN: 0, common.Terrain.MOUNTAIN: 0 })
def test_structure_cost(self) -> None: engineer = faction.Engineers() # Dwelling. self.assertEqual( engineer.structure_cost(common.Structure.DWELLING, adjacentEnemyStructure=False), common.Resources(workers=1, coins=1)) self.assertEqual( engineer.structure_cost(common.Structure.DWELLING, adjacentEnemyStructure=True), common.Resources(workers=1, coins=1)) # Trading post. self.assertEqual( engineer.structure_cost(common.Structure.TRADING_POST, adjacentEnemyStructure=False), common.Resources(workers=1, coins=4)) self.assertEqual( engineer.structure_cost(common.Structure.TRADING_POST, adjacentEnemyStructure=True), common.Resources(workers=1, coins=2)) # Stronghold self.assertEqual( engineer.structure_cost(common.Structure.STRONGHOLD, adjacentEnemyStructure=False), common.Resources(workers=3, coins=6)) self.assertEqual( engineer.structure_cost(common.Structure.STRONGHOLD, adjacentEnemyStructure=True), common.Resources(workers=3, coins=6)) # Temple. self.assertEqual( engineer.structure_cost(common.Structure.TEMPLE, adjacentEnemyStructure=False), common.Resources(workers=1, coins=4)) self.assertEqual( engineer.structure_cost(common.Structure.TEMPLE, adjacentEnemyStructure=True), common.Resources(workers=1, coins=4)) # Sanctuary. self.assertEqual( engineer.structure_cost(common.Structure.SANCTUARY, adjacentEnemyStructure=False), common.Resources(workers=3, coins=6)) self.assertEqual( engineer.structure_cost(common.Structure.SANCTUARY, adjacentEnemyStructure=True), common.Resources(workers=3, coins=6))
def test_engineer_player(self) -> None: test_player = player.Player(name="test", player_faction=faction.Engineers()) # Halfling configuration. self.assertEqual(test_player.power, { common.PowerBowl.I: 3, common.PowerBowl.II: 9, common.PowerBowl.III: 0 }) self.assertEqual(test_player.resources, common.Resources(coins=10, workers=2)) self.assertEqual(test_player.used_town_keys, {}) self.assertEqual(test_player.victory_points, 20)
def test_income_for_structures(self) -> None: engineer = faction.Engineers() # tests SH + SA + DW income, with 1 DW incoming missing. self.assertEqual( engineer.income_for_structures({ common.Structure.DWELLING: 4, common.Structure.STRONGHOLD: 1, common.Structure.SANCTUARY: 1 }), common.Income(workers=3, priests=1, power=2)) # Test TP + TE income, extra power. self.assertEqual( engineer.income_for_structures({ common.Structure.TRADING_POST: 3, common.Structure.TEMPLE: 2 }), common.Income(priests=1, coins=6, power=9))
def test_starting_resources(self) -> None: engineer = faction.Engineers() self.assertEqual(engineer.home_terrain(), common.Terrain.MOUNTAIN) self.assertEqual(engineer.starting_power(), { common.PowerBowl.I: 3, common.PowerBowl.II: 9, common.PowerBowl.III: 0 }) self.assertEqual(engineer.starting_resources(), common.Resources(workers=2, coins=10)) self.assertEqual( { common.CultTrack.AIR: 0, common.CultTrack.WATER: 0, common.CultTrack.FIRE: 0, common.CultTrack.EARTH: 0 }, engineer.starting_cult_positions()) self.assertEqual(engineer.staring_shipping(), 0)
def test_engineer_creation(self) -> None: engineer = faction.Engineers() # noqa
def test_cant_occupy_already_taken_town(self) -> None: factions = [faction.Halflings(), faction.Engineers()] player1 = player.Player(name="test", player_faction=factions[0]) player2 = player.Player(name="test", player_faction=factions[1]) cultBoard = cult.CultBoard(factions=factions) # Both players have town keys. player1.gain_town(common.TownKey.PRIEST) player2.gain_town(common.TownKey.CULT) # Halfling takes the earth track by 1 -> 4 -> 6 -> 8 -> 10 self.assertEqual( cultBoard.sacrifice_priest_to_order(player1, common.CultTrack.EARTH), (3, 1)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player1, common.CultTrack.EARTH), (2, 2)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player1, common.CultTrack.EARTH), (2, 2)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player1, common.CultTrack.EARTH), (2, 3)) # Now engineer tries by 0 -> 1 -> 2 -> ... -> 9 -> 9 ... -> 9. self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 0)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 0)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 1)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 0)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 2)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 0)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 2)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 0)) self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (1, 0)) # Try again, but even with the town-key, player will fail. self.assertEqual( cultBoard.sacrifice_priest_to_order(player2, common.CultTrack.EARTH), (0, 0)) # Player still has town key. self.assertTrue(player2.use_town_key()) # Positions of players. self.assertEqual(cultBoard.positions[common.CultTrack.EARTH], { common.Terrain.PLAIN: 10, common.Terrain.MOUNTAIN: 9 })