def test_captain(self): view = f.get_view('terminal') controller = ut.mock.MagicMock() controller.select_index = ut.mock.MagicMock(return_value=0) players = f.create_players_model(['a', 'b', 'c'], view.Player(), controller) game = f.prepare_game_start(players, view) role = f.create_role('captain') players = game.players all_goods = f.create_all_objects_of_type(f.get_number_of_goods(), f.create_good) players[0].add_goods([next(all_goods['indigo']) for i in range(4)]) players[1].add_goods([next(all_goods['corn']) for i in range(4)]) players[2].add_goods([next(all_goods['indigo']) for i in range(4)]) for i in range(3): self.assertEqual(players[i].get_state()['victory_points'], 0) game.play_role(role, players) self.assertEqual(players[0].get_state()['goods']['indigo'], 0) self.assertEqual(players[0].get_state()['victory_points'], 5) self.assertEqual(players[1].get_state()['goods']['corn'], 0) self.assertEqual(players[1].get_state()['victory_points'], 4) self.assertEqual(players[2].get_state()['goods']['indigo'], 1) self.assertListEqual(game.get_total_state()['cargo_ships'][4], []) self.assertListEqual(game.get_total_state()['cargo_ships'][5], ['corn'] * 4)
def test_trader(self): view = f.get_view('terminal') controller = ut.mock.MagicMock() controller.select_index = ut.mock.MagicMock(return_value=0) players = f.create_players_model(['a', 'b', 'c'], view.Player(), controller) game = f.prepare_game_start(players, view) trader = f.create_role('trader') players = game.players all_goods = f.create_all_objects_of_type(f.get_number_of_goods(), f.create_good) players[0].add_goods([next(all_goods['indigo'])]) players[1].add_goods([next(all_goods['corn'])]) players[2].add_goods([next(all_goods['indigo'])]) self.assertEqual(players[0].get_state()['goods']['indigo'], 1) self.assertEqual(players[1].get_state()['goods']['corn'], 1) self.assertEqual(players[2].get_state()['goods']['indigo'], 1) self.assertEqual(players[0].get_doubloons(), 2) game.play_role(trader, players) self.assertEqual(players[0].get_state()['goods']['indigo'], 0) self.assertEqual(players[1].get_state()['goods']['corn'], 0) self.assertEqual(players[2].get_state()['goods']['indigo'], 1) # Player 0 is trader self.assertEqual(players[0].get_doubloons(), 4) self.assertEqual(players[2].get_doubloons(), 2)
def test_craftsman(self): view = f.get_view('terminal') controller = ut.mock.MagicMock() controller.select_index = ut.mock.MagicMock(return_value=0) players = f.create_players_model(['a', 'b', 'c'], view.Player(), controller) game = f.prepare_game_start(players, view) craftsman = f.create_role('craftsman') players = game.players colonists = f.create_colonists(3) all_tiles = f.create_all_objects_of_type( f.get_number_of_plantation_tiles(), f.create_tile) all_buildings = f.create_all_objects_of_type( f.get_number_of_buildings(), f.create_building) indigo_plant = next(all_buildings['indigo_plant']) indigo_plant.add_colonist(colonists.pop()) players[0].recieve_city_tile(indigo_plant) indigo_tile = next(all_tiles['indigo']) indigo_tile.add_colonist(colonists.pop()) players[0].recieve_island_tile(indigo_tile) self.assertEqual(players[0].get_state()['goods']['indigo'], 0) game.play_role(craftsman, players) self.assertEqual(players[0].get_state()['goods']['indigo'], 2)
def test_governor_order(self): view = f.get_view('terminal') players = f.create_players_model('asd', None, None) game = f.prepare_game_start(players, view) order = game.get_player_orders(3) # The orders self.assertListEqual(next(order), [0, 1, 2]) self.assertListEqual(next(order), [1, 2, 0]) self.assertListEqual(next(order), [2, 0, 1]) self.assertListEqual(next(order), [0, 1, 2])
def test_play_game(self): view = f.get_view('terminal') controller = ut.mock.MagicMock() setup = ut.mock.MagicMock() setup.get_player_names = ut.mock.MagicMock( return_value=['a', 'b', 'c']) p_1 = MagicMock() p_1.select_index = MagicMock(side_effect=QuitGame()) p_2 = MagicMock() p_2.select_index = MagicMock(return_value=0) p_3 = MagicMock() p_3.select_index = MagicMock(return_value=0) controller.Player.side_effect = [p_1, p_2, p_3] controller.Setup = ut.mock.MagicMock(return_value=setup) game = f.create_game(view, controller) self.assertRaises(QuitGame, game.play)
import factory as f if __name__ == '__main__': view_mod = f.get_view('terminal') controller_mod = f.get_controller('terminal') game = f.create_game(view_mod, controller_mod) game.play()
def test_get_total_state(self): view = f.get_view('terminal') setup = ut.mock.MagicMock() setup.get_player_names = ut.mock.MagicMock( return_value=['a', 'b', 'c']) p1 = MagicMock() p2 = MagicMock() p3 = MagicMock() controller = ut.mock.MagicMock() controller.Player.side_effect = [p1, p2, p3] controller.Setup = ut.mock.MagicMock(return_value=setup) game = f.create_game(view, controller) self.maxDiff = None ref = { 'players': [{ 'name': 'a', 'doubloons': 2, 'victory_points': 0, 'is_governor': False, 'have_played_role': False, 'unemployed_colonists': 0, 'board': { 'city_spaces': [], 'island_spaces': [('indigo', { 'capacity': 1, 'occupancy': 0 })], 'space_occupancy_city': 0, 'space_occupancy_city_max': 12, 'space_occupancy_plantation': 1, 'space_occupancy_plantation_max': 12, }, 'goods': { 'corn': 0, 'indigo': 0, 'sugar': 0, 'tobacco': 0, 'coffee': 0 }, }, { 'name': 'b', 'doubloons': 2, 'victory_points': 0, 'is_governor': False, 'have_played_role': False, 'unemployed_colonists': 0, 'board': { 'city_spaces': [], 'island_spaces': [('indigo', { 'capacity': 1, 'occupancy': 0 })], 'space_occupancy_city': 0, 'space_occupancy_city_max': 12, 'space_occupancy_plantation': 1, 'space_occupancy_plantation_max': 12, }, 'goods': { 'corn': 0, 'indigo': 0, 'sugar': 0, 'tobacco': 0, 'coffee': 0 }, }, { 'name': 'c', 'doubloons': 2, 'victory_points': 0, 'is_governor': False, 'have_played_role': False, 'unemployed_colonists': 0, 'board': { 'city_spaces': [], 'island_spaces': [('corn', { 'capacity': 1, 'occupancy': 0 })], 'space_occupancy_city': 0, 'space_occupancy_city_max': 12, 'space_occupancy_plantation': 1, 'space_occupancy_plantation_max': 12, }, 'goods': { 'corn': 0, 'indigo': 0, 'sugar': 0, 'tobacco': 0, 'coffee': 0 }, }], 'colonist': { 'ship': 3, 'supply': 52 }, 'tiles': { 'on_display': ['corn', 'indigo', 'indigo', 'sugar'], 'plantations': 43, 'quarries': 8 }, 'remaining_victory_points': 75, 'available_goods': { 'coffee': 9, 'corn': 10, 'indigo': 11, 'sugar': 11, 'tobacco': 9 }, 'available_buildings': { 'city_hall': 1, 'coffee_roaster': 3, 'construction_hut': 2, 'customs_house': 1, 'factory': 2, 'fortress': 1, 'guild_hall': 1, 'hacienda': 2, 'harbor': 2, 'hospice': 2, 'indigo_plant': 2, 'large_market': 2, 'large_warehouse': 2, 'office': 2, 'residence': 1, 'small_indigo_plant': 3, 'small_market': 2, 'small_sugar_mill': 3, 'small_warehouse': 2, 'sugar_mill': 2, 'tobacco_storage': 3, 'university': 2, 'wharf': 2 }, 'trading_house': [], 'roles_doubloon_count': [('captain', 0), ('trader', 0), ('settler', 0), ('builder', 0), ('mayor', 0), ('craftsman', 0)], 'current_role': None, 'cargo_ships': { 4: [], 5: [], 6: [] } } out = game.get_total_state() tiles_test = out.pop('tiles') tiles_ref = ref.pop('tiles') # import pdb; pdb.set_trace() self.assertDictEqual(out, ref) self.assertEqual(tiles_test['plantations'], tiles_ref['plantations']) self.assertEqual(tiles_test['quarries'], tiles_ref['quarries']) self.assertEqual(len(tiles_test['on_display']), 4) for t in tiles_test['on_display']: self.assertIn( t, ['corn', 'indigo', 'indigo', 'sugar', 'tobacco', 'coffee'])