def test_process_request_quest__query(self): old_hero_1_info = logic.create_hero_info(self.hero_1) self.hero_1._model.level = 666 new_hero_1_info = logic.create_hero_info(self.hero_1) hero_2_info = logic.create_hero_info(self.hero_2) self.assertNotEqual(old_hero_1_info, new_hero_1_info) self.worker.process_request_quest(self.hero_1.account_id, old_hero_1_info.serialize()) self.worker.process_request_quest(self.hero_2.account_id, hero_2_info.serialize()) self.worker.process_request_quest(self.hero_1.account_id, new_hero_1_info.serialize()) self.assertEqual(self.worker.requests_query, collections.deque([self.account_1.id, self.account_2.id])) self.assertEqual(self.worker.requests_heroes_infos, {self.account_1.id: new_hero_1_info, self.account_2.id: hero_2_info}) with mock.patch('the_tale.game.workers.supervisor.Worker.cmd_setup_quest') as cmd_setup_quest: self.worker.generate_quest() self.assertEqual(cmd_setup_quest.call_args_list[0][0][0], self.account_1.id) self.assertEqual(self.worker.requests_query, collections.deque([self.account_2.id])) self.assertEqual(self.worker.requests_heroes_infos, {self.account_2.id: hero_2_info}) with mock.patch('the_tale.game.workers.supervisor.Worker.cmd_setup_quest') as cmd_setup_quest: self.worker.generate_quest() self.assertEqual(cmd_setup_quest.call_args_list[0][0][0], self.account_2.id) self.assertEqual(self.worker.requests_query, collections.deque()) self.assertEqual(self.worker.requests_heroes_infos, {})
def test_process_request_quest__query(self): old_hero_1_info = logic.create_hero_info(self.hero_1) self.hero_1.level = 666 new_hero_1_info = logic.create_hero_info(self.hero_1) hero_2_info = logic.create_hero_info(self.hero_2) self.assertNotEqual(old_hero_1_info, new_hero_1_info) self.worker.process_request_quest(self.hero_1.account_id, old_hero_1_info.serialize()) self.worker.process_request_quest(self.hero_2.account_id, hero_2_info.serialize()) self.worker.process_request_quest(self.hero_1.account_id, new_hero_1_info.serialize()) self.assertEqual(self.worker.requests_query, collections.deque([self.account_1.id, self.account_2.id])) self.assertEqual(self.worker.requests_heroes_infos, {self.account_1.id: new_hero_1_info, self.account_2.id: hero_2_info}) with mock.patch('the_tale.game.workers.supervisor.Worker.cmd_setup_quest') as cmd_setup_quest: self.worker.generate_quest() self.assertEqual(cmd_setup_quest.call_args_list[0][0][0], self.account_1.id) self.assertEqual(self.worker.requests_query, collections.deque([self.account_2.id])) self.assertEqual(self.worker.requests_heroes_infos, {self.account_2.id: hero_2_info}) with mock.patch('the_tale.game.workers.supervisor.Worker.cmd_setup_quest') as cmd_setup_quest: self.worker.generate_quest() self.assertEqual(cmd_setup_quest.call_args_list[0][0][0], self.account_2.id) self.assertEqual(self.worker.requests_query, collections.deque()) self.assertEqual(self.worker.requests_heroes_infos, {})
def test_process_request_quest(self): with mock.patch('the_tale.game.workers.supervisor.Worker.cmd_setup_quest') as cmd_setup_quest: self.worker.process_request_quest(self.hero_1.account_id, logic.create_hero_info(self.hero_1).serialize()) self.worker.generate_quest() self.assertEqual(cmd_setup_quest.call_count, 1) self.assertEqual(cmd_setup_quest.call_args_list[0][0][0], self.hero_1.account_id) self.assertTrue(questgen_knowlege_base.KnowledgeBase.deserialize(cmd_setup_quest.call_args_list[0][0][1], fact_classes=questgen_facts.FACTS))
def test_create_hero_info__all_properties(self): self.hero.level = 11 self.hero.position.set_place(self.place_1) mob = mobs_storage.all()[0] self.hero.preferences.set_mob(mob) place = self.place_1 self.hero.preferences.set_place(place) friend = self.place_2.persons[0] self.hero.preferences.set_friend(friend) enemy = self.place_2.persons[1] self.hero.preferences.set_enemy(enemy) self.hero.preferences.set_equipment_slot(EQUIPMENT_SLOT.HELMET) interfered_person = self.place_3.persons[0] self.hero.quests.add_interfered_person(interfered_person.id) is_first_quest_path_required = random.choice((True, False)) is_short_quest_path_required = random.choice((True, False)) prefered_quest_markers = set((questgen_relations.OPTION_MARKERS.HONORABLE, questgen_relations.OPTION_MARKERS.AGGRESSIVE)) self.hero.quests.update_history(quest_type='spying', turn_number=0) self.hero.quests.update_history(quest_type='hunt', turn_number=0) with contextlib.nested( mock.patch('the_tale.game.heroes.objects.Hero.is_first_quest_path_required', is_first_quest_path_required), mock.patch('the_tale.game.heroes.objects.Hero.is_short_quest_path_required', is_short_quest_path_required), mock.patch('the_tale.game.heroes.objects.Hero.prefered_quest_markers', lambda hero: prefered_quest_markers) ): hero_info = logic.create_hero_info(self.hero) self.assertEqual(hero_info.id, self.hero.id) self.assertEqual(hero_info.level, self.hero.level) self.assertEqual(hero_info.position_place_id, self.hero.position.place.id) self.assertEqual(hero_info.preferences_mob_id, self.hero.preferences.mob.id) self.assertEqual(hero_info.preferences_place_id, self.hero.preferences.place.id) self.assertEqual(hero_info.preferences_friend_id, self.hero.preferences.friend.id) self.assertEqual(hero_info.preferences_enemy_id, self.hero.preferences.enemy.id) self.assertEqual(hero_info.preferences_equipment_slot, self.hero.preferences.equipment_slot) self.assertEqual(hero_info.interfered_persons, [interfered_person.id]) self.assertEqual(hero_info.is_first_quest_path_required, is_first_quest_path_required) self.assertEqual(hero_info.is_short_quest_path_required, is_short_quest_path_required) self.assertItemsEqual(hero_info.excluded_quests, self.hero.quests.history.keys()) self.assertEqual(hero_info.prefered_quest_markers, prefered_quest_markers) self.assertEqual(hero_info.quests_priorities, self.hero.get_quests_priorities()) self.check_serialization(hero_info)
def test_create_hero_info__no_properties(self): hero_info = logic.create_hero_info(self.hero) self.assertEqual(hero_info.id, self.hero.id) self.assertEqual(hero_info.level, self.hero.level) self.assertEqual(hero_info.position_place_id, self.hero.position.place.id) self.assertEqual(hero_info.preferences_mob_id, None) self.assertEqual(hero_info.preferences_place_id, None) self.assertEqual(hero_info.preferences_friend_id, None) self.assertEqual(hero_info.preferences_enemy_id, None) self.assertEqual(hero_info.preferences_equipment_slot, None) self.assertEqual(hero_info.interfered_persons, []) self.assertEqual(hero_info.is_first_quest_path_required, self.hero.is_first_quest_path_required) self.assertEqual(hero_info.is_short_quest_path_required, self.hero.is_short_quest_path_required) self.assertItemsEqual(hero_info.excluded_quests, self.hero.quests.history.keys()) self.assertEqual(hero_info.prefered_quest_markers, set()) self.assertEqual(hero_info.quests_priorities, self.hero.get_quests_priorities()) self.check_serialization(hero_info)
def test_create_hero_info__no_properties(self): hero_info = logic.create_hero_info(self.hero) self.assertEqual(hero_info.id, self.hero.id) self.assertEqual(hero_info.level, self.hero.level) self.assertEqual(hero_info.position_place_id, self.hero.position.place.id) self.assertEqual(hero_info.preferences_mob_id, None) self.assertEqual(hero_info.preferences_place_id, None) self.assertEqual(hero_info.preferences_friend_id, None) self.assertEqual(hero_info.preferences_enemy_id, None) self.assertEqual(hero_info.preferences_equipment_slot, None) self.assertEqual(hero_info.interfered_persons, []) self.assertEqual(hero_info.is_first_quest_path_required, self.hero.is_first_quest_path_required) self.assertEqual(hero_info.is_short_quest_path_required, self.hero.is_short_quest_path_required) self.assertCountEqual(hero_info.excluded_quests, list(self.hero.quests.history.keys())) self.assertEqual(hero_info.prefered_quest_markers, set()) self.assertEqual(hero_info.quests_priorities, self.hero.get_quests_priorities()) self.check_serialization(hero_info)
def setup_quest(hero): hero_info = logic.create_hero_info(hero) knowledge_base = logic.create_random_quest_for_hero(hero_info, mock.Mock()) logic.setup_quest_for_hero(hero, knowledge_base.serialize())
def test_create_hero_info__all_properties(self): self.hero.level = 11 self.hero.position.set_place(self.place_1) mob = mobs_storage.all()[0] self.hero.preferences.set_mob(mob) place = self.place_1 self.hero.preferences.set_place(place) friend = self.place_2.persons[0] self.hero.preferences.set_friend(friend) enemy = self.place_2.persons[1] self.hero.preferences.set_enemy(enemy) self.hero.preferences.set_equipment_slot(EQUIPMENT_SLOT.HELMET) interfered_person = self.place_3.persons[0] self.hero.quests.add_interfered_person(interfered_person.id) is_first_quest_path_required = random.choice((True, False)) is_short_quest_path_required = random.choice((True, False)) prefered_quest_markers = set( (questgen_relations.OPTION_MARKERS.HONORABLE, questgen_relations.OPTION_MARKERS.AGGRESSIVE)) self.hero.quests.update_history(quest_type='spying', turn_number=0) self.hero.quests.update_history(quest_type='hunt', turn_number=0) with mock.patch('the_tale.game.heroes.objects.Hero.is_first_quest_path_required', is_first_quest_path_required), \ mock.patch('the_tale.game.heroes.objects.Hero.is_short_quest_path_required', is_short_quest_path_required), \ mock.patch('the_tale.game.heroes.objects.Hero.prefered_quest_markers', lambda hero: prefered_quest_markers): hero_info = logic.create_hero_info(self.hero) self.assertEqual(hero_info.id, self.hero.id) self.assertEqual(hero_info.level, self.hero.level) self.assertEqual(hero_info.position_place_id, self.hero.position.place.id) self.assertEqual(hero_info.preferences_mob_id, self.hero.preferences.mob.id) self.assertEqual(hero_info.preferences_place_id, self.hero.preferences.place.id) self.assertEqual(hero_info.preferences_friend_id, self.hero.preferences.friend.id) self.assertEqual(hero_info.preferences_enemy_id, self.hero.preferences.enemy.id) self.assertEqual(hero_info.preferences_equipment_slot, self.hero.preferences.equipment_slot) self.assertEqual(hero_info.interfered_persons, [interfered_person.id]) self.assertEqual(hero_info.is_first_quest_path_required, is_first_quest_path_required) self.assertEqual(hero_info.is_short_quest_path_required, is_short_quest_path_required) self.assertCountEqual(hero_info.excluded_quests, list(self.hero.quests.history.keys())) self.assertEqual(hero_info.prefered_quest_markers, prefered_quest_markers) self.assertEqual(hero_info.quests_priorities, self.hero.get_quests_priorities()) self.check_serialization(hero_info)
def get_hero_info(self): return logic.create_hero_info(self.hero)