示例#1
0
    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()
示例#2
0
    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()
示例#3
0
    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()
示例#4
0
    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()