Exemplo n.º 1
0
    def test_legendary_achievements(self):
        achievement_4 = AchievementPrototype.create(
            group=ACHIEVEMENT_GROUP.LEGENDS,
            type=ACHIEVEMENT_TYPE.LEGENDS,
            barrier=0,
            points=0,
            caption=u'achievement_4',
            description=u'description_4',
            approved=True)

        self.account_achievements_1.achievements.add_achievement(achievement_4)
        self.account_achievements_1.save()

        GiveAchievementTaskPrototype.create(account_id=None,
                                            achievement_id=achievement_4.id)

        account_achievements_2 = AccountAchievementsPrototype.get_by_account_id(
            self.account_2.id)

        self.assertTrue(
            self.account_achievements_1.has_achievement(achievement_4))
        self.assertFalse(account_achievements_2.has_achievement(achievement_4))

        with self.check_not_changed(MessagePrototype._db_count):
            self.worker.add_achievements()

        self.account_achievements_1.reload()
        account_achievements_2.reload()

        self.assertTrue(
            self.account_achievements_1.has_achievement(achievement_4))
        self.assertFalse(account_achievements_2.has_achievement(achievement_4))

        self.assertEqual(GiveAchievementTaskPrototype._db_count(), 0)
Exemplo n.º 2
0
    def test_add_achievements__all_accounts__not_remove_already_received_achievements(
            self):
        self.account_achievements_1.achievements.add_achievement(
            self.achievement_3)
        self.account_achievements_1.save()

        GiveAchievementTaskPrototype.create(
            account_id=None, achievement_id=self.achievement_3.id)

        account_achievements_2 = AccountAchievementsPrototype.get_by_account_id(
            self.account_2.id)

        self.assertTrue(
            self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertFalse(
            account_achievements_2.has_achievement(self.achievement_3))

        with self.check_not_changed(MessagePrototype._db_count):
            self.worker.add_achievements()

        self.account_achievements_1.reload()
        account_achievements_2.reload()

        self.assertTrue(
            self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertFalse(
            account_achievements_2.has_achievement(self.achievement_3))

        self.assertEqual(GiveAchievementTaskPrototype._db_count(), 0)
Exemplo n.º 3
0
    def test_add_achievements__all_accounts(self):

        GiveAchievementTaskPrototype.create(
            account_id=None, achievement_id=self.achievement_3.id)

        account_achievements_2 = AccountAchievementsPrototype.get_by_account_id(
            self.account_2.id)

        self.assertFalse(
            self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertFalse(
            account_achievements_2.has_achievement(self.achievement_3))
        hero = heroes_logic.load_hero(account_id=self.account_1.id)
        hero.statistics.change_pve_deaths(self.achievement_3.barrier)
        heroes_logic.save_hero(hero)

        with self.check_not_changed(MessagePrototype._db_count):
            self.worker.add_achievements()

        self.account_achievements_1.reload()
        account_achievements_2.reload()

        self.assertTrue(
            self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertFalse(
            account_achievements_2.has_achievement(self.achievement_3))

        self.assertEqual(GiveAchievementTaskPrototype._db_count(), 0)
Exemplo n.º 4
0
 def test_add_achievements(self):
     GiveAchievementTaskPrototype.create(account_id=self.account_1.id, achievement_id=self.achievement_3.id)
     self.assertFalse(self.account_achievements_1.has_achievement(self.achievement_3))
     with self.check_delta(MessagePrototype._db_count, 1):
         self.worker.add_achievements()
     self.account_achievements_1.reload()
     self.assertTrue(self.account_achievements_1.has_achievement(self.achievement_3))
     self.assertEqual(GiveAchievementTaskPrototype._db_count(), 0)
Exemplo n.º 5
0
    def add_achievements(self):
        for task in GiveAchievementTaskPrototype.from_query(GiveAchievementTaskPrototype._db_all()):

            achievement = achievements_storage[task.achievement_id]

            self.logger.info('process task %d for achievement %d' % (task.id, achievement.id))

            if task.account_id is None:
                self.spread_achievement(achievement)
            else:
                self.add_achievement(achievement, task.account_id, notify=True)

            task.remove()
Exemplo n.º 6
0
    def add_achievements(self):
        for task in GiveAchievementTaskPrototype.from_query(GiveAchievementTaskPrototype._db_all()):

            achievement = achievements_storage[task.achievement_id]

            self.logger.info('process task %d for achievement %d' % (task.id, achievement.id))

            if task.account_id is None:
                self.spread_achievement(achievement)
            else:
                self.add_achievement(achievement, task.account_id, notify=True)

            task.remove()
Exemplo n.º 7
0
    def test_add_achievements(self):
        GiveAchievementTaskPrototype.create(
            account_id=self.account_1.id, achievement_id=self.achievement_3.id)
        self.assertFalse(
            self.account_achievements_1.has_achievement(self.achievement_3))

        with self.check_new_message(self.account_1.id,
                                    [accounts_logic.get_system_user_id()]):
            self.worker.add_achievements()

        self.account_achievements_1.reload()
        self.assertTrue(
            self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertEqual(GiveAchievementTaskPrototype._db_count(), 0)
Exemplo n.º 8
0
    def test_success__not_changed(self):
        self.request_login(self.account_2.email)

        with self.check_not_changed(
                GiveAchievementTaskPrototype._db_all().count):
            response = self.post_ajax_json(
                self.test_url, self.get_post_data__without_update())

        self.achievement_2.reload()

        self.check_ajax_ok(response,
                           data={
                               'next_url':
                               url('accounts:achievements:group',
                                   self.achievement_2.group.slug)
                           })

        self.assertEqual(self.achievement_2.caption, 'caption_edited')
        self.assertEqual(self.achievement_2.description, 'description_edited')
        self.assertEqual(self.achievement_2.type, ACHIEVEMENT_TYPE.MONEY)
        self.assertEqual(self.achievement_2.group, ACHIEVEMENT_GROUP.DEATHS)
        self.assertEqual(self.achievement_2.barrier, 2)
        self.assertFalse(self.achievement_2.approved)
        self.assertEqual(self.achievement_2.points, 10)

        self.assertEqual(self.achievement_2.item_1, None)
        self.assertEqual(self.achievement_2.item_2, None)
        self.assertEqual(self.achievement_2.item_3, None)
Exemplo n.º 9
0
    def test_form_errors(self):
        self.request_login(self.account_2.email)
        with self.check_not_changed(GiveAchievementTaskPrototype._db_all().count):
            self.check_ajax_error(self.post_ajax_json(self.test_url, {}),
                                  'accounts.achievements.update.form_errors')

        self.achievement_1.reload()
        self.assertEqual(self.achievement_1.caption, 'achievement_1')
        self.assertEqual(self.achievement_1.description, 'description_1')
Exemplo n.º 10
0
    def test_edit_rights_required(self):
        self.request_login(self.account_1.email)
        with self.check_not_changed(GiveAchievementTaskPrototype._db_all().count):
            self.check_ajax_error(self.post_ajax_json(self.test_url, self.get_post_data()),
                                  'accounts.achievements.no_edit_rights')

        self.achievement_1.reload()
        self.assertEqual(self.achievement_1.caption, 'achievement_1')
        self.assertEqual(self.achievement_1.description, 'description_1')
Exemplo n.º 11
0
    def test_form_errors(self):
        self.request_login(self.account_2.email)
        with self.check_not_changed(
                GiveAchievementTaskPrototype._db_all().count):
            self.check_ajax_error(self.post_ajax_json(self.test_url, {}),
                                  'accounts.achievements.update.form_errors')

        self.achievement_1.reload()
        self.assertEqual(self.achievement_1.caption, 'achievement_1')
        self.assertEqual(self.achievement_1.description, 'description_1')
Exemplo n.º 12
0
    def test_edit_rights_required(self):
        self.request_login(self.account_1.email)
        with self.check_not_changed(
                GiveAchievementTaskPrototype._db_all().count):
            self.check_ajax_error(
                self.post_ajax_json(self.test_url, self.get_post_data()),
                'accounts.achievements.no_edit_rights')

        self.achievement_1.reload()
        self.assertEqual(self.achievement_1.caption, 'achievement_1')
        self.assertEqual(self.achievement_1.description, 'description_1')
Exemplo n.º 13
0
    def update(self):
        form = EditAchievementForm(self.request.POST)

        if not form.is_valid():
            return self.json_error('accounts.achievements.update.form_errors',
                                   form.errors)

        with transaction.atomic():

            is_changed = (self.achievement.type != form.c.type
                          or self.achievement.approved != form.c.approved
                          or self.achievement.barrier != form.c.barrier
                          or self.achievement.points != form.c.points
                          or self.achievement.item_1 != form.c.item_1
                          or self.achievement.item_2 != form.c.item_2
                          or self.achievement.item_3 != form.c.item_3)

            self.achievement.group = form.c.group
            self.achievement.type = form.c.type
            self.achievement.caption = form.c.caption
            self.achievement.description = form.c.description
            self.achievement.approved = form.c.approved
            self.achievement.barrier = form.c.barrier
            self.achievement.points = form.c.points
            self.achievement.order = form.c.order

            self.achievement.item_1_id = form.c.item_1.id if form.c.item_1 is not None else None
            self.achievement.item_2_id = form.c.item_2.id if form.c.item_2 is not None else None
            self.achievement.item_3_id = form.c.item_3.id if form.c.item_3 is not None else None

            self.achievement.save()

            if is_changed:
                GiveAchievementTaskPrototype.create(
                    account_id=None, achievement_id=self.achievement.id)

        return self.json_ok(
            data={
                'next_url':
                url('accounts:achievements:group', self.achievement.group.slug)
            })
Exemplo n.º 14
0
    def test_add_achievements__all_accounts__not_remove_already_received_achievements(self):
        self.account_achievements_1.achievements.add_achievement(self.achievement_3)
        self.account_achievements_1.save()

        GiveAchievementTaskPrototype.create(account_id=None, achievement_id=self.achievement_3.id)

        account_achievements_2 = AccountAchievementsPrototype.get_by_account_id(self.account_2.id)

        self.assertTrue(self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertFalse(account_achievements_2.has_achievement(self.achievement_3))

        with self.check_not_changed(MessagePrototype._db_count):
            self.worker.add_achievements()

        self.account_achievements_1.reload()
        account_achievements_2.reload()

        self.assertTrue(self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertFalse(account_achievements_2.has_achievement(self.achievement_3))

        self.assertEqual(GiveAchievementTaskPrototype._db_count(), 0)
Exemplo n.º 15
0
    def test_add_achievements__all_accounts(self):

        GiveAchievementTaskPrototype.create(account_id=None, achievement_id=self.achievement_3.id)

        account_achievements_2 = AccountAchievementsPrototype.get_by_account_id(self.account_2.id)

        self.assertFalse(self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertFalse(account_achievements_2.has_achievement(self.achievement_3))
        hero = heroes_logic.load_hero(account_id=self.account_1.id)
        hero.statistics.change_pve_deaths(self.achievement_3.barrier)
        heroes_logic.save_hero(hero)

        with self.check_not_changed(MessagePrototype._db_count):
            self.worker.add_achievements()

        self.account_achievements_1.reload()
        account_achievements_2.reload()

        self.assertTrue(self.account_achievements_1.has_achievement(self.achievement_3))
        self.assertFalse(account_achievements_2.has_achievement(self.achievement_3))

        self.assertEqual(GiveAchievementTaskPrototype._db_count(), 0)
Exemplo n.º 16
0
    def test_change_pvp_battles_1x1_victories__multiple_victories_achievements(self):
        from the_tale.accounts.achievements.relations import ACHIEVEMENT_GROUP, ACHIEVEMENT_TYPE
        from the_tale.accounts.achievements.prototypes import AchievementPrototype, GiveAchievementTaskPrototype

        achievement_1 = AchievementPrototype.create(group=ACHIEVEMENT_GROUP.MONEY, type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1, barrier=10, points=10,
                                    caption='achievement_1', description='description_1', approved=True)
        achievement_2 = AchievementPrototype.create(group=ACHIEVEMENT_GROUP.MONEY, type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1, barrier=20, points=10,
                                    caption='achievement_2', description='description_2', approved=True)
        achievement_3 = AchievementPrototype.create(group=ACHIEVEMENT_GROUP.MONEY, type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1, barrier=30, points=10,
                                    caption='achievement_3', description='description_3', approved=True)
        achievement_4 = AchievementPrototype.create(group=ACHIEVEMENT_GROUP.MONEY, type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1, barrier=40, points=10,
                                    caption='achievement_4', description='description_4', approved=True)


        self.assertEqual(self.hero.statistics.pvp_battles_1x1_number, 16)

        with self.check_not_changed(GiveAchievementTaskPrototype._db_count):
            self.hero.statistics.change_pvp_battles_1x1_draws(400)
            self.hero.statistics.change_pvp_battles_1x1_defeats(300)

        with self.check_delta(GiveAchievementTaskPrototype._db_count, 3):
            self.hero.statistics.change_pvp_battles_1x1_victories(300)

        self.assertEqual(set(GiveAchievementTaskPrototype._db_all().values_list('achievement_id', flat=True)),
                         set([achievement_1.id, achievement_2.id, achievement_3.id]))

        with self.check_delta(GiveAchievementTaskPrototype._db_count, 1):
            self.hero.statistics.change_pvp_battles_1x1_victories(200)

        self.assertEqual(set(GiveAchievementTaskPrototype._db_all().values_list('achievement_id', flat=True)),
                         set([achievement_1.id, achievement_2.id, achievement_3.id, achievement_4.id]))


        self.assertEqual(self.hero.statistics.pvp_battles_1x1_number, 1216)
        self.assertEqual(self.hero.statistics.pvp_battles_1x1_victories, 516)
        self.assertEqual(self.hero.statistics.pvp_battles_1x1_defeats, 300)
        self.assertEqual(self.hero.statistics.pvp_battles_1x1_draws, 400)
Exemplo n.º 17
0
    def update(self):
        form = EditAchievementForm(self.request.POST)

        if not form.is_valid():
            return self.json_error('accounts.achievements.update.form_errors', form.errors)


        with transaction.atomic():

            is_changed = (self.achievement.type != form.c.type or
                          self.achievement.approved != form.c.approved or
                          self.achievement.barrier != form.c.barrier or
                          self.achievement.points != form.c.points or
                          self.achievement.item_1 != form.c.item_1 or
                          self.achievement.item_2 != form.c.item_2 or
                          self.achievement.item_3 != form.c.item_3 )

            self.achievement.group = form.c.group
            self.achievement.type = form.c.type
            self.achievement.caption = form.c.caption
            self.achievement.description = form.c.description
            self.achievement.approved = form.c.approved
            self.achievement.barrier = form.c.barrier
            self.achievement.points = form.c.points
            self.achievement.order = form.c.order

            self.achievement.item_1_id = form.c.item_1.id if form.c.item_1 is not None else None
            self.achievement.item_2_id = form.c.item_2.id if form.c.item_2 is not None else None
            self.achievement.item_3_id = form.c.item_3.id if form.c.item_3 is not None else None

            self.achievement.save()

            if is_changed:
                GiveAchievementTaskPrototype.create(account_id=None, achievement_id=self.achievement.id)

        return self.json_ok(data={'next_url': url('accounts:achievements:group', self.achievement.group.slug)})
Exemplo n.º 18
0
    def test_legendary_achievements(self):
        achievement_4 = AchievementPrototype.create(group=ACHIEVEMENT_GROUP.LEGENDS, type=ACHIEVEMENT_TYPE.LEGENDS, barrier=0, points=0,
                                                    caption=u'achievement_4', description=u'description_4', approved=True)

        self.account_achievements_1.achievements.add_achievement(achievement_4)
        self.account_achievements_1.save()

        GiveAchievementTaskPrototype.create(account_id=None, achievement_id=achievement_4.id)

        account_achievements_2 = AccountAchievementsPrototype.get_by_account_id(self.account_2.id)

        self.assertTrue(self.account_achievements_1.has_achievement(achievement_4))
        self.assertFalse(account_achievements_2.has_achievement(achievement_4))

        with self.check_not_changed(MessagePrototype._db_count):
            self.worker.add_achievements()

        self.account_achievements_1.reload()
        account_achievements_2.reload()

        self.assertTrue(self.account_achievements_1.has_achievement(achievement_4))
        self.assertFalse(account_achievements_2.has_achievement(achievement_4))

        self.assertEqual(GiveAchievementTaskPrototype._db_count(), 0)
Exemplo n.º 19
0
    def test_verify_achievements(self):

        with self.check_not_changed(GiveAchievementTaskPrototype._db_count):
            achievements_storage.verify_achievements(self.account_1.id,
                                                     type=ACHIEVEMENT_TYPE.MONEY,
                                                     old_value=self.achievement_2.barrier-1,
                                                     new_value=self.achievement_2.barrier)


        with self.check_delta(GiveAchievementTaskPrototype._db_count, 1):
            achievements_storage.verify_achievements(self.account_1.id,
                                                     type=ACHIEVEMENT_TYPE.MONEY,
                                                     old_value=self.achievement_5.barrier-1,
                                                     new_value=self.achievement_5.barrier)

        give_achievement_task = GiveAchievementTaskPrototype._db_get_object(0)

        self.assertEqual(give_achievement_task.achievement_id, self.achievement_5.id)
Exemplo n.º 20
0
    def test_success(self):
        self.request_login(self.account_2.email)
        with self.check_delta(GiveAchievementTaskPrototype._db_all().count, 1):
            response = self.post_ajax_json(self.test_url, self.get_post_data())

        self.achievement_2.reload()

        self.check_ajax_ok(response, data={'next_url': url('accounts:achievements:group', self.achievement_2.group.slug)})

        self.assertEqual(self.achievement_2.caption, 'caption_edited')
        self.assertEqual(self.achievement_2.description, 'description_edited')
        self.assertEqual(self.achievement_2.type, ACHIEVEMENT_TYPE.DEATHS)
        self.assertEqual(self.achievement_2.group, ACHIEVEMENT_GROUP.DEATHS)
        self.assertEqual(self.achievement_2.barrier, 777)
        self.assertTrue(self.achievement_2.approved)
        self.assertEqual(self.achievement_2.points, 6)
        self.assertEqual(self.achievement_2.item_1.id, self.item_1_1.id)
        self.assertEqual(self.achievement_2.item_2.id, self.item_1_2.id)
        self.assertEqual(self.achievement_2.item_3, None)
Exemplo n.º 21
0
    def test_success__not_changed(self):
        self.request_login(self.account_2.email)

        with self.check_not_changed(GiveAchievementTaskPrototype._db_all().count):
            response = self.post_ajax_json(self.test_url, self.get_post_data__without_update())

        self.achievement_2.reload()

        self.check_ajax_ok(response, data={'next_url': url('accounts:achievements:group', self.achievement_2.group.slug)})

        self.assertEqual(self.achievement_2.caption, 'caption_edited')
        self.assertEqual(self.achievement_2.description, 'description_edited')
        self.assertEqual(self.achievement_2.type, ACHIEVEMENT_TYPE.MONEY)
        self.assertEqual(self.achievement_2.group, ACHIEVEMENT_GROUP.DEATHS)
        self.assertEqual(self.achievement_2.barrier, 2)
        self.assertFalse(self.achievement_2.approved)
        self.assertEqual(self.achievement_2.points, 10)

        self.assertEqual(self.achievement_2.item_1, None)
        self.assertEqual(self.achievement_2.item_2, None)
        self.assertEqual(self.achievement_2.item_3, None)
Exemplo n.º 22
0
    def test_success(self):
        self.request_login(self.account_2.email)
        with self.check_delta(GiveAchievementTaskPrototype._db_all().count, 1):
            response = self.post_ajax_json(self.test_url, self.get_post_data())

        self.achievement_2.reload()

        self.check_ajax_ok(response,
                           data={
                               'next_url':
                               url('accounts:achievements:group',
                                   self.achievement_2.group.slug)
                           })

        self.assertEqual(self.achievement_2.caption, 'caption_edited')
        self.assertEqual(self.achievement_2.description, 'description_edited')
        self.assertEqual(self.achievement_2.type, ACHIEVEMENT_TYPE.DEATHS)
        self.assertEqual(self.achievement_2.group, ACHIEVEMENT_GROUP.DEATHS)
        self.assertEqual(self.achievement_2.barrier, 777)
        self.assertTrue(self.achievement_2.approved)
        self.assertEqual(self.achievement_2.points, 6)
        self.assertEqual(self.achievement_2.item_1.id, self.item_1_1.id)
        self.assertEqual(self.achievement_2.item_2.id, self.item_1_2.id)
        self.assertEqual(self.achievement_2.item_3, None)
Exemplo n.º 23
0
    def test_change_pvp_battles_1x1_victories__multiple_victories_achievements(
            self):
        from the_tale.accounts.achievements.relations import ACHIEVEMENT_GROUP, ACHIEVEMENT_TYPE
        from the_tale.accounts.achievements.prototypes import AchievementPrototype, GiveAchievementTaskPrototype

        achievement_1 = AchievementPrototype.create(
            group=ACHIEVEMENT_GROUP.MONEY,
            type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1,
            barrier=10,
            points=10,
            caption=u'achievement_1',
            description=u'description_1',
            approved=True)
        achievement_2 = AchievementPrototype.create(
            group=ACHIEVEMENT_GROUP.MONEY,
            type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1,
            barrier=20,
            points=10,
            caption=u'achievement_2',
            description=u'description_2',
            approved=True)
        achievement_3 = AchievementPrototype.create(
            group=ACHIEVEMENT_GROUP.MONEY,
            type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1,
            barrier=30,
            points=10,
            caption=u'achievement_3',
            description=u'description_3',
            approved=True)
        achievement_4 = AchievementPrototype.create(
            group=ACHIEVEMENT_GROUP.MONEY,
            type=ACHIEVEMENT_TYPE.PVP_VICTORIES_1X1,
            barrier=40,
            points=10,
            caption=u'achievement_4',
            description=u'description_4',
            approved=True)

        self.assertEqual(self.hero.statistics.pvp_battles_1x1_number, 16)

        with self.check_not_changed(GiveAchievementTaskPrototype._db_count):
            self.hero.statistics.change_pvp_battles_1x1_draws(400)
            self.hero.statistics.change_pvp_battles_1x1_defeats(300)

        with self.check_delta(GiveAchievementTaskPrototype._db_count, 3):
            self.hero.statistics.change_pvp_battles_1x1_victories(300)

        self.assertEqual(
            set(GiveAchievementTaskPrototype._db_all().values_list(
                'achievement_id', flat=True)),
            set([achievement_1.id, achievement_2.id, achievement_3.id]))

        with self.check_delta(GiveAchievementTaskPrototype._db_count, 1):
            self.hero.statistics.change_pvp_battles_1x1_victories(200)

        self.assertEqual(
            set(GiveAchievementTaskPrototype._db_all().values_list(
                'achievement_id', flat=True)),
            set([
                achievement_1.id, achievement_2.id, achievement_3.id,
                achievement_4.id
            ]))

        self.assertEqual(self.hero.statistics.pvp_battles_1x1_number, 1216)
        self.assertEqual(self.hero.statistics.pvp_battles_1x1_victories, 516)
        self.assertEqual(self.hero.statistics.pvp_battles_1x1_defeats, 300)
        self.assertEqual(self.hero.statistics.pvp_battles_1x1_draws, 400)
Exemplo n.º 24
0
 def test_login_required(self):
     with self.check_not_changed(GiveAchievementTaskPrototype._db_all().count):
         self.check_ajax_error(self.post_ajax_json(self.test_url, self.get_post_data()), 'common.login_required')
Exemplo n.º 25
0
 def test_login_required(self):
     with self.check_not_changed(
             GiveAchievementTaskPrototype._db_all().count):
         self.check_ajax_error(
             self.post_ajax_json(self.test_url, self.get_post_data()),
             'common.login_required')