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)
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)
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)
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)
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()
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()
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)
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)
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')
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')
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')
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')
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) })
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)
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)
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)
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)})
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)
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)
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)
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)
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)
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)
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')
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')