Exemplo n.º 1
0
class RepairBuildingTests(CardsTestMixin, testcase.TestCase):
    CARD = effects.RepairBuilding

    def setUp(self):
        super(RepairBuildingTests, self).setUp()

        self.place_1, self.place_2, self.place_3 = create_test_map()

        self.account_1 = self.accounts_factory.create_account()
        self.account_2 = self.accounts_factory.create_account(is_fast=True)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)
        self.storage.load_account_data(self.account_2)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

        environment.deinitialize()
        environment.initialize()

        self.highlevel = environment.workers.highlevel
        self.highlevel.process_initialize(0, 'highlevel')

        self.building_1 = places_logic.create_building(person=self.place_1.persons[0], utg_name=names.generator().get_test_name('building-1-name'))
        self.building_2 = places_logic.create_building(person=self.place_2.persons[0], utg_name=names.generator().get_test_name('building-1-name'))

        self.building_1.amortize(c.TURNS_IN_HOUR*24)
        self.building_2.amortize(c.TURNS_IN_HOUR*24)

    def test_use(self):

        self.assertTrue(self.building_1.need_repair)
        self.assertTrue(self.building_2.need_repair)

        result, step, postsave_actions = self.card.use(**self.use_attributes(hero=self.hero, storage=self.storage, building_id=self.building_2.id))

        self.assertEqual((result, step), (ComplexChangeTask.RESULT.CONTINUE, ComplexChangeTask.STEP.HIGHLEVEL))
        self.assertEqual(len(postsave_actions), 1)

        with mock.patch('the_tale.game.workers.highlevel.Worker.cmd_logic_task') as highlevel_logic_task_counter:
            postsave_actions[0]()

        self.assertEqual(highlevel_logic_task_counter.call_count, 1)

        result, step, postsave_actions = self.card.use(**self.use_attributes(hero=self.hero,
                                                                             step=step,
                                                                             highlevel=self.highlevel,
                                                                             building_id=self.building_2.id))

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))

        self.assertTrue(self.building_1.need_repair)
        self.assertFalse(self.building_2.need_repair)


    def test_use_for_wrong_place_id(self):
        self.assertEqual(self.card.use(**self.use_attributes(hero=self.hero, building_id=666, storage=self.storage)),
                        (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ()))
    def test_initialize_bots__second_create(self):
        account_1 = self.accounts_factory.create_account()
        account_2 = self.accounts_factory.create_account(is_bot=True)

        storage = LogicStorage()
        storage.load_account_data(account_1)
        storage.load_account_data(account_2)

        hero_1 = storage.accounts_to_heroes[account_1.id]
        hero_2 = storage.accounts_to_heroes[account_2.id]

        hero_1.level = 50
        self.assertEqual(hero_2.level, 1)

        self.pvp_create_battle(account_1, account_2, BATTLE_1X1_STATE.PROCESSING)
        self.pvp_create_battle(account_2, account_1, BATTLE_1X1_STATE.PROCESSING)

        meta_action = meta_actions.ArenaPvP1x1.create(storage, hero_1, hero_2)
        meta_action.process_battle_ending()

        meta_actions.ArenaPvP1x1.create(storage, hero_1, hero_2)

        self.assertEqual(hero_2.level, 50)
        self.assertTrue(len(hero_2.abilities.all) > 1)
        self.assertEqual(hero_2.health, hero_2.max_health)
Exemplo n.º 3
0
    def test_process_bot__flame_ability_not_used(self):
        account_1 = self.accounts_factory.create_account(is_bot=True)
        account_2 = self.accounts_factory.create_account()

        storage = LogicStorage()
        storage.load_account_data(account_1)
        storage.load_account_data(account_2)

        hero_1 = storage.accounts_to_heroes[account_1.id]
        hero_2 = storage.accounts_to_heroes[account_2.id]

        self.meta_action_battle.bot_pvp_properties = {
            'priorities': {
                Flame.TYPE: 1
            },
            'ability_chance': 1
        }

        self.assertEqual(self.meta_action_battle.hero_2_pvp.energy_speed, 1)

        with mock.patch('the_tale.game.pvp.abilities.Flame.use') as use:
            for i in range(100):
                self.meta_action_battle.process_bot(
                    hero_1, hero_2, self.meta_action_battle.hero_2_pvp)

        self.assertEqual(use.call_count, 0)
Exemplo n.º 4
0
class QuestsTestBase(testcase.TestCase):

    def setUp(self):
        super(QuestsTestBase, self).setUp()
        self.p1, self.p2, self.p3 = create_test_map()

        # add more persons, to lower conflicts
        places_logic.add_person_to_place(self.p1)
        places_logic.add_person_to_place(self.p1)
        places_logic.add_person_to_place(self.p2)
        places_logic.add_person_to_place(self.p2)
        places_logic.add_person_to_place(self.p3)
        places_logic.add_person_to_place(self.p3)

        account = self.accounts_factory.create_account(is_fast=True)

        self.storage = LogicStorage()
        self.storage.load_account_data(account)
        self.hero = self.storage.accounts_to_heroes[account.id]
        self.action_idl = self.hero.actions.current_action

        self.hero.money += 1
        self.hero.preferences.set_mob(mobs_storage.all()[0])
        self.hero.preferences.set_place(self.p1)
        self.hero.preferences.set_friend(self.p1.persons[0])
        self.hero.preferences.set_enemy(self.p2.persons[0])
        self.hero.preferences.set_equipment_slot(EQUIPMENT_SLOT.PLATE)
        self.hero.position.set_place(self.p3)
        heroes_logic.save_hero(self.hero)

        self.p2.set_modifier(places_modifiers.CITY_MODIFIERS.HOLY_CITY)
        places_logic.save_place(self.p2)

        self.p1.persons[0].type = PERSON_TYPE.BLACKSMITH
        persons_logic.save_person(self.p1.persons[0])
class BuyRandomPremiumChestTask__EpicArtifact_Tests(
        base_buy_task._BaseBuyHeroMethodPosponedTaskTests):
    def setUp(self):
        super(BuyRandomPremiumChestTask__EpicArtifact_Tests, self).setUp()

        self.task = BuyRandomPremiumChest(account_id=self.account.id,
                                          transaction=self.transaction)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.cmd_update_with_account_data__call_count = 0
        self.accounts_manages_worker = False
        self.supervisor_worker = True

        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.assertEqual(self.hero.bag.occupation, 0)

    def _get_expected_arguments(self):
        return {}

    def _check_not_used(self):
        self.assertEqual(self.hero.bag.occupation, 0)
        self.assertEqual(RandomPremiumRequestPrototype._db_count(), 0)

    def _check_used(self):
        self.assertEqual(self.hero.bag.occupation, 1)
        self.assertTrue(list(self.hero.bag.values())[0].rarity.is_EPIC)
        self.assertEqual(RandomPremiumRequestPrototype._db_count(), 1)
Exemplo n.º 6
0
class LevelUpTest(testcase.TestCase, CardsTestMixin):
    CARD = LevelUp

    def setUp(self):
        super(LevelUpTest, self).setUp()

        create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.abilities = self.hero.abilities

        self.card = self.CARD()


    def test_use(self):

        self.hero.add_experience(self.hero.experience_to_next_level / 2)

        self.assertTrue(self.hero.experience > 0)
        self.assertEqual(self.hero.level, 1)

        with self.check_not_changed(lambda: self.hero.experience):
            with self.check_delta(lambda: self.hero.level, 1):
                result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))
                self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))

        saved_hero = heroes_logic.load_hero(hero_id=self.hero.id)
        self.assertEqual(saved_hero.abilities.destiny_points, self.abilities.destiny_points)
Exemplo n.º 7
0
class HelpPlaceMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(HelpPlaceMixin, self).setUp()

        self.place_1, self.place_2, self.place_3 = create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]


    def test_use(self):
        with self.check_delta(lambda: self.hero.places_history._get_places_statisitcs().get(self.place_1.id, 0), self.CARD.effect.modificator):
            result, step, postsave_actions = self.CARD.effect.use(**self.use_attributes(storage=self.storage, hero=self.hero, value=self.place_1.id))

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))

    def test_wrong_place(self):
        with self.check_not_changed(lambda: self.hero.places_history._get_places_statisitcs().get(self.place_1.id, 0)):
            result, step, postsave_actions = self.CARD.effect.use(**self.use_attributes(storage=self.storage, hero=self.hero, value=666))
        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ()))
Exemplo n.º 8
0
class AddGoldTestMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(AddGoldTestMixin, self).setUp()

        create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

    def test_use(self):
        with self.check_delta(lambda: self.hero.money, self.CARD.GOLD):
            with self.check_delta(
                    lambda: self.hero.statistics.money_earned_from_help,
                    self.CARD.GOLD):
                with self.check_delta(
                        lambda: self.hero.statistics.money_earned,
                        self.CARD.GOLD):
                    result, step, postsave_actions = self.card.use(
                        **self.use_attributes(storage=self.storage,
                                              hero=self.hero))

        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))
Exemplo n.º 9
0
class HeroPreferencesCompanionEmpathyTest(TestCase):
    PREFERENCE_TYPE = relations.PREFERENCE_TYPE.COMPANION_EMPATHY

    def setUp(self):
        super(HeroPreferencesCompanionEmpathyTest, self).setUp()
        create_test_map()

        self.account = self.accounts_factory.create_account()
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.hero.level = relations.PREFERENCE_TYPE.COMPANION_EMPATHY.level_required
        logic.save_hero(self.hero)

        self.empath = relations.COMPANION_EMPATHY.EMPATH
        self.egocentric = relations.COMPANION_EMPATHY.EGOCENTRIC

    def test_initialization(self):
        self.assertTrue(self.hero.preferences.companion_empathy.is_ORDINAL)

    def test_preferences_serialization(self):
        self.hero.preferences.set(relations.PREFERENCE_TYPE.COMPANION_EMPATHY,
                                  self.empath)
        data = self.hero.preferences.serialize()
        self.assertEqual(data, HeroPreferences.deserialize(data).serialize())

    def test_save(self):
        self.hero.preferences.set(relations.PREFERENCE_TYPE.COMPANION_EMPATHY,
                                  self.empath)
        logic.save_hero(self.hero)
        self.hero = logic.load_hero(hero_id=self.hero.id)
        self.assertEqual(self.hero.preferences.companion_empathy, self.empath)
class BuyRandomPremiumChestTask__EpicArtifact_Tests(base_buy_task._BaseBuyHeroMethodPosponedTaskTests):

    def setUp(self):
        super(BuyRandomPremiumChestTask__EpicArtifact_Tests, self).setUp()

        self.task = BuyRandomPremiumChest(account_id=self.account.id,
                                          transaction=self.transaction)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.cmd_update_with_account_data__call_count = 0
        self.accounts_manages_worker = False
        self.supervisor_worker = True

        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.assertEqual(self.hero.bag.occupation, 0)


    def _get_expected_arguments(self):
        return {}

    def _check_not_used(self):
        self.assertEqual(self.hero.bag.occupation, 0)
        self.assertEqual(RandomPremiumRequestPrototype._db_count(), 0)

    def _check_used(self):
        self.assertEqual(self.hero.bag.occupation, 1)
        self.assertTrue(self.hero.bag.values()[0].rarity.is_EPIC)
        self.assertEqual(RandomPremiumRequestPrototype._db_count(), 1)
Exemplo n.º 11
0
class AddBonusEnergyTestMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(AddBonusEnergyTestMixin, self).setUp()
        create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

    def test_use(self):
        with self.check_delta(
                lambda: tt_api_energy.energy_balance(self.account_1.id),
                self.CARD.effect.modificator):
            result, step, postsave_actions = self.CARD.effect.use(
                **self.use_attributes(storage=self.storage, hero=self.hero))
            time.sleep(0.1)

        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))
Exemplo n.º 12
0
class AddGoldTestMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(AddGoldTestMixin, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user('test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()


    def test_use(self):
        with self.check_delta(lambda: self.hero.money, self.CARD.GOLD):
            with self.check_delta(lambda: self.hero.statistics.money_earned_from_help, self.CARD.GOLD):
                with self.check_delta(lambda: self.hero.statistics.money_earned, self.CARD.GOLD):
                    result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))
class BuyRandomPremiumChestTask__Energy_Tests(base_buy_task._BaseBuyHeroMethodPosponedTaskTests):

    def setUp(self):
        super(BuyRandomPremiumChestTask__Energy_Tests, self).setUp()

        self.task = BuyRandomPremiumChest(account_id=self.account.id,
                                          transaction=self.transaction)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.cmd_update_with_account_data__call_count = 0
        self.accounts_manages_worker = False
        self.supervisor_worker = True

        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.hero.energy_bonus = 0


    def _get_expected_arguments(self):
        return {}

    def _check_not_used(self):
        self.assertEqual(self.hero.energy_bonus, 0)
        self.assertEqual(RandomPremiumRequestPrototype._db_count(), 0)

    def _check_used(self):
        self.assertEqual(self.hero.energy_bonus, relations.RANDOM_PREMIUM_CHEST_REWARD.ENERGY.arguments['energy'])
        self.assertEqual(RandomPremiumRequestPrototype._db_count(), 1)
Exemplo n.º 14
0
class LevelUpTest(testcase.TestCase, CardsTestMixin):
    CARD = LevelUp

    def setUp(self):
        super(LevelUpTest, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user(
            'test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

    def test_use(self):

        self.hero.add_experience(self.hero.experience_to_next_level / 2)

        self.assertTrue(self.hero.experience > 0)
        self.assertEqual(self.hero.level, 1)

        with self.check_not_changed(lambda: self.hero.experience):
            with self.check_delta(lambda: self.hero.level, 1):
                result, step, postsave_actions = self.card.use(
                    **self.use_attributes(storage=self.storage,
                                          hero=self.hero))

        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))
Exemplo n.º 15
0
    def test_initialize_bots__second_create(self):
        account_1 = self.accounts_factory.create_account()
        account_2 = self.accounts_factory.create_account(is_bot=True)

        storage = LogicStorage()
        storage.load_account_data(account_1)
        storage.load_account_data(account_2)

        hero_1 = storage.accounts_to_heroes[account_1.id]
        hero_2 = storage.accounts_to_heroes[account_2.id]

        hero_1.level = 50
        self.assertEqual(hero_2.level, 1)

        self.pvp_create_battle(account_1, account_2,
                               BATTLE_1X1_STATE.PROCESSING)
        self.pvp_create_battle(account_2, account_1,
                               BATTLE_1X1_STATE.PROCESSING)

        meta_action = meta_actions.ArenaPvP1x1.create(storage, hero_1, hero_2)
        meta_action.process_battle_ending()

        meta_actions.ArenaPvP1x1.create(storage, hero_1, hero_2)

        self.assertEqual(hero_2.level, 50)
        self.assertTrue(len(hero_2.abilities.all) > 1)
        self.assertEqual(hero_2.health, hero_2.max_health)
Exemplo n.º 16
0
class LevelUpTest(testcase.TestCase, CardsTestMixin):
    CARD = cards.CARD.LEVEL_UP

    def setUp(self):
        super(LevelUpTest, self).setUp()

        create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.abilities = self.hero.abilities


    def test_use(self):

        self.hero.add_experience(self.hero.experience_to_next_level / 2)

        self.assertTrue(self.hero.experience > 0)
        self.assertEqual(self.hero.level, 1)

        with self.check_not_changed(lambda: self.hero.experience):
            with self.check_delta(lambda: self.hero.level, 1):
                result, step, postsave_actions = self.CARD.effect.use(**self.use_attributes(storage=self.storage, hero=self.hero))
                self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))

        saved_hero = heroes_logic.load_hero(hero_id=self.hero.id)
        self.assertEqual(saved_hero.abilities.destiny_points, self.abilities.destiny_points)
Exemplo n.º 17
0
class HelpPlaceMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(HelpPlaceMixin, self).setUp()
        self.place_1, self.place_2, self.place_3 = create_test_map()

        result, account_1_id, bundle_id = register_user('test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()


    def test_use(self):
        with self.check_delta(lambda: self.hero.places_history._get_places_statisitcs().get(self.place_1.id, 0), self.CARD.HELPS):
            result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero, place_id=self.place_1.id))

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))

    def test_wrong_place(self):
        with self.check_not_changed(lambda: self.hero.places_history._get_places_statisitcs().get(self.place_1.id, 0)):
            result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero, place_id=666))
        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ()))
Exemplo n.º 18
0
class QuestsTestBase(testcase.TestCase):

    def setUp(self):
        super(QuestsTestBase, self).setUp()
        self.p1, self.p2, self.p3 = create_test_map()

        # add more persons, to lower conflicts
        places_logic.add_person_to_place(self.p1)
        places_logic.add_person_to_place(self.p1)
        places_logic.add_person_to_place(self.p2)
        places_logic.add_person_to_place(self.p2)
        places_logic.add_person_to_place(self.p3)
        places_logic.add_person_to_place(self.p3)

        account = self.accounts_factory.create_account(is_fast=True)

        self.storage = LogicStorage()
        self.storage.load_account_data(account)
        self.hero = self.storage.accounts_to_heroes[account.id]
        self.action_idl = self.hero.actions.current_action

        self.hero.money += 1
        self.hero.preferences.set(heroes_relations.PREFERENCE_TYPE.MOB, mobs_storage.mobs.all()[0])
        self.hero.preferences.set(heroes_relations.PREFERENCE_TYPE.PLACE, self.p1)
        self.hero.preferences.set(heroes_relations.PREFERENCE_TYPE.FRIEND, self.p1.persons[0])
        self.hero.preferences.set(heroes_relations.PREFERENCE_TYPE.ENEMY, self.p2.persons[0])
        self.hero.preferences.set(heroes_relations.PREFERENCE_TYPE.EQUIPMENT_SLOT, heroes_relations.EQUIPMENT_SLOT.PLATE)
        self.hero.position.set_place(self.p3)
        heroes_logic.save_hero(self.hero)

        self.p2.set_modifier(places_modifiers.CITY_MODIFIERS.HOLY_CITY)
        places_logic.save_place(self.p2)

        self.p1.persons[0].type = PERSON_TYPE.BLACKSMITH
        persons_logic.save_person(self.p1.persons[0])
Exemplo n.º 19
0
class ResetPreferenceMinix(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(ResetPreferenceMinix, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user(
            'test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]
        self.hero.preferences._set(
            self.CARD.PREFERENCE,
            self.hero.preferences._get(self.CARD.PREFERENCE))

        self.card = self.CARD()

    @mock.patch(
        'the_tale.game.heroes.preferences.HeroPreferences.is_available',
        lambda self, preference_type, account: True)
    def test_use(self):
        self.assertFalse(
            self.hero.preferences.can_update(self.CARD.PREFERENCE,
                                             datetime.datetime.now()))

        result, step, postsave_actions = self.card.use(
            **self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))

        self.assertTrue(
            self.hero.preferences.can_update(self.CARD.PREFERENCE,
                                             datetime.datetime.now()))

    @mock.patch(
        'the_tale.game.heroes.preferences.HeroPreferences.is_available',
        lambda self, preference_type, account: False)
    def test_not_available(self):
        self.assertFalse(
            self.hero.preferences.can_update(self.CARD.PREFERENCE,
                                             datetime.datetime.now()))

        result, step, postsave_actions = self.card.use(
            **self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual(
            (result, step, postsave_actions),
            (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR,
             ()))

        self.assertFalse(
            self.hero.preferences.can_update(self.CARD.PREFERENCE,
                                             datetime.datetime.now()))
Exemplo n.º 20
0
class LevelUpTest(testcase.TestCase, CardsTestMixin):
    CARD = LevelUp

    def setUp(self):
        super(LevelUpTest, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user('test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()


    def test_use(self):

        self.hero.add_experience(self.hero.experience_to_next_level / 2)

        self.assertTrue(self.hero.experience > 0)
        self.assertEqual(self.hero.level, 1)

        with self.check_not_changed(lambda: self.hero.experience):
            with self.check_delta(lambda: self.hero.level, 1):
                result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))
Exemplo n.º 21
0
class SharpAllArtifactsTests(CardsTestMixin, testcase.TestCase):
    CARD = effects.SharpAllArtifacts

    def setUp(self):
        super(SharpAllArtifactsTests, self).setUp()

        create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

    def test_use(self):
        with self.check_delta(lambda: self.hero.equipment.get_power().total(),
                              len(list(self.hero.equipment.values()))):
            result, step, postsave_actions = self.card.use(
                **self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))
    def test_initialize_bots__second_create(self):
        result, account_1_id, bundle_id = register_user("test_user_3")
        result, account_2_id, bundle_id = register_user("bot", "*****@*****.**", "111111", is_bot=True)

        account_1 = AccountPrototype.get_by_id(account_1_id)
        account_2 = AccountPrototype.get_by_id(account_2_id)

        storage = LogicStorage()
        storage.load_account_data(account_1)
        storage.load_account_data(account_2)

        hero_1 = storage.accounts_to_heroes[account_1.id]
        hero_2 = storage.accounts_to_heroes[account_2.id]

        hero_1._model.level = 50
        self.assertEqual(hero_2.level, 1)

        self.pvp_create_battle(account_1, account_2, BATTLE_1X1_STATE.PROCESSING)
        self.pvp_create_battle(account_2, account_1, BATTLE_1X1_STATE.PROCESSING)

        meta_action = MetaActionArenaPvP1x1Prototype.create(storage, hero_1, hero_2, bundle_id=self.bundle_id + 1)
        meta_action.process_battle_ending()

        MetaActionArenaPvP1x1Prototype.create(storage, hero_1, hero_2, bundle_id=self.bundle_id + 2)

        self.assertEqual(hero_2.level, 50)
        self.assertTrue(len(hero_2.abilities.all) > 1)
        self.assertEqual(hero_2.health, hero_2.max_health)
Exemplo n.º 23
0
class HeroPreferencesCompanionDedicationTest(TestCase):
    PREFERENCE_TYPE = relations.PREFERENCE_TYPE.COMPANION_DEDICATION

    def setUp(self):
        super(HeroPreferencesCompanionDedicationTest, self).setUp()
        create_test_map()

        self.account = self.accounts_factory.create_account()
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.hero.level = relations.PREFERENCE_TYPE.COMPANION_DEDICATION.level_required
        logic.save_hero(self.hero)

        self.egoism = relations.COMPANION_DEDICATION.EGOISM
        self.altruism = relations.COMPANION_DEDICATION.ALTRUISM

    def test_initialization(self):
        self.assertTrue(self.hero.preferences.companion_dedication.is_NORMAL)

    def test_preferences_serialization(self):
        self.hero.preferences.set(
            relations.PREFERENCE_TYPE.COMPANION_DEDICATION, self.egoism)
        data = self.hero.preferences.serialize()
        self.assertEqual(data, HeroPreferences.deserialize(data).serialize())

    def test_save(self):
        self.hero.preferences.set(
            relations.PREFERENCE_TYPE.COMPANION_DEDICATION, self.egoism)
        logic.save_hero(self.hero)
        self.hero = logic.load_hero(hero_id=self.hero.id)
        self.assertEqual(self.hero.preferences.companion_dedication,
                         self.egoism)
    def test_process_bot__flame_ability_not_used(self):
        result, account_1_id, bundle_id = register_user("bot", "*****@*****.**", "111111", is_bot=True)
        result, account_2_id, bundle_id = register_user("test_user_3")

        account_1 = AccountPrototype.get_by_id(account_1_id)
        account_2 = AccountPrototype.get_by_id(account_2_id)

        storage = LogicStorage()
        storage.load_account_data(account_1)
        storage.load_account_data(account_2)

        hero_1 = storage.accounts_to_heroes[account_1.id]
        hero_2 = storage.accounts_to_heroes[account_2.id]

        MetaActionArenaPvP1x1Prototype.create(storage, hero_1, hero_2, bundle_id=self.bundle_id + 1)

        self.assertEqual(hero_2.pvp.energy_speed, 1)

        with mock.patch(
            "the_tale.game.actions.meta_actions.MetaActionArenaPvP1x1Prototype.get_bot_pvp_properties",
            lambda a: {"priorities": {Flame.TYPE: 1}, "ability_chance": 1},
        ):
            with mock.patch("the_tale.game.pvp.abilities.Flame.use") as use:
                for i in xrange(100):
                    self.meta_action_battle.process_bot(hero_1, hero_2)

        self.assertEqual(use.call_count, 0)
Exemplo n.º 25
0
class ResetPreferenceAllTests(CardsTestMixin, testcase.TestCase):
    CARD = effects.PreferencesCooldownsResetAll

    def setUp(self):
        super(ResetPreferenceAllTests, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user("test_user", "*****@*****.**", "111111")

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        for preference in PREFERENCE_TYPE.records:
            self.hero.preferences._set(preference, self.hero.preferences._get(preference))

        self.card = self.CARD()

    def test_use(self):
        for preference in PREFERENCE_TYPE.records:
            self.assertFalse(self.hero.preferences.can_update(preference, datetime.datetime.now()))

        result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual(
            (result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ())
        )

        for preference in PREFERENCE_TYPE.records:
            self.assertTrue(self.hero.preferences.can_update(preference, datetime.datetime.now()))
    def test_load_account_data(self):
        self.assertEqual(len(self.storage.heroes), 2)
        self.assertEqual(len(self.storage.accounts_to_heroes), 2)
        self.assertEqual(
            self.storage.bundles_to_accounts, {
                self.hero_1.actions.current_action.bundle_id:
                set([self.account_1.id]),
                self.hero_2.actions.current_action.bundle_id:
                set([self.account_2.id])
            })

        action_regenerate = actions_prototypes.ActionRegenerateEnergyPrototype.create(
            hero=self.hero_1)

        self.assertEqual(self.action_idl_1.storage, self.storage)
        self.assertEqual(action_regenerate.storage, self.storage)

        storage = LogicStorage()
        storage.load_account_data(AccountPrototype.get_by_id(
            self.account_1.id))
        storage.load_account_data(AccountPrototype.get_by_id(
            self.account_2.id))
        self.assertEqual(len(storage.heroes), 2)
        self.assertEqual(len(storage.accounts_to_heroes), 2)
        self.assertEqual(
            storage.bundles_to_accounts, {
                self.hero_1.actions.current_action.bundle_id:
                set([self.account_1.id]),
                self.hero_2.actions.current_action.bundle_id:
                set([self.account_2.id])
            })
class ArenaPvP1x1AcceptBaseTests(UseAbilityTaskMixin, testcase.TestCase):

    def setUp(self):
        super(ArenaPvP1x1AcceptBaseTests, self).setUp()

        self.p1, self.p2, self.p3 = create_test_map()

        result, account_1_id, bundle_id = register_user('test_user', '*****@*****.**', '111111')
        result, account_2_id, bundle_id = register_user('test_user_2', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)
        self.account_2 = AccountPrototype.get_by_id(account_2_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)
        self.storage.load_account_data(self.account_2)

        self.hero_1 = self.storage.accounts_to_heroes[self.account_1.id]
        self.hero_2 = self.storage.accounts_to_heroes[self.account_2.id]

        environment.deinitialize()
        environment.initialize()

        self.pvp_balancer = environment.workers.pvp_balancer
        self.pvp_balancer.process_initialize('pvp_balancer')

        self.battle = self.pvp_balancer.add_to_arena_queue(self.hero_1.id)
Exemplo n.º 28
0
class ChooseRequestsTests(testcase.TestCase, QuestTestsMixin):

    def setUp(self):
        super(ChooseRequestsTests, self).setUp()
        create_test_map()
        register_user('test_user', '*****@*****.**', '111111')

        account = AccountPrototype.get_by_email('*****@*****.**')

        self.storage = LogicStorage()
        self.storage.load_account_data(AccountPrototype.get_by_id(account.id))
        self.hero =self.storage.accounts_to_heroes[account.id]

        self.choice_uid = '[ns-0]choice_1'
        self.option_uid = '#option<[ns-0]choice_1, [ns-0]choice_2>'

    @mock.patch('questgen.quests.quests_base.QuestsBase._available_quests', lambda *argv, **kwargs: [QuestWith2ChoicePoints])
    def test_choose_no_account(self):
        self.turn_to_quest(self.storage, self.hero.id)
        response = self.client.post(url('game:quests:api-choose', option_uid=self.option_uid, api_version='1.0', api_client=project_settings.API_CLIENT))
        self.check_ajax_error(response, 'common.login_required')


    @mock.patch('questgen.quests.quests_base.QuestsBase._available_quests', lambda *argv, **kwargs: [QuestWith2ChoicePoints])
    def test_choose_processing(self):
        self.turn_to_quest(self.storage, self.hero.id)

        self.request_login('*****@*****.**')
        response = self.client.post(url('game:quests:api-choose', option_uid=self.option_uid, api_version='1.0', api_client=project_settings.API_CLIENT))

        task = PostponedTaskPrototype._db_get_object(0)
        self.check_ajax_processing(response, task.status_url)
        self.assertEqual(PostponedTask.objects.all().count(), 1)
Exemplo n.º 29
0
class GetCompanionCreateTests(testcase.TestCase):

    def setUp(self):
        super(GetCompanionCreateTests, self).setUp()
        create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.disabled_companion = companions_logic.create_random_companion_record('disbled')
        self.manual_companion = companions_logic.create_random_companion_record('manual', mode=companions_relations.MODE.MANUAL)

        self.effect = effects.GetCompanionCommon()


    def test__no_disabled_companions(self):

        for i in range(100):
            card = self.effect.create_card(available_for_auction=True)
            self.assertNotEqual(card.data['companion_id'], self.disabled_companion.id)
            self.assertTrue(companions_storage.companions[card.data['companion_id']].state.is_ENABLED)


    def test__no_manual_companions(self):

        for i in range(100):
            card = self.effect.create_card(available_for_auction=True)
            self.assertNotEqual(card.data['companion_id'], self.manual_companion.id)
            self.assertTrue(companions_storage.companions[card.data['companion_id']].mode.is_AUTOMATIC)
Exemplo n.º 30
0
    def test_load_account_data_with_meta_action(self):
        bundle_id = 666

        meta_action_battle = meta_actions.ArenaPvP1x1.create(
            self.storage, self.hero_1, self.hero_2)

        proxy_action_1 = actions_prototypes.ActionMetaProxyPrototype.create(
            hero=self.hero_1,
            _bundle_id=bundle_id,
            meta_action=meta_action_battle)
        proxy_action_2 = actions_prototypes.ActionMetaProxyPrototype.create(
            hero=self.hero_2,
            _bundle_id=bundle_id,
            meta_action=meta_action_battle)

        self.assertEqual(len(self.storage.meta_actions), 1)
        self.assertEqual(len(self.storage.meta_actions_to_actions), 1)
        self.assertEqual(
            self.storage.meta_actions_to_actions[meta_action_battle.uid],
            set([
                LogicStorage.get_action_uid(proxy_action_1),
                LogicStorage.get_action_uid(proxy_action_2)
            ]))

        self.storage.save_changed_data()

        self.assertIs(self.hero_1.actions.current_action.meta_action,
                      self.hero_2.actions.current_action.meta_action)
        self.assertIs(self.hero_1.actions.current_action.saved_meta_action,
                      self.hero_2.actions.current_action.saved_meta_action)

        storage = LogicStorage()
        storage.load_account_data(self.account_1)
        storage.load_account_data(self.account_2)

        self.assertEqual(len(storage.meta_actions), 1)
        self.assertEqual(len(storage.meta_actions_to_actions), 1)
        self.assertEqual(
            storage.meta_actions_to_actions[meta_action_battle.uid],
            set([
                LogicStorage.get_action_uid(proxy_action_1),
                LogicStorage.get_action_uid(proxy_action_2)
            ]))

        self.assertEqual(
            storage.bundles_to_accounts, {
                self.hero_1.actions.current_action.bundle_id:
                set([self.account_1.id, self.account_2.id])
            })

        hero_1 = storage.accounts_to_heroes[self.account_1.id]
        hero_2 = storage.accounts_to_heroes[self.account_2.id]

        self.assertIs(hero_1.actions.current_action.meta_action,
                      hero_2.actions.current_action.meta_action)
        self.assertIsNot(hero_1.actions.current_action.saved_meta_action,
                         hero_2.actions.current_action.saved_meta_action)
        self.assertEqual(
            hero_1.actions.current_action.saved_meta_action.serialize(),
            hero_2.actions.current_action.saved_meta_action.serialize())
Exemplo n.º 31
0
class PrototypesTests(TestCase):
    def setUp(self):
        super(PrototypesTests, self).setUp()
        create_test_map()

        self.account = self.accounts_factory.create_account()
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.ability = ABILITIES[ABILITY_TYPE.HELP]()

        self.task_data = {}

    def test_activate__no_energy(self):
        energy = tt_api_energy.energy_balance(self.account.id)
        tt_api_energy.change_energy_balance(account_id=self.account.id,
                                            type='test',
                                            energy=-energy,
                                            autocommit=True)

        task = self.ability.activate(self.hero, self.task_data)
        self.assertEqual(task, None)

    def test_activate__has_energy(self):
        task = self.ability.activate(self.hero, self.task_data)
        self.assertNotEqual(task.internal_logic.data['transaction_id'], None)

    @mock.patch('the_tale.game.abilities.relations.ABILITY_TYPE.HELP.cost', 0)
    def test_activate_and_complete__zero_cost(self):
        energy = tt_api_energy.energy_balance(self.account.id)
        tt_api_energy.change_energy_balance(account_id=self.account.id,
                                            type='test',
                                            energy=-energy,
                                            autocommit=True)

        task = self.ability.activate(self.hero, self.task_data)
        self.assertEqual(task.internal_logic.data['transaction_id'], None)

        task.process(FakePostpondTaskPrototype(), storage=self.storage)

        self.assertTrue(task.state.is_processed)

        self.assertEqual(tt_api_energy.energy_balance(self.account.id), 0)

    def test_activate_and_complete(self):
        energy = tt_api_energy.energy_balance(self.account.id)

        task = self.ability.activate(self.hero, self.task_data)
        self.assertNotEqual(task.internal_logic.data['transaction_id'], None)

        self.assertEqual(tt_api_energy.energy_balance(self.account.id),
                         energy - self.ability.TYPE.cost)

        task.process(FakePostpondTaskPrototype(), storage=self.storage)

        self.assertTrue(task.state.is_processed)

        self.assertEqual(tt_api_energy.energy_balance(self.account.id),
                         energy - self.ability.TYPE.cost)
Exemplo n.º 32
0
class AddBonusEnergyTestMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(AddBonusEnergyTestMixin, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user(
            'test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

    def test_use(self):
        with self.check_delta(lambda: self.hero.energy_bonus,
                              self.CARD.ENERGY):
            result, step, postsave_actions = self.card.use(
                **self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))
Exemplo n.º 33
0
class GiveCommonCardsMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(GiveCommonCardsMixin, self).setUp()
        create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        tt_api.debug_clear_service()

    def prepair_data(self, available_for_auction):

        card = self.CARD.effect.create_card(
            type=self.CARD, available_for_auction=available_for_auction)

        self.assertEqual(tt_api.load_cards(self.account_1.id), {})

        return card

    def check_give(self, available_for_auction):

        cards = tt_api.load_cards(self.account_1.id)

        self.assertEqual(len(cards), self.CARD.effect.upper_modificator)

        self.assertTrue(
            all(card.type.rarity.is_COMMON for card in cards.values()))
        self.assertTrue(
            all(card.available_for_auction == available_for_auction
                for card in cards.values()))

    def test_use__available_for_auction(self):
        card = self.prepair_data(available_for_auction=True)

        result, step, postsave_actions = self.CARD.effect.use(
            **self.use_attributes(
                storage=self.storage, hero=self.hero, card=card))
        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))

        self.check_give(available_for_auction=True)

    def test_use__has_companion__not_available_for_auction(self):
        card = self.prepair_data(available_for_auction=False)

        result, step, postsave_actions = self.CARD.effect.use(
            **self.use_attributes(
                storage=self.storage, hero=self.hero, card=card))
        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))

        self.check_give(available_for_auction=False)
Exemplo n.º 34
0
class HeroPreferencesEnergyRegenerationTypeTest(TestCase):
    PREFERENCE_TYPE = relations.PREFERENCE_TYPE.ENERGY_REGENERATION_TYPE

    def setUp(self):
        super(HeroPreferencesEnergyRegenerationTypeTest, self).setUp()

        create_test_map()

        self.account = self.accounts_factory.create_account()
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.hero.level = relations.PREFERENCE_TYPE.ENERGY_REGENERATION_TYPE.level_required
        self.hero.preferences.set(
            relations.PREFERENCE_TYPE.ENERGY_REGENERATION_TYPE,
            relations.ENERGY_REGENERATION.SACRIFICE)
        logic.save_hero(self.hero)

    def test_preferences_serialization(self):
        data = self.hero.preferences.serialize()
        self.assertEqual(data, HeroPreferences.deserialize(data).serialize())

    def test_save(self):
        self.hero.preferences.set(
            relations.PREFERENCE_TYPE.ENERGY_REGENERATION_TYPE,
            relations.ENERGY_REGENERATION.PRAY)
        logic.save_hero(self.hero)
        self.hero = logic.load_hero(hero_id=self.hero.id)
        self.assertEqual(self.hero.preferences.energy_regeneration_type,
                         relations.ENERGY_REGENERATION.PRAY)
Exemplo n.º 35
0
class TestsBase(testcase.TestCase):

    def setUp(self):
        super(TestsBase, self).setUp()

        create_test_map()

        account = self.accounts_factory.create_account(is_fast=True)

        self.storage = LogicStorage()
        self.storage.load_account_data(account)
        self.hero = self.storage.accounts_to_heroes[account.id]

    def get_actors(self):
        mob = mobs_storage.get_random_mob(self.hero)
        actor_1 = battle.Actor(self.hero, BattleContext())
        actor_2 = battle.Actor(mob, BattleContext())

        return actor_1, actor_2


    def set_hero_companion(self):
        companion_record = next(companions_storage.companions.enabled_companions())
        companion = companions_logic.create_companion(companion_record)
        self.hero.set_companion(companion)
Exemplo n.º 36
0
class HeroPreferencesFavoriteItemTest(TestCase):
    PREFERENCE_TYPE = relations.PREFERENCE_TYPE.FAVORITE_ITEM

    def setUp(self):
        super(HeroPreferencesFavoriteItemTest, self).setUp()

        create_test_map()

        self.account = self.accounts_factory.create_account()
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.hero.level = relations.PREFERENCE_TYPE.FAVORITE_ITEM.level_required
        logic.save_hero(self.hero)

        self.slot_1 = relations.EQUIPMENT_SLOT.HAND_PRIMARY
        self.slot_2 = relations.EQUIPMENT_SLOT.PLATE

    def test_preferences_serialization(self):
        self.hero.preferences.set(relations.PREFERENCE_TYPE.FAVORITE_ITEM,
                                  self.slot_1)
        data = self.hero.preferences.serialize()
        self.assertEqual(data, HeroPreferences.deserialize(data).serialize())

    def test_save(self):
        self.hero.preferences.set(relations.PREFERENCE_TYPE.FAVORITE_ITEM,
                                  self.slot_1)
        logic.save_hero(self.hero)
        self.hero = logic.load_hero(hero_id=self.hero.id)
        self.assertEqual(self.hero.preferences.favorite_item, self.slot_1)
Exemplo n.º 37
0
class ArenaPvP1x1AcceptBaseTests(UseAbilityTaskMixin, testcase.TestCase):
    def setUp(self):
        super(ArenaPvP1x1AcceptBaseTests, self).setUp()

        self.p1, self.p2, self.p3 = create_test_map()

        result, account_1_id, bundle_id = register_user(
            'test_user', '*****@*****.**', '111111')
        result, account_2_id, bundle_id = register_user(
            'test_user_2', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)
        self.account_2 = AccountPrototype.get_by_id(account_2_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)
        self.storage.load_account_data(self.account_2)

        self.hero_1 = self.storage.accounts_to_heroes[self.account_1.id]
        self.hero_2 = self.storage.accounts_to_heroes[self.account_2.id]

        environment.deinitialize()
        environment.initialize()

        self.pvp_balancer = environment.workers.pvp_balancer
        self.pvp_balancer.process_initialize('pvp_balancer')

        self.battle = self.pvp_balancer.add_to_arena_queue(self.hero_1.id)
Exemplo n.º 38
0
class HeroPreferencesRiskLevelTest(TestCase):
    PREFERENCE_TYPE = relations.PREFERENCE_TYPE.RISK_LEVEL

    def setUp(self):
        super(HeroPreferencesRiskLevelTest, self).setUp()

        create_test_map()

        self.account = self.accounts_factory.create_account()
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.hero.level = relations.PREFERENCE_TYPE.RISK_LEVEL.level_required
        logic.save_hero(self.hero)

        self.risk_1 = relations.RISK_LEVEL.VERY_HIGH
        self.risk_2 = relations.RISK_LEVEL.VERY_LOW

    def test_preferences_serialization(self):
        self.hero.preferences.set(relations.PREFERENCE_TYPE.RISK_LEVEL,
                                  self.risk_1)
        data = self.hero.preferences.serialize()
        self.assertEqual(data, HeroPreferences.deserialize(data).serialize())

    def test_save(self):
        self.hero.preferences.set(relations.PREFERENCE_TYPE.RISK_LEVEL,
                                  self.risk_1)
        logic.save_hero(self.hero)
        self.hero = logic.load_hero(hero_id=self.hero.id)
        self.assertEqual(self.hero.preferences.risk_level, self.risk_1)
    def test_initialize_bots__bot_is_first(self):
        result, account_1_id, bundle_id = register_user('bot',
                                                        '*****@*****.**',
                                                        '111111',
                                                        is_bot=True)
        result, account_2_id, bundle_id = register_user('test_user_3')

        account_1 = AccountPrototype.get_by_id(account_1_id)
        account_2 = AccountPrototype.get_by_id(account_2_id)

        storage = LogicStorage()
        storage.load_account_data(account_1)
        storage.load_account_data(account_2)

        hero_1 = storage.accounts_to_heroes[account_1.id]
        hero_2 = storage.accounts_to_heroes[account_2.id]

        hero_2._model.level = 50
        self.assertEqual(hero_1.level, 1)

        MetaActionArenaPvP1x1Prototype.create(storage,
                                              hero_1,
                                              hero_2,
                                              bundle_id=self.bundle_id + 1)

        self.assertEqual(hero_1.level, 50)
        self.assertTrue(len(hero_1.abilities.all) > 1)
        self.assertEqual(hero_1.health, hero_1.max_health)
Exemplo n.º 40
0
class HeroPreferencesArchetypeTest(TestCase):
    PREFERENCE_TYPE = relations.PREFERENCE_TYPE.ARCHETYPE

    def setUp(self):
        super(HeroPreferencesArchetypeTest, self).setUp()

        create_test_map()

        self.account = self.accounts_factory.create_account()
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.hero.level = relations.PREFERENCE_TYPE.ARCHETYPE.level_required
        logic.save_hero(self.hero)

        self.mage = game_relations.ARCHETYPE.MAGICAL
        self.warior = game_relations.ARCHETYPE.PHYSICAL

    def test_preferences_serialization(self):
        self.hero.preferences.set(relations.PREFERENCE_TYPE.ARCHETYPE,
                                  self.mage)
        data = self.hero.preferences.serialize()
        self.assertEqual(data, HeroPreferences.deserialize(data).serialize())

    def test_save(self):
        self.hero.preferences.set(relations.PREFERENCE_TYPE.ARCHETYPE,
                                  self.mage)
        logic.save_hero(self.hero)
        self.hero = logic.load_hero(hero_id=self.hero.id)
        self.assertEqual(self.hero.preferences.archetype, self.mage)
Exemplo n.º 41
0
    def test_load_account_data_with_meta_action(self):
        bundle_id = 666

        meta_action_battle = meta_actions.ArenaPvP1x1.create(self.storage, self.hero_1, self.hero_2)

        proxy_action_1 = actions_prototypes.ActionMetaProxyPrototype.create(hero=self.hero_1, _bundle_id=bundle_id, meta_action=meta_action_battle)
        proxy_action_2 = actions_prototypes.ActionMetaProxyPrototype.create(hero=self.hero_2, _bundle_id=bundle_id, meta_action=meta_action_battle)

        self.assertEqual(len(self.storage.meta_actions), 1)
        self.assertEqual(len(self.storage.meta_actions_to_actions), 1)
        self.assertEqual(self.storage.meta_actions_to_actions[meta_action_battle.uid], set([LogicStorage.get_action_uid(proxy_action_1),
                                                                                            LogicStorage.get_action_uid(proxy_action_2)]))

        self.storage.save_changed_data()

        self.assertIs(self.hero_1.actions.current_action.meta_action, self.hero_2.actions.current_action.meta_action)
        self.assertIs(self.hero_1.actions.current_action.saved_meta_action, self.hero_2.actions.current_action.saved_meta_action)

        storage = LogicStorage()
        storage.load_account_data(AccountPrototype.get_by_id(self.account_1.id))
        storage.load_account_data(AccountPrototype.get_by_id(self.account_2.id))

        self.assertEqual(len(storage.meta_actions), 1)
        self.assertEqual(len(storage.meta_actions_to_actions), 1)
        self.assertEqual(storage.meta_actions_to_actions[meta_action_battle.uid], set([LogicStorage.get_action_uid(proxy_action_1),
                                                                                       LogicStorage.get_action_uid(proxy_action_2)]))

        self.assertEqual(storage.bundles_to_accounts, {self.hero_1.actions.current_action.bundle_id: set([self.account_1.id, self.account_2.id])})

        hero_1 = storage.accounts_to_heroes[self.account_1.id]
        hero_2 = storage.accounts_to_heroes[self.account_2.id]

        self.assertIs(hero_1.actions.current_action.meta_action, hero_2.actions.current_action.meta_action)
        self.assertIsNot(hero_1.actions.current_action.saved_meta_action, hero_2.actions.current_action.saved_meta_action)
        self.assertEqual(hero_1.actions.current_action.saved_meta_action.serialize(), hero_2.actions.current_action.saved_meta_action.serialize())
class BuyRandomPremiumChestTask__Energy_Tests(
        base_buy_task._BaseBuyHeroMethodPosponedTaskTests):
    def setUp(self):
        super(BuyRandomPremiumChestTask__Energy_Tests, self).setUp()

        self.task = BuyRandomPremiumChest(account_id=self.account.id,
                                          transaction=self.transaction)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.cmd_update_with_account_data__call_count = 0
        self.accounts_manages_worker = False
        self.supervisor_worker = True

        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.hero.energy_bonus = 0

    def _get_expected_arguments(self):
        return {}

    def _check_not_used(self):
        self.assertEqual(self.hero.energy_bonus, 0)
        self.assertEqual(RandomPremiumRequestPrototype._db_count(), 0)

    def _check_used(self):
        self.assertEqual(
            self.hero.energy_bonus,
            relations.RANDOM_PREMIUM_CHEST_REWARD.ENERGY.arguments['energy'])
        self.assertEqual(RandomPremiumRequestPrototype._db_count(), 1)
Exemplo n.º 43
0
class DropItemAbilityTest(UseAbilityTaskMixin, testcase.TestCase):
    PROCESSOR = DropItem

    def setUp(self):
        super(DropItemAbilityTest, self).setUp()

        create_test_map()

        self.account = self.accounts_factory.create_account()
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.ability = self.PROCESSOR()

    @property
    def use_attributes(self):
        return super(DropItemAbilityTest,
                     self).use_attributes(hero=self.hero, storage=self.storage)

    def test_no_items(self):
        self.assertEqual(self.hero.bag.occupation, 0)
        self.assertEqual(
            self.ability.use(**self.use_attributes),
            (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR,
             ()))

    def test_success(self):
        self.hero.bag.put_artifact(
            artifacts_storage.artifacts.generate_artifact_from_list(
                artifacts_storage.artifacts.artifacts,
                self.hero.level,
                rarity=RARITY.NORMAL))

        with self.check_delta(lambda: self.hero.bag.occupation, -1):
            self.assertEqual(self.ability.use(**self.use_attributes),
                             (ComplexChangeTask.RESULT.SUCCESSED,
                              ComplexChangeTask.STEP.SUCCESS, ()))

    @mock.patch('the_tale.game.heroes.objects.Hero.might_crit_chance', 1)
    def test_success__critical(self):
        self.hero.bag.put_artifact(
            artifacts_storage.artifacts.generate_artifact_from_list(
                artifacts_storage.artifacts.artifacts,
                self.hero.level,
                rarity=RARITY.NORMAL))

        old_money_stats = self.hero.statistics.money_earned_from_help

        self.assertEqual(self.hero.bag.occupation, 1)

        self.assertEqual(self.ability.use(**self.use_attributes),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))

        self.assertEqual(self.hero.bag.occupation, 0)

        self.assertTrue(
            old_money_stats < self.hero.statistics.money_earned_from_help)
Exemplo n.º 44
0
class BaseEffectsTests(testcase.TestCase):
    def setUp(self):
        super(BaseEffectsTests, self).setUp()

        create_test_map()

        self.account = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.companion_record = logic.create_companion_record(
            utg_name=names.generator().get_test_name(),
            description='description',
            type=beings_relations.TYPE.random(),
            max_health=10,
            dedication=relations.DEDICATION.random(),
            archetype=game_relations.ARCHETYPE.random(),
            mode=relations.MODE.random(),
            abilities=abilities_container.Container(),
            communication_verbal=beings_relations.COMMUNICATION_VERBAL.random(
            ),
            communication_gestures=beings_relations.COMMUNICATION_GESTURES.
            random(),
            communication_telepathic=beings_relations.COMMUNICATION_TELEPATHIC.
            random(),
            intellect_level=beings_relations.INTELLECT_LEVEL.random(),
            structure=beings_relations.STRUCTURE.random(),
            features=frozenset((beings_relations.FEATURE.random(),
                                beings_relations.FEATURE.random())),
            movement=beings_relations.MOVEMENT.random(),
            body=beings_relations.BODY.random(),
            size=beings_relations.SIZE.random(),
            orientation=beings_relations.ORIENTATION.random(),
            weapons=[
                artifacts_objects.Weapon(
                    weapon=artifacts_relations.STANDARD_WEAPON.random(),
                    material=tt_artifacts_relations.MATERIAL.random(),
                    power_type=artifacts_relations.ARTIFACT_POWER_TYPE.random(
                    ))
            ],
            state=relations.STATE.ENABLED)
        self.hero.set_companion(logic.create_companion(self.companion_record))

    def apply_ability(self, ability):
        container = abilities_container.Container(common=(),
                                                  start=frozenset((ability, )),
                                                  coherence=None,
                                                  honor=None,
                                                  peacefulness=None)
        self.companion_record.abilities = container
        self.hero.reset_accessors_cache()

    def get_ability(self, *argv):
        return random.choice([
            ability for ability in effects.ABILITIES.records if any(
                isinstance(ability.effect, effect) for effect in argv)
        ])
Exemplo n.º 45
0
class ChangeHabitTestMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(ChangeHabitTestMixin, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user(
            'test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

    def habit_value(self):
        if self.card.HABIT.is_HONOR:
            return self.hero.habit_honor.raw_value

        if self.card.HABIT.is_PEACEFULNESS:
            return self.hero.habit_peacefulness.raw_value

    def test_use(self):
        self.hero.change_habits(
            HABIT_TYPE.HONOR,
            -c.HABITS_BORDER if self.CARD.POINTS > 0 else c.HABITS_BORDER)
        self.hero.change_habits(
            HABIT_TYPE.PEACEFULNESS,
            -c.HABITS_BORDER if self.CARD.POINTS > 0 else c.HABITS_BORDER)

        with self.check_delta(self.habit_value, self.CARD.POINTS):
            result, step, postsave_actions = self.card.use(
                **self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))

    def test_no_effect(self):
        self.hero.change_habits(
            HABIT_TYPE.HONOR,
            -c.HABITS_BORDER if self.CARD.POINTS < 0 else c.HABITS_BORDER)
        self.hero.change_habits(
            HABIT_TYPE.PEACEFULNESS,
            -c.HABITS_BORDER if self.CARD.POINTS < 0 else c.HABITS_BORDER)

        with self.check_not_changed(self.habit_value):
            result, step, postsave_actions = self.card.use(
                **self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual(
            (result, step, postsave_actions),
            (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR,
             ()))
Exemplo n.º 46
0
class RepairRandomArtifactTests(RepairArtifacsTestMixin, testcase.TestCase):
    CARD = effects.RepairRandomArtifact

    def setUp(self):
        super(RepairRandomArtifactTests, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user(
            'test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

    def test_all_repaired(self):
        self.check_all_equipment_repaired(True)

        result, step, postsave_actions = self.card.use(
            **self.use_attributes(storage=self.storage, hero=self.hero))
        self.assertEqual(
            (result, step, postsave_actions),
            (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR,
             ()))

        self.check_all_equipment_repaired(True)

    def test_use(self):
        self.check_all_equipment_repaired(True)

        items = [item for item in self.hero.equipment.values() if item]
        random.shuffle(items)

        items[0].integrity = 0
        items[1].integrity = 0

        self.check_all_equipment_repaired(False)

        result, step, postsave_actions = self.card.use(
            **self.use_attributes(storage=self.storage, hero=self.hero))
        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))

        self.check_all_equipment_repaired(False)

        result, step, postsave_actions = self.card.use(
            **self.use_attributes(storage=self.storage, hero=self.hero))
        self.assertEqual((result, step, postsave_actions),
                         (ComplexChangeTask.RESULT.SUCCESSED,
                          ComplexChangeTask.STEP.SUCCESS, ()))

        self.check_all_equipment_repaired(True)
Exemplo n.º 47
0
class LongTeleportTests(CardsTestMixin, testcase.TestCase):
    CARD = effects.LongTeleport

    def setUp(self):
        super(LongTeleportTests, self).setUp()
        self.place_1, self.place_2, self.place_3 = create_test_map()

        result, account_1_id, bundle_id = register_user("test_user", "*****@*****.**", "111111")

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]
        self.hero.position.set_place(self.place_1)

        self.card = self.CARD()

    @mock.patch("the_tale.game.heroes.objects.Hero.is_battle_start_needed", lambda self: False)
    def test_moving(self):
        self.assertFalse(self.hero.actions.current_action.TYPE.is_MOVE_TO)

        result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))
        self.assertEqual(
            (result, step, postsave_actions), (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ())
        )

    @mock.patch("the_tale.game.heroes.objects.Hero.is_battle_start_needed", lambda self: False)
    def test_use(self):
        actions_prototypes.ActionMoveToPrototype.create(hero=self.hero, destination=self.place_3)

        self.storage.process_turn(continue_steps_if_needed=False)

        self.assertTrue(self.hero.actions.current_action.state == actions_prototypes.ActionMoveToPrototype.STATE.MOVING)

        self.assertTrue(self.hero.position.percents < 1)

        result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))
        self.assertEqual(
            (result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ())
        )

        self.assertTrue(self.hero.position.place.id, self.place_3.id)

    @mock.patch("the_tale.game.heroes.objects.Hero.is_battle_start_needed", lambda self: False)
    def test_use__wrong_state(self):
        actions_prototypes.ActionMoveToPrototype.create(hero=self.hero, destination=self.place_3)
        self.assertTrue(self.hero.actions.current_action.state != actions_prototypes.ActionMoveToPrototype.STATE.MOVING)

        with self.check_not_changed(lambda: self.hero.actions.current_action.percents):
            result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))
            self.assertEqual(
                (result, step, postsave_actions), (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ())
            )

        self.assertTrue(self.hero.position.place.id, self.place_1.id)
Exemplo n.º 48
0
class InPlaceActionCompanionDrinkArtifactTests(testcase.TestCase):

    def setUp(self):
        super(InPlaceActionCompanionDrinkArtifactTests, self).setUp()
        self.place_1, self.place_2, self.place_3 = create_test_map()

        self.account = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.action_idl = self.hero.actions.current_action

        self.companion_record = companions_logic.create_random_companion_record('thief', state=companions_relations.STATE.ENABLED)
        self.hero.set_companion(companions_logic.create_companion(self.companion_record))

        self.hero.money = f.expected_gold_in_day(self.hero.level)

        self.hero.position.set_place(self.place_1)
        self.hero.position.update_previous_place()
        self.hero.position.set_place(self.place_2)

        self.artifact = artifacts_storage.generate_artifact_from_list(artifacts_storage.loot, 1, rarity=RARITY.NORMAL)
        self.hero.put_loot(self.artifact)

        self.assertEqual(self.hero.bag.occupation, 1)

        self.hero.position.move_out_place()

    @mock.patch('the_tale.game.heroes.objects.Hero.can_companion_drink_artifact', lambda hero: True)
    def test_dring_artifact(self):
        with self.check_decreased(lambda: self.hero.bag.occupation):
            prototypes.ActionInPlacePrototype.create(hero=self.hero)

        self.assertTrue(self.hero.journal.messages[-1].key.is_ACTION_INPLACE_COMPANION_DRINK_ARTIFACT)


    def check_not_used(self):
        with self.check_not_changed(lambda: self.hero.bag.occupation):
            prototypes.ActionInPlacePrototype.create(hero=self.hero)

    @mock.patch('the_tale.game.heroes.objects.Hero.can_companion_drink_artifact', lambda hero: True)
    def test_previouse_place_is_equal(self):
        self.hero.position.update_previous_place()
        self.check_not_used()

    @mock.patch('the_tale.game.heroes.objects.Hero.can_companion_drink_artifact', lambda hero: True)
    def test_no_items(self):
        self.hero.pop_loot(self.artifact)
        self.check_not_used()

    @mock.patch('the_tale.game.heroes.objects.Hero.can_companion_drink_artifact', lambda hero: False)
    def test_companion_does_not_eat(self):
        self.check_not_used()
Exemplo n.º 49
0
class ChangeHeroTest(TestCase):
    def setUp(self):
        super(ChangeHeroTest, self).setUp()
        place_1, place_2, place_3 = create_test_map()

        result, account_id, bundle_id = register_user("test_user", "*****@*****.**", "111111")
        self.account = AccountPrototype.get_by_id(account_id)
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)

        self.hero = self.storage.accounts_to_heroes[account_id]
        self.hero.utg_name.properties = self.hero.utg_name.properties.clone(self.hero.gender.utg_id)

        self.noun = names.generator.get_test_name(name="test_name", gender=GENDER.NEUTER)

        self.race = RACE.ELF if RACE.ELF != self.hero.race else RACE.HUMAN
        self.gender = GENDER.NEUTER if not self.hero.gender.is_NEUTER else GENDER.FEMININE

    def tearDown(self):
        pass

    def test_create(self):
        task = ChangeHeroTask(self.hero.id, name=self.noun, race=self.race, gender=self.gender)
        self.assertEqual(task.state, CHANGE_HERO_TASK_STATE.UNPROCESSED)
        self.assertEqual(self.hero.preferences.place, None)

        self.assertEqual(task.name, self.noun)
        self.assertEqual(task.race, self.race)
        self.assertEqual(task.gender, self.gender)

    def test_serialization(self):
        task = ChangeHeroTask(self.hero.id, name=self.noun, race=self.race, gender=self.gender)
        self.assertEqual(task.serialize(), ChangeHeroTask.deserialize(task.serialize()).serialize())

    def test_check_change(self):
        task = ChangeHeroTask(self.hero.id, name=self.noun, race=self.race, gender=self.gender)
        self.assertNotEqual(self.hero.utg_name, self.noun)
        self.assertNotEqual(self.hero.gender, self.gender)
        self.assertNotEqual(self.hero.race, self.race)
        self.assertFalse(self.hero.settings_approved)

        with mock.patch("the_tale.game.heroes.objects.Hero.reset_accessors_cache") as reset_accessors_cache:
            self.assertEqual(
                task.process(FakePostpondTaskPrototype(), self.storage), POSTPONED_TASK_LOGIC_RESULT.SUCCESS
            )

        self.assertEqual(reset_accessors_cache.call_count, 1)

        self.assertEqual(task.state, CHANGE_HERO_TASK_STATE.PROCESSED)
        self.assertEqual(self.hero.utg_name.forms, self.noun.forms)
        self.assertEqual(self.hero.utg_name.properties.get(utg_relations.GENDER), self.gender.utg_id)
        self.assertEqual(self.hero.name, self.noun.normal_form())
        self.assertEqual(self.hero.race, self.race)
        self.assertEqual(self.hero.gender, self.gender)
        self.assertTrue(self.hero.settings_approved)
Exemplo n.º 50
0
class PersonPowerBonusMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(PersonPowerBonusMixin, self).setUp()
        self.place_1, self.place_2, self.place_3 = create_test_map()

        result, account_1_id, bundle_id = register_user('test_user', '*****@*****.**', '111111')
        result, account_2_id, bundle_id = register_user('test_user_2')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)
        self.account_2 = AccountPrototype.get_by_id(account_2_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)
        self.storage.load_account_data(self.account_2)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

        environment.deinitialize()
        environment.initialize()

        self.highlevel = environment.workers.highlevel
        self.highlevel.process_initialize(0, 'highlevel')


    def test_use(self):

        person = self.place_1.persons[0]

        result, step, postsave_actions = self.card.use(**self.use_attributes(hero=self.hero, storage=self.storage, person_id=person.id))

        self.assertEqual((result, step), (ComplexChangeTask.RESULT.CONTINUE, ComplexChangeTask.STEP.HIGHLEVEL))
        self.assertEqual(len(postsave_actions), 1)

        with mock.patch('the_tale.game.workers.highlevel.Worker.cmd_logic_task') as highlevel_logic_task_counter:
            postsave_actions[0]()

        self.assertEqual(highlevel_logic_task_counter.call_count, 1)

        with self.check_delta(lambda: person.power_positive, self.CARD.BONUS):
            result, step, postsave_actions = self.card.use(**self.use_attributes(hero=self.hero,
                                                                                 step=step,
                                                                                 highlevel=self.highlevel,
                                                                                 person_id=person.id))

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))


    def test_no_person(self):
        self.assertEqual(self.card.use(**self.use_attributes(hero=self.hero, person_id=666, storage=self.storage)),
                        (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ()))
Exemplo n.º 51
0
class HeroLogicAccessorsTestBase(testcase.TestCase):

    def setUp(self):
        super(HeroLogicAccessorsTestBase, self).setUp()
        self.place_1, self.place_2, self.place_3 = create_test_map()

        result, account_id, bundle_id = register_user('test_user', '*****@*****.**', '111111')

        self.storage = LogicStorage()
        self.storage.load_account_data(AccountPrototype.get_by_id(account_id))
        self.hero = self.storage.accounts_to_heroes[account_id]
Exemplo n.º 52
0
class HeroLogicAccessorsTestBase(testcase.TestCase):

    def setUp(self):
        super(HeroLogicAccessorsTestBase, self).setUp()

        self.place_1, self.place_2, self.place_3 = create_test_map()

        account = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(account)
        self.hero = self.storage.accounts_to_heroes[account.id]
Exemplo n.º 53
0
class ChangeHeroSpendingsMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(ChangeHeroSpendingsMixin, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user('test_user', '*****@*****.**', '111111')

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

        old_companion_record = random.choice(companions_storage.companions.all())
        self.hero.set_companion(companions_logic.create_companion(old_companion_record))


    def test_use(self):

        # sure that quests will be loaded and not cal mark_updated
        self.hero.quests.mark_updated()

        for item in ITEMS_OF_EXPENDITURE.records:
            if item == self.CARD.ITEM:
                continue

            self.hero.next_spending = item

            with mock.patch('the_tale.game.quests.container.QuestsContainer.mark_updated') as mark_updated:
                result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))

            self.assertEqual(mark_updated.call_count, 1)

            self.assertEqual(self.hero.next_spending, self.CARD.ITEM)

            self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))


    def test_equal(self):
        self.hero.next_spending = self.CARD.ITEM

        with mock.patch('the_tale.game.quests.container.QuestsContainer.mark_updated') as mark_updated:
            result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))

        self.assertEqual(mark_updated.call_count, 0)

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ()))
Exemplo n.º 54
0
class RepairRandomArtifactTests(RepairArtifacsTestMixin, testcase.TestCase):
    CARD = effects.RepairRandomArtifact

    def setUp(self):
        super(RepairRandomArtifactTests, self).setUp()
        create_test_map()

        result, account_1_id, bundle_id = register_user("test_user", "*****@*****.**", "111111")

        self.account_1 = AccountPrototype.get_by_id(account_1_id)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

    def test_all_repaired(self):
        self.check_all_equipment_repaired(True)

        result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))
        self.assertEqual(
            (result, step, postsave_actions), (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ())
        )

        self.check_all_equipment_repaired(True)

    def test_use(self):
        self.check_all_equipment_repaired(True)

        items = [item for item in self.hero.equipment.values() if item]
        random.shuffle(items)

        items[0].integrity = 0
        items[1].integrity = 0

        self.check_all_equipment_repaired(False)

        result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))
        self.assertEqual(
            (result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ())
        )

        self.check_all_equipment_repaired(False)

        result, step, postsave_actions = self.card.use(**self.use_attributes(storage=self.storage, hero=self.hero))
        self.assertEqual(
            (result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ())
        )

        self.check_all_equipment_repaired(True)
Exemplo n.º 55
0
class KeepersGoodsMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(KeepersGoodsMixin, self).setUp()

        self.place_1, self.place_2, self.place_3 = create_test_map()

        self.account_1 = self.accounts_factory.create_account()
        self.account_2 = self.accounts_factory.create_account(is_fast=True)

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)
        self.storage.load_account_data(self.account_2)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

        environment.deinitialize()
        environment.initialize()

        self.highlevel = environment.workers.highlevel
        self.highlevel.process_initialize(0, 'highlevel')


    def test_use(self):

        result, step, postsave_actions = self.card.use(**self.use_attributes(hero=self.hero, storage=self.storage, place_id=self.place_1.id))

        self.assertEqual((result, step), (ComplexChangeTask.RESULT.CONTINUE, ComplexChangeTask.STEP.HIGHLEVEL))
        self.assertEqual(len(postsave_actions), 1)

        with mock.patch('the_tale.game.workers.highlevel.Worker.cmd_logic_task') as highlevel_logic_task_counter:
            postsave_actions[0]()

        self.assertEqual(highlevel_logic_task_counter.call_count, 1)

        with self.check_delta(lambda: self.place_1.attrs.keepers_goods, self.CARD.GOODS):
            result, step, postsave_actions = self.card.use(**self.use_attributes(hero=self.hero,
                                                                                 step=step,
                                                                                 highlevel=self.highlevel,
                                                                                 place_id=self.place_1.id))

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))


    def test_use_for_wrong_place_id(self):
        with self.check_not_changed(lambda: self.place_1.attrs.keepers_goods):
            self.assertEqual(self.card.use(**self.use_attributes(hero=self.hero, place_id=666, storage=self.storage)),
                             (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ()))
Exemplo n.º 56
0
class AddPersonPowerMixin(CardsTestMixin):
    CARD = None

    def setUp(self):
        super(AddPersonPowerMixin, self).setUp()
        self.place_1, self.place_2, self.place_3 = create_test_map()

        self.account_1 = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account_1)

        self.hero = self.storage.accounts_to_heroes[self.account_1.id]

        self.card = self.CARD()

        environment.deinitialize()
        environment.initialize()

        self.highlevel = environment.workers.highlevel
        self.highlevel.process_initialize(0, 'highlevel')


    def test_use(self):

        person = self.place_1.persons[0]

        result, step, postsave_actions = self.card.use(**self.use_attributes(hero=self.hero, storage=self.storage, person_id=person.id))

        self.assertEqual((result, step), (ComplexChangeTask.RESULT.CONTINUE, ComplexChangeTask.STEP.HIGHLEVEL))
        self.assertEqual(len(postsave_actions), 1)

        with mock.patch('the_tale.game.workers.highlevel.Worker.cmd_logic_task') as highlevel_logic_task_counter:
            postsave_actions[0]()

        self.assertEqual(highlevel_logic_task_counter.call_count, 1)

        with mock.patch('the_tale.game.persons.logic.PersonPoliticPower.change_power') as change_power:
            result, step, postsave_actions = self.card.use(**self.use_attributes(hero=self.hero,
                                                                                 step=step,
                                                                                 highlevel=self.highlevel,
                                                                                 person_id=person.id))
        self.assertEqual(change_power.call_args_list,
                         [mock.call(hero_id=self.hero.id, person=person, power=self.CARD.BONUS, has_in_preferences=True)])

        self.assertEqual((result, step, postsave_actions), (ComplexChangeTask.RESULT.SUCCESSED, ComplexChangeTask.STEP.SUCCESS, ()))


    def test_no_person(self):
        self.assertEqual(self.card.use(**self.use_attributes(hero=self.hero, person_id=666, storage=self.storage)),
                        (ComplexChangeTask.RESULT.FAILED, ComplexChangeTask.STEP.ERROR, ()))
Exemplo n.º 57
0
class PrototypesTests(testcase.TestCase):

    def setUp(self):
        super(PrototypesTests, self).setUp()
        create_test_map()

        result, account_id, bundle_id = register_user('test_user_1', '*****@*****.**', '111111')

        self.account = AccountPrototype.get_by_id(account_id)
        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.card_effect = effects.EFFECTS[relations.CARD_TYPE.KEEPERS_GOODS_COMMON]
        self.card_1 = objects.Card(relations.CARD_TYPE.KEEPERS_GOODS_COMMON)

        self.hero.cards.add_card(self.card_1)

        self.task_data = {'card_uid': self.card_1.uid}


    def test_check_hero_conditions__has_card(self):
        self.assertTrue(self.card_effect.check_hero_conditions(self.hero, self.task_data))


    def test_check_hero_conditions__has_no_card(self):
        self.hero.cards.remove_card(self.card_1.uid)
        self.assertFalse(self.card_effect.check_hero_conditions(self.hero, self.task_data))


    def test_hero_actions(self):
        card_2 = objects.Card(relations.CARD_TYPE.KEEPERS_GOODS_COMMON)
        self.hero.cards.add_card(card_2)

        self.assertEqual(self.card_1.type, card_2.type)
        self.assertEqual(self.hero.cards.cards_count(), 2)

        with self.check_delta(lambda: self.hero.statistics.cards_used, 1):
            self.card_effect.hero_actions(self.hero, self.task_data)

        self.assertEqual(self.hero.cards.cards_count(), 1)
        self.assertTrue(self.hero.cards.has_card(card_2.uid))
        self.assertFalse(self.hero.cards.has_card(self.card_1.uid))


    def test_activate(self):
        with mock.patch('the_tale.game.workers.supervisor.Worker.cmd_logic_task') as cmd_logic_task:
            task = self.card_effect.activate(self.hero, self.card_1.uid, {'x': 'y'})

        self.assertEqual(cmd_logic_task.call_args_list, [mock.call(self.hero.account_id, task.id)])
Exemplo n.º 58
0
class HeroRequestsTestBase(TestCase):

    def setUp(self):
        super(HeroRequestsTestBase, self).setUp()
        create_test_map()

        self.account = self.accounts_factory.create_account()

        self.storage = LogicStorage()
        self.storage.load_account_data(self.account)
        self.hero = self.storage.accounts_to_heroes[self.account.id]

        self.client = client.Client()
        self.request_login(self.account.email)
Exemplo n.º 59
0
class _HeroEquipmentTestsBase(TestCase):

    def setUp(self):
        super(_HeroEquipmentTestsBase, self).setUp()
        create_test_map()

        result, account_id, bundle_id = register_user('test_user', '*****@*****.**', '111111')

        self.storage = LogicStorage()
        self.storage.load_account_data(AccountPrototype.get_by_id(account_id))

        self.hero = self.storage.accounts_to_heroes[account_id]
        self.hero._model.level = relations.PREFERENCE_TYPE.EQUIPMENT_SLOT.level_required
        self.hero.save()
Exemplo n.º 60
0
class DoNothingActionTest(testcase.TestCase):

    @mock.patch('the_tale.game.actions.prototypes.ActionBase.get_description', lambda self: 'abrakadabra')
    def setUp(self):
        super(DoNothingActionTest, self).setUp()

        create_test_map()

        account = self.accounts_factory.create_account(is_fast=True)

        self.storage = LogicStorage()
        self.storage.load_account_data(account)
        self.hero = self.storage.accounts_to_heroes[account.id]
        self.action_idl = self.hero.actions.current_action

        self.action_donothing = ActionDoNothingPrototype.create(hero=self.hero, duration=7, messages_prefix='QUEST_HOMETOWN_JOURNAL_CHATTING', messages_probability=0.3)


    def tearDown(self):
        pass

    def test_create(self):
        self.assertEqual(self.action_idl.leader, False)
        self.assertEqual(self.action_donothing.leader, True)
        self.assertEqual(self.action_donothing.textgen_id, 'QUEST_HOMETOWN_JOURNAL_CHATTING')
        self.assertEqual(self.action_donothing.percents_barier, 7)
        self.assertEqual(self.action_donothing.extra_probability, 0.3)
        self.assertEqual(self.action_donothing.bundle_id, self.action_idl.bundle_id)
        self.storage._test_save()

    def test_not_ready(self):
        self.storage.process_turn()
        self.assertEqual(len(self.hero.actions.actions_list), 2)
        self.assertEqual(self.hero.actions.current_action, self.action_donothing)
        self.storage._test_save()

    def test_full(self):

        current_time = TimePrototype.get_current_time()

        for i in range(7):
            self.assertEqual(len(self.hero.actions.actions_list), 2)
            self.assertTrue(self.action_donothing.leader)
            self.storage.process_turn(continue_steps_if_needed=False)
            current_time.increment_turn()

        self.assertEqual(len(self.hero.actions.actions_list), 1)
        self.assertTrue(self.action_idl.leader)

        self.storage._test_save()