def test_experience_with_sources(self): class TestSource(ExperienceSource): """ This class simulates desync with real experience, initially get_experience() returns one value, but after force_recalculate() return totally different one """ def __init__(self, initial, after_recalc): self.value = initial self.recalc = after_recalc def get_experience(self, user): return self.value def force_recalculate(self, user): self.value = self.recalc # To level up to lvl 1 you need the ExpMultiplier experience test_source = TestSource(1, ExpMultiplier) test_source1 = TestSource(3, 1) try: Experience.add_experience_source(test_source) Experience.add_experience_source(test_source1) test_user = User.objects.get(username='******') exp = Experience(test_user) self.assertEquals(exp.current_experience, 4) self.assertEquals(exp.current_level, 0) self.assertEquals( exp.required_experience_to_lvlup, ExpMultiplier ) self.assertEquals(exp.level_exp_tuple, (0, 4)) exp.force_recalculate() self.assertEquals(exp.current_experience, 1) self.assertEquals(exp.current_level, 1) self.assertEquals( exp.required_experience_to_lvlup, ExpBase*ExpMultiplier ) self.assertEquals(exp.level_exp_tuple, (1, 1)) Experience.clear_experience_sources() self.assertEquals(exp.level_exp_tuple, (0, 0)) finally: Experience.clear_experience_sources()
def test_experience_with_sources(self): class TestSource(ExperienceSource): """ This class simulates desync with real experience, initially get_experience() returns one value, but after force_recalculate() return totally different one """ def __init__(self, initial, after_recalc): self.value = initial self.recalc = after_recalc def get_experience(self, user): return self.value def force_recalculate(self, user): self.value = self.recalc # To level up to lvl 1 you need the ExpMultiplier experience test_source = TestSource(1, ExpMultiplier) test_source1 = TestSource(3, 1) try: Experience.add_experience_source(test_source) Experience.add_experience_source(test_source1) test_user = User.objects.get(username='******') exp = Experience(test_user) self.assertEquals(exp.current_experience, 4) self.assertEquals(exp.current_level, 0) self.assertEquals(exp.required_experience_to_lvlup, ExpMultiplier) self.assertEquals(exp.level_exp_tuple, (0, 4)) exp.force_recalculate() self.assertEquals(exp.current_experience, 1) self.assertEquals(exp.current_level, 1) self.assertEquals(exp.required_experience_to_lvlup, ExpBase * ExpMultiplier) self.assertEquals(exp.level_exp_tuple, (1, 1)) Experience.clear_experience_sources() self.assertEquals(exp.level_exp_tuple, (0, 0)) finally: Experience.clear_experience_sources()
def test_problem_source(self): try: Experience.add_experience_source(PROBLEM_EXPERIENCE_SOURCE) user = User.objects.get(username="******") # test_user has solved a trivial task user_exp = Experience(user) user_exp.force_recalculate() self.assertEquals(user_exp.current_level, 0) self.assertEquals(user_exp.current_experience, Lvl1TaskExp) # Update on problem difficulty change pd = ProblemDifficulty.objects.get(problem__id=10) pd.difficulty = DIFFICULTY.EASY pd.save() self.assertEquals(user_exp.current_level, 1) self.assertEquals(user_exp.current_experience, 0) finally: Experience.clear_experience_sources()
def test_problem_source(self): try: Experience.add_experience_source(PROBLEM_EXPERIENCE_SOURCE) user = User.objects.get(username='******') # test_user has solved a trivial task user_exp = Experience(user) user_exp.force_recalculate() self.assertEquals(user_exp.current_level, 0) self.assertEquals(user_exp.current_experience, Lvl1TaskExp) # Update on problem difficulty change pd = ProblemDifficulty.objects.get(problem__id=10) pd.difficulty = DIFFICULTY.EASY pd.save() self.assertEquals(user_exp.current_level, 1) self.assertEquals(user_exp.current_experience, 0) finally: Experience.clear_experience_sources()