def test_snap_to_over_distance(): config = create_core_test_config({ "movement": { "walk_speed": 5, } }) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) stepper.start(51.50451, -0.07607, 10) # pre-calculated distance is 17.8 meters stepper.snap_to(51.50436, -0.07616, 11) pgo = api_wrapper.get_api() lat, lng, alt = pgo.get_position() assert stepper.current_lat == 51.50451 assert stepper.current_lng == -0.07607 assert stepper.current_alt == 10 assert lat == 51.50451 assert lng == -0.07607 assert alt == 10
def test_execute_with_ids(self): engine = Mock() engine.log = Mock() engine.log.info = MagicMock() engine.log.failed = MagicMock() topics1 = [Mock()] get_topics_mock1 = Mock(return_value=topics1) topics2 = [] get_topics_mock2 = Mock(return_value=topics2) execute_mock1 = Mock() # Exception shouldn't be thrown because there are no tocpis for plugin execute_mock2 = Mock(return_value=Exception) self.tracker1.execute = execute_mock1 self.tracker1.get_topics = get_topics_mock1 self.tracker2.execute = execute_mock2 self.tracker2.get_topics = get_topics_mock2 ids = [1, 2] self.trackers_manager.execute(engine, ids) self.assertTrue(engine.log.info.called) self.assertFalse(engine.log.failed.called ) # Check that exception from tracker2 wasn't raised get_topics_mock1.assert_called_with(ids) execute_mock1.assert_called_with(topics1, engine) get_topics_mock2.assert_called_with(ids) execute_mock2.assert_not_called()
def test_navigate_campsite_add_before_start(self): config = create_core_test_config({ "movement": { "navigator_campsite": [51.5043872, -0.0741802] }, }) api_wrapper = create_mock_api_wrapper(config) logger = Mock() logger.log = Mock(return_value=None) navigator = CamperNavigator(config, api_wrapper, logger) map_cells = self._create_map_cells() navigator.set_campsite(51.5060435, -0.073983) destinations = list() for destination in navigator.navigate(map_cells): assert isinstance(destination, Destination) assert destination.target_lat == 51.5060435 assert destination.target_lng == -0.073983 assert destination.name == "Camping position at 51.5060435,-0.073983" destinations.append(destination) assert len(destinations) == 1
def test_favorited_pokemon_filter(self): event_manager = EventManager() logger = Mock() logger.log = Mock() transfer_plugin = TransferPokemon( { 'transfer_on_start': False }, event_manager, logger ) bot = create_mock_bot() transfer_list = [self._create_pokemon(unique_id=1, favorite=True), self._create_pokemon(unique_id=2, favorite=True), self._create_pokemon(unique_id=3, favorite=True), self._create_pokemon(unique_id=4, favorite=False), self._create_pokemon(unique_id=5, favorite=True), self._create_pokemon(unique_id=6, favorite=False)] result_dict = transfer_plugin.filter_favorited_pokemon(bot=bot, transfer_list=transfer_list) filtered_list = result_dict["transfer_list"] assert len(filtered_list) == 2 assert filtered_list[0].unique_id == 4 assert filtered_list[1].unique_id == 6 assert result_dict["filter_list"][0] == "excluding favorited Pokemon" transfer_list = [self._create_pokemon(favorite=False)] result_dict = transfer_plugin.filter_favorited_pokemon(bot=bot, transfer_list=transfer_list) assert len(result_dict["transfer_list"]) == 1 assert len(result_dict["filter_list"]) == 0 self.set_empty_inventory(bot) assert transfer_plugin.filter_favorited_pokemon(bot=bot) is False
def test_print_stats(self): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) event_manager = Mock() logger = Mock() logger.log = Mock() player_service = Player(api_wrapper, event_manager, logger) pgo = api_wrapper.get_api() pgo.set_response('get_player', self._create_generic_player_response()) pgo.set_response('get_inventory', self._create_generic_inventory_response()) logger.log.return_value = None player_service.print_stats() assert logger.log.call_count == 15 self._assert_log_call(logger.log, 'Username: test_account') self._assert_log_call(logger.log, 'Bag storage: 36/350') self._assert_log_call(logger.log, 'Pokemon storage: 2/250') self._assert_log_call(logger.log, 'Stardust: 20,000') self._assert_log_call(logger.log, 'Pokecoins: 10') self._assert_log_call(logger.log, 'Poke Balls: 11') self._assert_log_call(logger.log, 'Great Balls: 12') self._assert_log_call(logger.log, 'Ultra Balls: 13') self._assert_log_call(logger.log, '-- Level: 14') self._assert_log_call(logger.log, '-- Experience: 15') self._assert_log_call(logger.log, '-- Experience until next level: 985') self._assert_log_call(logger.log, '-- Pokemon captured: 17') self._assert_log_call(logger.log, '-- Pokestops visited: 18') assert pgo.call_stack_size() == 0
def test_start(): config = create_core_test_config({ "movement": { "walk_speed": 4.16, } }) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) stepper.start(51.5044524, -0.0752479, 10) assert stepper.origin_lat == 51.5044524 assert stepper.origin_lng == -0.0752479 assert stepper.origin_alt == 10 assert stepper.current_lat == 51.5044524 assert stepper.current_lng == -0.0752479 assert stepper.current_alt == 10 pgo = api_wrapper.get_api() lat, lng, alt = pgo.get_position() assert lat == 51.5044524 assert lng == -0.0752479 assert alt == 10
def test_get_pokeballs(self): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) event_manager = Mock() logger = Mock() logger.log = Mock() player_service = Player(api_wrapper, event_manager, logger) pgo = api_wrapper.get_api() pgo.set_response('get_player', self._create_generic_player_response()) pgo.set_response('get_inventory', self._create_generic_inventory_response()) pokeballs = player_service.get_pokeballs() assert Item.ITEM_POKE_BALL.value in pokeballs assert pokeballs[Item.ITEM_POKE_BALL.value] == 11 assert Item.ITEM_GREAT_BALL.value in pokeballs assert pokeballs[Item.ITEM_GREAT_BALL.value] == 12 assert Item.ITEM_ULTRA_BALL.value in pokeballs assert pokeballs[Item.ITEM_ULTRA_BALL.value] == 13 assert Item.ITEM_MASTER_BALL.value in pokeballs assert pgo.call_stack_size() == 0
def test_favorited_pokemon_filter(self): event_manager = EventManager() logger = Mock() logger.log = Mock() transfer_plugin = TransferPokemon({'transfer_on_start': False}, event_manager, logger) bot = create_mock_bot() transfer_list = [ self._create_pokemon(unique_id=1, favorite=True), self._create_pokemon(unique_id=2, favorite=True), self._create_pokemon(unique_id=3, favorite=True), self._create_pokemon(unique_id=4, favorite=False), self._create_pokemon(unique_id=5, favorite=True), self._create_pokemon(unique_id=6, favorite=False) ] result_dict = transfer_plugin.filter_favorited_pokemon( bot=bot, transfer_list=transfer_list) filtered_list = result_dict["transfer_list"] assert len(filtered_list) == 2 assert filtered_list[0].unique_id == 4 assert filtered_list[1].unique_id == 6 assert result_dict["filter_list"][0] == "excluding favorited Pokemon" transfer_list = [self._create_pokemon(favorite=False)] result_dict = transfer_plugin.filter_favorited_pokemon( bot=bot, transfer_list=transfer_list) assert len(result_dict["transfer_list"]) == 1 assert len(result_dict["filter_list"]) == 0 self.set_empty_inventory(bot) assert transfer_plugin.filter_favorited_pokemon(bot=bot) is False
def test_execute_with_ids(self): engine = Mock() engine.log = Mock() engine.log.info = MagicMock() engine.log.failed = MagicMock() topics1 = [Mock()] get_topics_mock1 = Mock(return_value=topics1) topics2 = [] get_topics_mock2 = Mock(return_value=topics2) execute_mock1 = Mock() # Exception shouldn't be thrown because there are no tocpis for plugin execute_mock2 = Mock(return_value=Exception) self.tracker1.execute = execute_mock1 self.tracker1.get_topics = get_topics_mock1 self.tracker2.execute = execute_mock2 self.tracker2.get_topics = get_topics_mock2 ids = [1, 2] self.trackers_manager.execute(engine, ids) self.assertTrue(engine.log.info.called) self.assertFalse(engine.log.failed.called) # Check that exception from tracker2 wasn't raised get_topics_mock1.assert_called_with(ids) execute_mock1.assert_called_with(topics1, engine) get_topics_mock2.assert_called_with(ids) execute_mock2.assert_not_called()
def test_get_cells_no_response(): account = test_account_name() config = create_core_test_config({ "login": { "username": account }, "mapping": { "cell_radius": 500 } }) api_wrapper = create_mock_api_wrapper(config) google_maps = Mock(spec=Client) logger = Mock() logger.log = Mock(return_value=None) mapper = Mapper(config, api_wrapper, google_maps, logger) api_wrapper.set_position(51.5044524, -0.0752479, 10) pgo = api_wrapper.get_api() pgo.set_response("get_map_objects", {}) api_wrapper.call = Mock(return_value=None) # Clean up any old location logs if os.path.isfile('data/last-location-' + account + '.json'): os.unlink('data/last-location-' + account + '.json') cells = mapper.get_cells(51.5044524, -0.0752479) assert len(cells) == 0
def test_navigate_campsite_last_position(self): config = create_core_test_config({ "movement": { "navigator_campsite": None }, "mapping": { "location": "0,0" } }) api_wrapper = create_mock_api_wrapper(config) logger = Mock() logger.log = Mock(return_value=None) navigator = CamperNavigator(config, api_wrapper, logger) map_cells = self._create_map_cells() destinations = list() for destination in navigator.navigate(map_cells): assert isinstance(destination, Destination) assert destination.target_lat == 0 assert destination.target_lng == 0 assert destination.name == "Camping position at 0,0" destinations.append(destination) assert len(destinations) == 1
def test_init(): logger = Mock() logger.log = Mock(return_value=None) config_namespace = create_core_test_config() api_wrapper = create_mock_api_wrapper(config_namespace) event_manager = EventManager() player_service = Player(api_wrapper, event_manager, logger) pokemon_service = PokemonService(api_wrapper) mapper = Mapper(config_namespace, api_wrapper, Mock(), logger) path_finder = DirectPathFinder(config_namespace) stepper = Stepper(config_namespace, api_wrapper, path_finder, logger) navigator = FortNavigator(config_namespace, api_wrapper) bot = PokemonGoBot(config_namespace, api_wrapper, player_service, pokemon_service, event_manager, mapper, stepper, navigator, logger) assert len(bot.pokemon_list) == 151 assert len(bot.item_list) == 30 assert bot.position == (0, 0, 0) assert bot.config is config_namespace assert bot.api_wrapper is api_wrapper assert bot.player_service is player_service assert bot.pokemon_service is pokemon_service assert bot.event_manager is event_manager assert bot.mapper is mapper assert bot.stepper is stepper assert bot.navigator is navigator assert bot.logger is logger
def test_execute_fails(self): engine = Mock() engine.log = Mock() engine.log.info = MagicMock() engine.log.failed = MagicMock() topics = [Mock()] get_topics_mock = Mock(return_value=topics) execute_mock1 = MagicMock(side_effect=Exception) execute_mock2 = MagicMock(side_effect=Exception) self.tracker1.execute = execute_mock1 self.tracker1.get_topics = get_topics_mock self.tracker2.execute = execute_mock2 self.tracker2.get_topics = get_topics_mock self.trackers_manager.execute(engine, None) self.assertTrue(engine.log.info.called) self.assertTrue(engine.log.failed.called) get_topics_mock.assert_called_with(None) execute_mock1.assert_called_with(topics, engine) execute_mock2.assert_called_with(topics, engine)
def test_start(): config = create_core_test_config({"movement": { "walk_speed": 4.16, }}) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) stepper.start(51.5044524, -0.0752479, 10) assert stepper.origin_lat == 51.5044524 assert stepper.origin_lng == -0.0752479 assert stepper.origin_alt == 10 assert stepper.current_lat == 51.5044524 assert stepper.current_lng == -0.0752479 assert stepper.current_alt == 10 pgo = api_wrapper.get_api() lat, lng, alt = pgo.get_position() assert lat == 51.5044524 assert lng == -0.0752479 assert alt == 10
def test_init_path_finder_direct(): config = create_core_test_config({"movement": { "walk_speed": 4.16, }}) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) assert isinstance(stepper.path_finder, DirectPathFinder)
def test_init_negative_walk(): config = create_core_test_config({"movement": { "walk_speed": -5, }}) api_wrapper = create_mock_api_wrapper(config) path_finder = Mock() logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) assert stepper.speed == 4.16
def test_login_failure(): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) event_manager = Mock() logger = Mock() logger.log = Mock() player_service = Player(api_wrapper, event_manager, logger) api_wrapper.get_api().login = Mock(return_value=False) assert (player_service.login()) is False
def test_init(): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) google_maps = Mock(spec=Client) logger = Mock() logger.log = Mock(return_value=None) mapper = Mapper(config, api_wrapper, google_maps, logger) assert mapper.config == config assert mapper.api_wrapper == api_wrapper assert mapper.google_maps == google_maps
def test_ignore_list_filter(self): event_manager = EventManager() logger = Mock() logger.log = Mock() transfer_plugin = TransferPokemon( { 'transfer_on_start': False, 'use_always_keep_filter': True, 'use_cp_iv_filter': False, 'always_keep': { 'Bulbasaur': True, 'Ivysaur': True, 'Venusaur': True, } }, event_manager, logger) bot = create_mock_bot() transfer_list = [ self._create_pokemon(unique_id=1, species_id=1), self._create_pokemon(unique_id=2, species_id=5), self._create_pokemon(unique_id=3, species_id=2), self._create_pokemon(unique_id=4, species_id=4), self._create_pokemon(unique_id=5, species_id=3), self._create_pokemon(unique_id=6, species_id=1), self._create_pokemon(unique_id=7, species_id=5) ] result_dict = transfer_plugin.filter_pokemon_by_ignore_list( bot=bot, transfer_list=transfer_list) filtered_list = result_dict["transfer_list"] assert len(filtered_list) == 3 assert filtered_list[0].unique_id == 2 assert filtered_list[1].unique_id == 4 assert filtered_list[2].unique_id == 7 assert "Bulbasaurs" in result_dict["filter_list"][0] assert "Ivysaurs" in result_dict["filter_list"][0] assert "Venusaurs" in result_dict["filter_list"][0] transfer_list = [self._create_pokemon(species_id=42)] result_dict = transfer_plugin.filter_pokemon_by_ignore_list( bot=bot, transfer_list=transfer_list) assert len(result_dict["transfer_list"]) == 1 assert len(result_dict["filter_list"]) == 0 transfer_list = [self._create_pokemon(species_id=1)] result_dict = transfer_plugin.filter_pokemon_by_ignore_list( bot=bot, transfer_list=transfer_list) assert len(result_dict["transfer_list"]) == 0 assert result_dict["filter_list"][0] == "excluding Bulbasaurs" self.set_empty_inventory(bot) assert transfer_plugin.filter_pokemon_by_ignore_list(bot=bot) is False
def test_init_negative_walk(): config = create_core_test_config({ "movement": { "walk_speed": -5, } }) api_wrapper = create_mock_api_wrapper(config) path_finder = Mock() logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) assert stepper.speed == 4.16
def test_init_path_finder_direct(): config = create_core_test_config({ "movement": { "walk_speed": 4.16, } }) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) assert isinstance(stepper.path_finder, DirectPathFinder)
def test_ignore_list_filter(self): event_manager = EventManager() logger = Mock() logger.log = Mock() transfer_plugin = TransferPokemon( { 'transfer_on_start': False, 'use_always_keep_filter': True, 'use_cp_iv_filter': False, 'always_keep': { 'Bulbasaur': True, 'Ivysaur': True, 'Venusaur': True, } }, event_manager, logger ) bot = create_mock_bot() transfer_list = [self._create_pokemon(unique_id=1, species_id=1), self._create_pokemon(unique_id=2, species_id=5), self._create_pokemon(unique_id=3, species_id=2), self._create_pokemon(unique_id=4, species_id=4), self._create_pokemon(unique_id=5, species_id=3), self._create_pokemon(unique_id=6, species_id=1), self._create_pokemon(unique_id=7, species_id=5)] result_dict = transfer_plugin.filter_pokemon_by_ignore_list(bot=bot, transfer_list=transfer_list) filtered_list = result_dict["transfer_list"] assert len(filtered_list) == 3 assert filtered_list[0].unique_id == 2 assert filtered_list[1].unique_id == 4 assert filtered_list[2].unique_id == 7 assert "Bulbasaurs" in result_dict["filter_list"][0] assert "Ivysaurs" in result_dict["filter_list"][0] assert "Venusaurs" in result_dict["filter_list"][0] transfer_list = [self._create_pokemon(species_id=42)] result_dict = transfer_plugin.filter_pokemon_by_ignore_list(bot=bot, transfer_list=transfer_list) assert len(result_dict["transfer_list"]) == 1 assert len(result_dict["filter_list"]) == 0 transfer_list = [self._create_pokemon(species_id=1)] result_dict = transfer_plugin.filter_pokemon_by_ignore_list(bot=bot, transfer_list=transfer_list) assert len(result_dict["transfer_list"]) == 0 assert result_dict["filter_list"][0] == "excluding Bulbasaurs" self.set_empty_inventory(bot) assert transfer_plugin.filter_pokemon_by_ignore_list(bot=bot) is False
def test_step(): config = create_core_test_config({ "movement": { "walk_speed": 5, "path_finder": "direct", "distance_unit": "m" } }) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) stepper.start(51.50451, -0.07607, 10) destination = Destination(51.506000, -0.075049, 11, name="Test Destination", exact_location=False) steps = [(51.504778, -0.075838, 10), (51.505092, -0.075650, 11), (51.505436, -0.075446, 11)] destination.set_steps(steps) pgo = api_wrapper.get_api() # This route is being walked: http://www.darrinward.com/lat-long/?id=2163411 # pre-calculated distance is 17.8 meters pointer = 0 for _ in stepper.step(destination): target_lat, target_lng, target_alt = steps[pointer] assert stepper.current_lat == target_lat assert stepper.current_lng == target_lng assert stepper.current_alt == target_alt bot_lat, bot_lng, bot_alt = pgo.get_position() assert bot_lat == target_lat assert bot_lng == target_lng assert bot_alt == target_alt pointer += 1 assert pointer == 3 bot_lat, bot_lng, bot_alt = pgo.get_position() assert bot_lat == 51.505436 assert bot_lng == -0.075446 assert bot_alt == 11 assert stepper.current_lat == 51.505436 assert stepper.current_lng == -0.075446 assert stepper.current_alt == 11
def test_step(): config = create_core_test_config({ "movement": { "walk_speed": 5, "path_finder": "direct", "distance_unit": "m" } }) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) stepper.start(51.50451, -0.07607, 10) destination = Destination(51.506000, -0.075049, 11, name="Test Destination", exact_location=False) steps = [ (51.504778, -0.075838, 10), (51.505092, -0.075650, 11), (51.505436, -0.075446, 11) ] destination.set_steps(steps) pgo = api_wrapper.get_api() # This route is being walked: http://www.darrinward.com/lat-long/?id=2163411 # pre-calculated distance is 17.8 meters pointer = 0 for _ in stepper.step(destination): target_lat, target_lng, target_alt = steps[pointer] assert stepper.current_lat == target_lat assert stepper.current_lng == target_lng assert stepper.current_alt == target_alt bot_lat, bot_lng, bot_alt = pgo.get_position() assert bot_lat == target_lat assert bot_lng == target_lng assert bot_alt == target_alt pointer += 1 assert pointer == 3 bot_lat, bot_lng, bot_alt = pgo.get_position() assert bot_lat == 51.505436 assert bot_lng == -0.075446 assert bot_alt == 11 assert stepper.current_lat == 51.505436 assert stepper.current_lng == -0.075446 assert stepper.current_alt == 11
def test_find_location_with_coordinates(): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) google_maps = Mock(spec=Client) google_maps.elevation = Mock(return_value=[{'elevation': 10.1}]) logger = Mock() logger.log = Mock(return_value=None) mapper = Mapper(config, api_wrapper, google_maps, logger) lat, lng, alt = mapper.find_location('51.5044524, -0.0752479') assert lat == 51.5044524 assert lng == -0.0752479 assert alt == 10.1
def test_wrap_pokemon(self): event_manager = EventManager() logger = Mock() logger.log = Mock() transfer_plugin = TransferPokemon({'transfer_on_start': False}, event_manager, logger) transfer_list = [self._create_pokemon(unique_id=1)] transfer_list = transfer_plugin.wrap_pokemon_in_list( transfer_list=transfer_list, pokemon=self._create_pokemon(unique_id=2))["transfer_list"] assert len(transfer_list) == 2 assert transfer_list[0].unique_id == 1 assert transfer_list[1].unique_id == 2
def test_heartbeat(self): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) event_manager = Mock() logger = Mock() logger.log = Mock() player_service = Player(api_wrapper, event_manager, logger) pgo = api_wrapper.get_api() pgo.set_response('get_player', self._create_generic_player_response()) pgo.set_response('get_inventory', self._create_generic_inventory_response()) player_service.heartbeat() assert pgo.call_stack_size() == 0
def test_print_stats_no_update(self): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) event_manager = Mock() logger = Mock() logger.log = Mock() player_service = Player(api_wrapper, event_manager, logger) api_wrapper.call = Mock(return_value=None) logger.log.return_value = None player_service.print_stats() self._assert_log_call(logger.log, 'Failed to retrieve player and inventory stats', color='red')
def __do_not_call(self): # s = Settings s = Mock() # methods: s.isOptionWritable = Mock(return_value=True) s.set = Mock(return_value=None) s.save = Mock() # props: s.log = Mock() # subobjects s.p = Mock() s.p.getboolean = Mock(return_value=True) s.p.has_option = Mock
def __do_not_call(self): # s = Settings s = Mock() # methods: s.is_option_writable = Mock(return_value=True) s.set = Mock(return_value=None) s.save = Mock() # props: s.log = Mock() # subobjects s.p = Mock() s.p.getboolean = Mock(return_value=True) s.p.has_option = Mock
def _create_generic_bot(config): logger = Mock() logger.log = Mock() config_namespace = create_core_test_config(config) api_wrapper = create_mock_api_wrapper(config_namespace) event_manager = Mock() player_service = Player(api_wrapper, event_manager, logger) pokemon_service = PokemonService(api_wrapper) mapper = Mapper(config_namespace, api_wrapper, Mock(), logger) path_finder = DirectPathFinder(config_namespace) stepper = Stepper(config_namespace, api_wrapper, path_finder, logger) navigator = FortNavigator(config_namespace, api_wrapper) return PokemonGoBot(config_namespace, api_wrapper, player_service, pokemon_service, event_manager, mapper, stepper, navigator, logger)
def test_get_cells(self): account = test_account_name() config = create_core_test_config({ "debug": True, "login": { "username": account, }, "mapping": { "cell_radius": 500 } }) api_wrapper = create_mock_api_wrapper(config) google_maps = Mock(spec=Client) logger = Mock() logger.log = Mock(return_value=None) mapper = Mapper(config, api_wrapper, google_maps, logger) api_wrapper.set_position(51.5044524, -0.0752479, 10) pgo = api_wrapper.get_api() pgo.set_response( "get_map_objects", { "map_cells": [ self._create_map_cell(1), self._create_map_cell(2), self._create_map_cell(3), self._create_map_cell(4), self._create_map_cell(5) ] }) # Clean up any old location logs if os.path.isfile('data/last-location-' + account + '.json'): os.unlink('data/last-location-' + account + '.json') cells = mapper.get_cells(51.5044524, -0.0752479) assert len(cells) == 5 assert bool( os.path.isfile('data/last-location-' + account + '.json')) is True with open('data/last-location-' + account + '.json') as data_file: data = json.load(data_file) assert data["lat"] == 51.5044524 assert data["lng"] == -0.0752479 os.unlink('data/last-location-' + account + '.json')
def test_get_player(self): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) event_manager = Mock() logger = Mock() logger.log = Mock() player_service = Player(api_wrapper, event_manager, logger) pgo = api_wrapper.get_api() pgo.set_response('get_player', self._create_generic_player_response()) pgo.set_response('get_inventory', self._create_generic_inventory_response()) player = player_service.get_player() assert isinstance(player, PlayerData) assert player.username == 'test_account' assert pgo.call_stack_size() == 0
def test_get_candies(self): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) event_manager = Mock() logger = Mock() logger.log = Mock() player_service = Player(api_wrapper, event_manager, logger) pgo = api_wrapper.get_api() pgo.set_response('get_player', self._create_generic_player_response()) pgo.set_response('get_inventory', self._create_generic_inventory_response()) candies = player_service.get_candies() assert len(candies) == 1 assert candies[1] == 100 assert pgo.call_stack_size() == 0
def test_wrap_pokemon(self): event_manager = EventManager() logger = Mock() logger.log = Mock() transfer_plugin = TransferPokemon( { 'transfer_on_start': False }, event_manager, logger ) transfer_list = [self._create_pokemon(unique_id=1)] transfer_list = transfer_plugin.wrap_pokemon_in_list(transfer_list=transfer_list, pokemon=self._create_pokemon(unique_id=2))["transfer_list"] assert len(transfer_list) == 2 assert transfer_list[0].unique_id == 1 assert transfer_list[1].unique_id == 2
def test_step_already_near_fort(): calls = [] config = create_core_test_config({ "movement": { "walk_speed": 5, "path_finder": "direct", "distance_unit": "m" } }) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) destination = Destination(51.50436, -0.07616, 11, name="Test Destination", exact_location=False) steps = [(51.50442, -0.07612, 10), (51.50448, -0.07609, 11), (51.50436, -0.07616, 11)] destination.set_steps(steps) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) stepper.start(51.50451, -0.07607, 10) pgo = api_wrapper.get_api() # This route is being walked: http://www.darrinward.com/lat-long/?id=2163408 calls.append(call("walking_started", coords=(51.50436, -0.07616, 11))) pointer = 0 for _ in stepper.step(destination): pointer += 1 assert pointer == 0 bot_lat, bot_lng, bot_alt = pgo.get_position() assert bot_lat == 51.50451 assert bot_lng == -0.07607 assert bot_alt == 10 assert stepper.current_lat == 51.50451 assert stepper.current_lng == -0.07607 assert stepper.current_alt == 10
def test_navigate_campsite_invalid_index(self): config = create_core_test_config({ "movement": { "navigator_campsite": [51.5043872, -0.0741802] }, }) api_wrapper = create_mock_api_wrapper(config) logger = Mock() logger.log = Mock(return_value=None) navigator = CamperNavigator(config, api_wrapper, logger) navigator.pointer = 100 map_cells = self._create_map_cells() destinations = list() for _ in navigator.navigate(map_cells): pass assert len(destinations) == 0
def test_find_location_with_coordinates_invalid_response(): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) google_maps = Mock(spec=Client) google_maps.elevation = Mock(return_value=None) location = Mock() location.latitude = 51.5044524 location.longitude = -0.0752479 location.altitude = 10.1 google_maps.geocode = Mock(return_value=location) logger = Mock() logger.log = Mock(return_value=None) mapper = Mapper(config, api_wrapper, google_maps, logger) lat, lng, alt = mapper.find_location('51.5044524, -0.0752479') assert lat == 51.5044524 assert lng == -0.0752479 assert alt == 10.1
def test_step_already_near_fort(): calls = [] config = create_core_test_config({ "movement": { "walk_speed": 5, "path_finder": "direct", "distance_unit": "m" } }) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) destination = Destination(51.50436, -0.07616, 11, name="Test Destination", exact_location=False) steps = [ (51.50442, -0.07612, 10), (51.50448, -0.07609, 11), (51.50436, -0.07616, 11) ] destination.set_steps(steps) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) stepper.start(51.50451, -0.07607, 10) pgo = api_wrapper.get_api() # This route is being walked: http://www.darrinward.com/lat-long/?id=2163408 calls.append(call("walking_started", coords=(51.50436, -0.07616, 11))) pointer = 0 for _ in stepper.step(destination): pointer += 1 assert pointer == 0 bot_lat, bot_lng, bot_alt = pgo.get_position() assert bot_lat == 51.50451 assert bot_lng == -0.07607 assert bot_alt == 10 assert stepper.current_lat == 51.50451 assert stepper.current_lng == -0.07607 assert stepper.current_alt == 10
def test_send_message(self): mock_client = Mock(spec=SlackClient) mock_client.api_call.return_value = "ok" channel = 'test channel' entries = ['main/loss'] kwargs = dict(token_or_client=mock_client, entries=entries, channel=channel) mock_trainer = Mock(spec=training.Trainer) mock_log_report = Mock(spec=log_report_module.LogReport) mock_log_report.log = [] mock_trainer.get_extension.return_value = mock_log_report reporter = slack_report.SlackReport(**kwargs) reporter(trainer=mock_trainer) mock_client.api_call.assert_called_with("chat.postMessage", channel=channel, text=mock.ANY)
def test_add_candy_new(self): config = create_core_test_config() api_wrapper = create_mock_api_wrapper(config) event_manager = Mock() logger = Mock() logger.log = Mock() player_service = Player(api_wrapper, event_manager, logger) pgo = api_wrapper.get_api() pgo.set_response('get_player', self._create_generic_player_response()) pgo.set_response('get_inventory', self._create_generic_inventory_response()) before_candies = player_service.get_candy(1) assert before_candies == 100 player_service.add_candy(10, 3) after_candies = player_service.get_candy(10) assert after_candies == 3 assert pgo.call_stack_size() == 0
def test_includeme(self, mock_resolve): module = Mock() config = Mock() config.registry.settings = {'nefertari.engine': 'foo'} module.log = 1 module.__testvar__ = 3 module.another_var = 4 mock_resolve.return_value = module from nefertari import engine assert not hasattr(engine, 'log') assert not hasattr(engine, '__testvar__') assert not hasattr(engine, 'another_var') engine.includeme(config) config.include.assert_called_once_with('foo') mock_resolve.assert_called_once_with('foo') assert not hasattr(engine, 'log') assert not hasattr(engine, '__testvar__') assert hasattr(engine, 'another_var')
def simple_step (): from octopus.sequence import Step from octopus.util import Event d = defer.Deferred() step = Mock(spec = Step) step.run = Mock(return_value = d) ok = defer.succeed(None) step.reset = Mock(return_value = ok) step.pause = Mock(return_value = ok) step.resume = Mock(return_value = ok) step.cancel = Mock(return_value = ok) step.abort = Mock(return_value = ok) step.event = Event() step.log = Event() step.duration = 10 return d, step
def test_get_route_between(): config = create_core_test_config({ "movement": { "walk_speed": 5, } }) api_wrapper = create_mock_api_wrapper(config) path_finder = DirectPathFinder(config) logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) stepper.start(51.5044524, -0.0752479, 10) # pre-calculated distance is 205.5 meters # expected steps is 205.5 / (0.6 * 5) = 68.5 (which rounds to 69) steps = stepper.get_route_between(51.5044524, -0.0752479, 51.5062939, -0.0750065, 10) assert len(steps) == 69 for step in steps: assert len(step) == 3
def test_init(): config = create_core_test_config({ "movement": { "walk_speed": 13.37, } }) api_wrapper = create_mock_api_wrapper(config) path_finder = Mock() logger = Mock() logger.log = Mock(return_value=None) stepper = Stepper(config, api_wrapper, path_finder, logger) assert stepper.origin_lat is None assert stepper.origin_lng is None assert stepper.origin_alt is None assert stepper.current_lat is None assert stepper.current_lng is None assert stepper.current_alt is None assert stepper.speed == 13.37
def simple_step (): d = defer.Deferred() step = Mock(spec = Step) step.run = Mock(return_value = d) ok = defer.succeed(None) step.reset = Mock(return_value = ok) step.pause = Mock(return_value = ok) step.resume = Mock(return_value = ok) step.cancel = Mock(return_value = ok) step.event = Mock() step.event.__iadd__ = Mock() step.event.__isub__ = Mock() step.log = Mock() step.log.__iadd__ = Mock() step.log.__isub__ = Mock() step.duration = 10 return d, step
def test_execute_success(self): engine = Mock() engine.log = Mock() engine.log.info = MagicMock() engine.log.failed = MagicMock() execute_mock = MagicMock() topics = [Mock()] get_topics_mock = Mock(return_value=topics) self.tracker1.execute = execute_mock self.tracker1.get_topics = get_topics_mock self.tracker2.execute = execute_mock self.tracker2.get_topics = get_topics_mock self.trackers_manager.execute(engine, None) self.assertTrue(engine.log.info.called) self.assertFalse(engine.log.failed.called) get_topics_mock.assert_called_with(None) execute_mock.assert_called_with(topics, engine)
def _create_generic_bot(config): logger = Mock() logger.log = Mock() config_namespace = create_core_test_config(config) api_wrapper = create_mock_api_wrapper(config_namespace) event_manager = Mock() player_service = Player(api_wrapper, event_manager, logger) pokemon_service = PokemonService(api_wrapper) mapper = Mapper(config_namespace, api_wrapper, Mock(), logger) path_finder = DirectPathFinder(config_namespace) stepper = Stepper(config_namespace, api_wrapper, path_finder, logger) navigator = FortNavigator(config_namespace, api_wrapper) return PokemonGoBot( config_namespace, api_wrapper, player_service, pokemon_service, event_manager, mapper, stepper, navigator, logger )