def test_get_level(self): user = create_user(timezone="Australia/Sydney", country="Australia", region="xyz", city="Sydney") achievement = create_achievement( achievement_name="invite_users_achievement", achievement_evaluation="weekly") achievement_date = Achievement.get_datetime_for_evaluation_type( evaluation_timezone=achievement.evaluation_timezone, evaluation_type="weekly") create_achievement_user(user, achievement, achievement_date, level=2) achievement.get_level(user.id, achievement["id"], achievement_date) level = achievement.get_level_int(user.id, achievement.id, achievement_date) achievement_date1 = Achievement.get_datetime_for_evaluation_type( evaluation_timezone=achievement.evaluation_timezone, evaluation_type="weekly", dt=achievement_date + datetime.timedelta(7)) achievement.get_level(user.id, achievement["id"], achievement_date1) level1 = achievement.get_level_int(user.id, achievement.id, achievement_date1) # Test for get_level as integer print("level1:", level1) self.assertEqual(level, 2) self.assertEqual(level1, 0)
def test_evaluate_achievement_for_yearly_evaluation_case2(self): achievement = create_achievement( achievement_name="invite_users_achievement", achievement_relevance="friends", achievement_maxlevel=3, achievement_evaluation="yearly") user = create_user() achievement_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, achievement["evaluation"]) print(achievement_date) next_year = achievement_date + datetime.timedelta(534) print(next_year) create_achievement_user(user, achievement, achievement_date, level=1) create_variable("invite_users", variable_group="day") create_goals(achievement, goal_goal="3*level", goal_operator="geq", goal_group_by_key=False) clear_all_caches() # Not achieved in first year but in the second year print("Yearly evaluation Case 2") Value.increase_value(variable_name="invite_users", user=user, value=5, key=None, at_datetime=achievement_date) achievement_result = Achievement.evaluate(user, achievement.id, achievement_date) print("achievement result: ", achievement_result) next_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, evaluation_type="yearly", dt=next_year + datetime.timedelta(10)) Value.increase_value(variable_name="invite_users", user=user, value=15, key=None, at_datetime=next_date) achievement_result1 = Achievement.evaluate(user, achievement.id, next_date) print("achievement result1: ", achievement_result1) self.assertEqual(achievement_result["achievement_date"], achievement_date) self.assertEqual(achievement_result1["achievement_date"], next_date) self.assertNotEqual(next_year, next_date) self.assertIn('1', achievement_result["levels_achieved"]) self.assertIn('1', achievement_result1["new_levels"]) self.assertIn('2', achievement_result1["new_levels"]) self.assertIn('3', achievement_result1["new_levels"])
def test_evaluate_achievement_for_invite_users(self): achievement = create_achievement( achievement_name="invite_users_achievement", achievement_relevance="friends", achievement_maxlevel=10) user = create_user() achievement_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, achievement.evaluation) create_achievement_user(user=user, achievement=achievement, achievement_date=achievement_date, level=1) update_connection().execute(t_values.delete()) create_variable("invite_users", variable_group="day") Value.increase_value(variable_name="invite_users", user=user, value=1, key=None, at_datetime=achievement_date) create_goals(achievement, goal_goal="1*level", goal_operator="geq", goal_group_by_key=False) clear_all_caches() level = Achievement.evaluate(user, achievement.id, achievement_date).get("level") print("level: ", level) Value.increase_value(variable_name="invite_users", user=user, value=8, key=None, at_datetime=achievement_date) level1 = Achievement.evaluate(user, achievement.id, achievement_date).get("level") print("level1 ", level1) Value.increase_value(variable_name="invite_users", user=user, value=5, key=None, at_datetime=achievement_date) level2 = Achievement.evaluate(user, achievement.id, achievement_date).get("level") print("level2: ", level2) self.assertEqual(level, 1) self.assertEqual(level1, 9) self.assertEqual(level2, 10)
def test_get_reward_and_properties_for_achievement(self): user = create_user() achievement = create_achievement( achievement_name="invite_users_achievement", achievement_relevance="friends", achievement_maxlevel=3) achievementproperty = AchievementProperty() achievementproperty.name = "xp" DBSession.add(achievementproperty) DBSession.flush() achievements_achievementproperty = AchievementAchievementProperty() achievements_achievementproperty.achievement_id = achievement.id achievements_achievementproperty.property_id = achievementproperty.id achievements_achievementproperty.value = "5" achievements_achievementproperty.from_level = None DBSession.add(achievements_achievementproperty) DBSession.flush() create_achievement_rewards(achievement=achievement) achievement_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, achievement.evaluation) create_achievement_user(user=user, achievement=achievement, achievement_date=achievement_date, level=1) create_variable("invite_users", "none") Value.increase_value(variable_name="invite_users", user=user, value=4, key="5", at_datetime=achievement_date) create_goals( achievement=achievement, goal_condition= """{"term": {"type": "literal", "variable": "invite_users"}}""", goal_group_by_key=True, goal_operator="geq", goal_goal="1*level") clear_all_caches() result = Achievement.evaluate(user, achievement.id, achievement_date) print("reward_achievement_result:", result) self.assertEqual(len(result["new_levels"]["2"]["rewards"]), 0) self.assertEqual(len(result["new_levels"]["3"]["rewards"]), 1) self.assertEqual(len(result["new_levels"]["2"]["properties"]), 1) self.assertEqual(len(result["new_levels"]["3"]["properties"]), 1)
def test_evaluate_achievement_for_weekly_evaluation_case3(self): achievement = create_achievement( achievement_name="invite_users_achievement", achievement_relevance="friends", achievement_maxlevel=3, achievement_evaluation="weekly") user = create_user() achievement_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, achievement["evaluation"]) create_achievement_user(user, achievement, achievement_date, level=1) create_variable("invite_users", variable_group="day") create_goals(achievement, goal_goal="3*level", goal_operator="geq", goal_group_by_key=False) clear_all_caches() # User has not achieved in first week and achieved after few days in a same week print("Weekly evaluation Case 3") Value.increase_value(variable_name="invite_users", user=user, value=5, key=None, at_datetime=achievement_date) achievement_result = Achievement.evaluate(user, achievement.id, achievement_date) print(achievement_result) next_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, evaluation_type="weekly", dt=achievement_date + datetime.timedelta(3)) Value.increase_value(variable_name="invite_users", user=user, value=10, key=None, at_datetime=next_date) achievement_result1 = Achievement.evaluate(user, achievement.id, next_date) print("achievement result1: ", achievement_result1) self.assertEqual(achievement_result["achievement_date"], achievement_date) self.assertEqual(achievement_result1["achievement_date"], next_date) self.assertEqual(achievement_date, next_date) self.assertIn('1', achievement_result["levels_achieved"]) self.assertIn('2', achievement_result1["new_levels"]) self.assertIn('3', achievement_result1["new_levels"])
def test_multiple_goals_of_same_achievement(self): user = create_user() achievement = create_achievement( achievement_name="participate_achievement", achievement_maxlevel=3) create_achievement_rewards(achievement=achievement) achievement_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, achievement.evaluation) create_goals( achievement=achievement, goal_condition= """{"term": {"key": ["5","7"], "type": "literal", "key_operator": "IN", "variable": "participate_seminar"}}""", goal_group_by_key=False, goal_operator="geq", goal_goal="2*level", goal_name="goal_participate_seminar") create_goals( achievement=achievement, goal_condition= """{"term": {"type": "literal", "variable": "participate_talk"}}""", goal_group_by_key=False, goal_operator="geq", goal_goal="1*level", goal_name="goal_participate_talk") clear_all_caches() create_achievement_user(user=user, achievement=achievement, achievement_date=achievement_date, level=1) variable1 = create_variable("participate_seminar", variable_group=None) variable2 = create_variable("participate_talk", variable_group=None) Value.increase_value(variable1.name, user, "2", "5", at_datetime=achievement_date) Value.increase_value(variable1.name, user, "3", "7", at_datetime=achievement_date) Value.increase_value(variable2.name, user, "3", key=None, at_datetime=achievement_date) result = Achievement.evaluate(user, achievement.id, achievement_date) print("multiple_goals_of_same_achievement:", result) Value.increase_value(variable1.name, user, "2", "7", at_datetime=achievement_date) result1 = Achievement.evaluate(user, achievement.id, achievement_date) print(result1) Value.increase_value(variable2.name, user, "2", key=None, at_datetime=achievement_date) result2 = Achievement.evaluate(user, achievement.id, achievement_date) print(result2) self.assertEqual(len(result["levels"]["3"]["rewards"]), 1) self.assertEqual(result["levels"]["1"]["goals"]["1"]["goal_goal"], 2) self.assertEqual(result["levels"]["3"]["goals"]["2"]["goal_goal"], 3) self.assertEqual(result1["levels"]["2"]["goals"]["1"]["goal_goal"], 4) self.assertEqual(result1["levels"]["3"]["goals"]["2"]["goal_goal"], 3) self.assertEqual(result2["levels"]["2"]["goals"]["1"]["goal_goal"], 4) self.assertEqual(result2["levels"]["3"]["goals"]["2"]["goal_goal"], 3)
def test_evaluate_achievement_for_monthly_evaluation_case2(self): achievement = create_achievement( achievement_name="invite_users_achievement", achievement_relevance="friends", achievement_maxlevel=3, achievement_evaluation="monthly") user = create_user() achievement_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, achievement["evaluation"]) print(achievement_date) next_month = achievement_date + datetime.timedelta(31) print(next_month) create_achievement_user(user, achievement, achievement_date, level=1) create_variable("invite_users", variable_group="day") create_goals(achievement, goal_goal="3*level", goal_operator="geq", goal_group_by_key=False) clear_all_caches() # User has NOT achieved in this month but in the next month print("Monthly evaluation Case 2") Value.increase_value(variable_name="invite_users", user=user, value=5, key=None, at_datetime=achievement_date) achievement_result = Achievement.evaluate(user, achievement.id, achievement_date) print("achievement result: ", achievement_result) next_date = Achievement.get_datetime_for_evaluation_type( achievement.evaluation_timezone, evaluation_type="monthly", dt=next_month + datetime.timedelta(days=10)) Value.increase_value(variable_name="invite_users", user=user, value=10, key=None, at_datetime=next_date) achievement_result1 = Achievement.evaluate(user, achievement.id, next_date) print("achievement result1: ", achievement_result1) self.assertEqual(achievement_result["achievement_date"], achievement_date) self.assertEqual(achievement_result1["achievement_date"], next_date) self.assertGreaterEqual( next_month, next_date) # next_month can be the 1st, 2nd, 3rd of 4th (February) self.assertIn('1', achievement_result["levels_achieved"]) self.assertIn('1', achievement_result1["new_levels"]) self.assertIn('2', achievement_result1["new_levels"]) self.assertIn('3', achievement_result1["new_levels"])