Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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])
Beispiel #5
0
    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)
Beispiel #6
0
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()
Beispiel #7
0
    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'])