def testActivityAchievement(self): """Check that the user's activity achievements are loaded.""" activity = Activity( title="Test activity", description="Testing!", duration=10, point_value=10, slug="test-activity", pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", type="activity", ) activity.save() # Test that profile page has a pending activity. member = ActionMember(user=self.user, action=activity, approval_status="approved") member.save() response = self.client.get(reverse("profile_index")) self.assertContains( response, reverse("activity_task", args=( activity.type, activity.slug, ))) self.assertContains(response, "Test activity") # Test adding an event to catch a bug. event = Event( title="Test event", slug="test-event", description="Testing!", duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), type="event", event_date=datetime.datetime.today() + datetime.timedelta(days=3), ) event.save() member = ActionMember(user=self.user, action=event, approval_status="pending") member.save() response = self.client.get(reverse("profile_index")) self.assertContains( response, reverse("activity_task", args=( activity.type, activity.slug, ))) self.assertContains(response, "Pending") self.assertContains(response, "Activity:") self.assertContains(response, "Event:") self.assertNotContains(response, "You have nothing in progress or pending.")
def testCompletedActivity(self): """Tests that approved_action works when a task is completed.""" activity = Activity( type="activity", name="Test", title="Test activity", slug="test-activity", description="Variable points!", expected_duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", ) activity.save() # Test within context of a quest self.quest.unlock_conditions = "approved_action(slug='test-activity')" self.quest.save() quests = get_quests(self.user) self.assertTrue(self.quest not in quests, "User should not be able to participate in this quest.") member = ActionMember(user=self.user, action=activity, approval_status="approved") member.save() self.assertTrue(approved_action(self.user, slug="test-activity"), "User should have completed 'Test'.") self.assertTrue(approved_some_of(self.user, action_type="activity"), "User should have completed an activity") quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should be able to participate in this quest.") self.quest.unlock_conditions = "approved_some_of(action_type='activity')" self.quest.save() quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should be able to participate in this quest.") # Test as a completion condition. self.quest.accept(self.user) self.quest.completion_conditions = "not approved_action(slug='test-activity')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "not approved_some_of(action_type='activity')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "approved_action(slug='test-activity')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest in completed_quests, "User should have completed the quest.")
def testRevertToGrid(self): """Tests reverting the DesignerGrid to the SmartGrid using the url interface.""" # set up really fake designer grid self.client.get(reverse('instantiate_action', \ args=(self.action_slug, self.level_slug, 2, 2, self.draft_slug))) # set up fake smartgrid level = Level(name='Foo', slug='foo', priority=1) level.save() action = Activity(name='Test', slug='test', title='test title', description='description', \ type='activity', expected_duration=2) action.save() column = ColumnName(name='Column', slug='column') column.save() loc = ColumnGrid(level=level, column=1, name=column) loc.save() loc = Grid(level=level, column=1, row=2, action=action) loc.save() response = self.client.post(reverse('revert_to_grid', args=(self.draft_slug, )), {}, \ follow=True) self.failUnlessEqual(response.status_code, 200) draft = smartgrid_mgr.get_designer_draft(self.draft_slug) try: smartgrid_mgr.get_designer_action(draft, self.action_slug) self.fail("Old Action should be deleted") except Http404: pass try: level = smartgrid_mgr.get_designer_level(draft, slug='foo') except Http404: self.fail("Didn't copy Level Foo to designer.") try: action = smartgrid_mgr.get_designer_action(draft, slug='test') except Http404: self.fail("Didn't copy action Test to designer.") try: column = smartgrid_mgr.get_designer_column_name(draft, slug='column') except Http404: self.fail("Didn't copy the ColumnName to designer.") qs = DesignerColumnGrid.objects.filter(name=column) self.failUnlessEqual(len(qs), 1, "Column is not in Designer Grid") loc = qs[0] self.failUnlessEqual(loc.level, level, "Wrong level in Designer Grid") self.failUnlessEqual(loc.column, 1, "Wrong column in Designer Grid") self.failUnlessEqual(loc.name, column, "Wrong column name in Designer Grid") qs = DesignerGrid.objects.filter(action=action) self.failUnlessEqual(len(qs), 1, "Action is not in Designer Grid") loc = qs[0] self.failUnlessEqual(loc.level, level, "Wrong level in Designer Grid") self.failUnlessEqual(loc.column, 1, "Wrong column in Designer Grid") self.failUnlessEqual(loc.row, 2, "Wrong row in Designer Grid")
def testNumTasksCompletedWithType(self): """test task completed.""" activity = Activity( type="activity", name="Test", slug="test", title="Test activity", description="Variable points!", expected_duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", ) activity.save() # Test activities member = ActionMember(user=self.user, action=activity, approval_status="pending") member.save() self.assertFalse( approved_some_of_type(self.user, action_type="activity", count=1), "User with pending activity should not have completed a task.") # Test within context of a quest self.quest.unlock_conditions = "approved_some_of_type(action_type='activity', count=1)" self.quest.save() quests = get_quests(self.user) self.assertTrue( self.quest not in quests, "User should not be able to participate in this quest.") # Check that the user can now add the quest. member.approval_status = "approved" member.save() quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should be able to participate in this quest.") # Test as a completion condition. self.quest.accept(self.user) self.quest.completion_conditions = "approved_some_of_type(action_type='activity', count=2)" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "approved_some_of_type(action_type='activity', count=1)" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest in completed_quests, "User should have completed the quest.")
def testActivityAchievement(self): """Check that the user's activity achievements are loaded.""" activity = Activity( title="Test activity", slug="test-activity", description="Testing!", duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", type="activity", is_canopy=False ) activity.save() # Test that profile page has a pending activity. member = ActionMember(user=self.user, action=activity, approval_status="approved") member.save() response = self.client.get(reverse("profile_index")) self.assertContains(response, reverse("activity_task", args=(activity.type, activity.slug,))) self.assertContains(response, "Test activity") # Test adding an event to catch a bug. event = Event( title="Test event", slug="test-event", description="Testing!", duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), type="event", ) event.save() member = ActionMember(user=self.user, action=event, approval_status="pending") member.save() response = self.client.get(reverse("profile_index")) self.assertContains(response, reverse("activity_task", args=(activity.type, activity.slug,))) self.assertContains(response, "Pending") self.assertContains(response, "Activity:") self.assertContains(response, "Event:") self.assertNotContains(response, "You have nothing in progress or pending.")
def testVariablePointAchievement(self): """Test that a variable point activity appears correctly in the my achievements list.""" activity = Activity( title="Test activity", slug="test-activity", description="Variable points!", duration=10, point_range_start=5, point_range_end=314160, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", type="activity", ) activity.save() points = self.user.get_profile().points() member = ActionMember( user=self.user, action=activity, approval_status="approved", ) member.points_awarded = 314159 member.save() self.assertEqual( self.user.get_profile().points(), points + 314159, "Variable number of points should have been awarded.") # Kludge to change point value for the info bar. profile = self.user.get_profile() profile.add_points(3, datetime.datetime.today(), "test") profile.save() response = self.client.get(reverse("profile_index")) self.assertContains( response, reverse("activity_task", args=( activity.type, activity.slug, ))) # Note, this test may break if something in the page has the value 314159. # Try finding another suitable number. # print response.content self.assertContains( response, "314159", count=5, msg_prefix="314159 points should appear for the activity.")
def testNumTasksCompletedWithType(self): """test task completed.""" activity = Activity( type="activity", name="Test", slug="test", title="Test activity", description="Variable points!", expected_duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", ) activity.save() # Test activities member = ActionMember(user=self.user, action=activity, approval_status="pending") member.save() self.assertFalse(approved_some_of(self.user, 1, action_type="activity"), "User with pending activity should not have completed a task.") # Test within context of a quest self.quest.unlock_conditions = "approved_some_of(1, action_type='activity')" self.quest.save() quests = get_quests(self.user) self.assertTrue(self.quest not in quests, "User should not be able to participate in this quest.") # Check that the user can now add the quest. member.approval_status = "approved" member.save() quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should be able to participate in this quest.") # Test as a completion condition. self.quest.accept(self.user) self.quest.completion_conditions = "approved_some_of(2, action_type='activity')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "approved_some_of(1, action_type='activity')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest in completed_quests, "User should have completed the quest.")
def instantiate_smartgrid_action_from_designer(draft, slug): """Creates a Smart Grid instance from the designer instance.""" des_action = get_designer_action(draft, slug) action_type = des_action.type old_obj = None try: old_obj = get_smartgrid_action(slug) except Http404: old_obj = None grid_action = None if old_obj == None: if action_type == 'activity': grid_action = Activity() if action_type == 'commitment': grid_action = Commitment() if action_type == 'event': grid_action = Event() if action_type == 'filler': grid_action = Filler() else: grid_action = old_obj _copy_fields_no_foriegn_keys(des_action, grid_action) grid_action.save() # Copy all the DesignerTextPropmtQuestions for question in DesignerTextPromptQuestion.objects.filter(draft=draft, action=des_action): old_ques = TextPromptQuestion.objects.filter(action=grid_action, \ question=question.question, \ answer=question.answer) if len(old_ques) == 0: tqp = TextPromptQuestion(action=grid_action, question=question.question, \ answer=question.answer) tqp.save() return grid_action
def testVariablePointAchievement(self): """Test that a variable point activity appears correctly in the my achievements list.""" activity = Activity( title="Test activity", slug="test-activity", description="Variable points!", duration=10, point_range_start=5, point_range_end=314160, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", type="activity", ) activity.save() points = self.user.get_profile().points() member = ActionMember( user=self.user, action=activity, approval_status="approved", ) member.points_awarded = 314159 member.save() self.assertEqual(self.user.get_profile().points(), points + 314159, "Variable number of points should have been awarded.") # Kludge to change point value for the info bar. profile = self.user.get_profile() profile.add_points(3, datetime.datetime.today(), "test") profile.save() response = self.client.get(reverse("profile_index")) self.assertContains(response, reverse("activity_task", args=(activity.type, activity.slug,))) # Note, this test may break if something in the page has the value 314159. # Try finding another suitable number. # print response.content self.assertContains(response, "314159", count=5, msg_prefix="314159 points should appear for the activity.")
def testNumTasksCompleted(self): """Test that completing an activity works with approved_some_of and has_action.""" # put the grid together. First the ColumnName level = Level(name="Test level", slug="test-level") level.save() column = ColumnName(name="Test column", slug="test-column") column.save() c_grid = ColumnGrid(level=level, column=1, name=column) c_grid.save() # Then the activity activity = Activity( type="activity", name="Test", slug="test", title="Test activity", description="Variable points!", expected_duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", ) activity.save() grid = Grid(level=level, column=1, row=1, action=activity) grid.save() # Test activities member = ActionMember(user=self.user, action=activity, approval_status="pending") member.save() self.assertFalse(approved_some_of(self.user, 1, category_slug=column.slug), "User with pending activity should not have completed a task.") self.assertFalse(approved_some_of(self.user, 1), "User with pending activity should not have completed a task.") # Test within context of a quest self.quest.unlock_conditions = "approved_some_of(1, category_slug='test-column')" self.quest.save() quests = get_quests(self.user) self.assertTrue(self.quest not in quests, "User should not be able to participate in this quest.") self.quest.unlock_conditions = "approved_some_of(1)" self.quest.save() quests = get_quests(self.user) self.assertTrue(self.quest not in quests, "User should not be able to participate in this quest.") # Check that the user can now add the quest. member.approval_status = "approved" member.save() quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should be able to participate in this quest.") self.quest.unlock_conditions = "approved_some_of(1, category_slug='test-column')" self.quest.save() quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should not be able to participate in this quest.") # Test as a completion condition. self.quest.accept(self.user) self.quest.completion_conditions = "approved_some_of(2, category_slug='test-column')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "approved_some_of(2)" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "approved_some_of(1, category_slug='test-column')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest in completed_quests, "User should have completed the quest.")
def testNumTasksCompleted(self): """Test that completing an activity works with approved_some_of and has_action.""" # put the grid together. First the ColumnName level = Level(name="Test level", slug="test-level") level.save() column = ColumnName(name="Test column", slug="test-column") column.save() c_grid = ColumnGrid(level=level, column=1, name=column) c_grid.save() # Then the activity activity = Activity( type="activity", name="Test", slug="test", title="Test activity", description="Variable points!", expected_duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", ) activity.save() grid = Grid(level=level, column=1, row=1, action=activity) grid.save() # Test activities member = ActionMember(user=self.user, action=activity, approval_status="pending") member.save() self.assertFalse( approved_some_of_type(self.user, action_type='activity', count=1), "User with pending activity should not have completed a task.") self.assertFalse( approved_some(self.user, count=1), "User with pending activity should not have completed a task.") # Test within context of a quest self.quest.unlock_conditions = "approved_some_of_type(action_type='activity', count=1)" self.quest.save() quests = get_quests(self.user) self.assertTrue( self.quest not in quests, "User should not be able to participate in this quest.") self.quest.unlock_conditions = "approved_some(count=1)" self.quest.save() quests = get_quests(self.user) self.assertTrue( self.quest not in quests, "User should not be able to participate in this quest.") # Check that the user can now add the quest. member.approval_status = "approved" member.save() quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should be able to participate in this quest.") self.quest.unlock_conditions = "approved_some_of_type(action_type='activity', count=1)" self.quest.save() quests = get_quests(self.user) self.assertTrue( self.quest in quests["available_quests"], "User should not be able to participate in this quest.") # Test as a completion condition. self.quest.accept(self.user) self.quest.completion_conditions = "approved_some_of_type(action_type='activity', count=2)" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "approved_some(count=2)" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "approved_some_of_type(action_type='activity', count=1)" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest in completed_quests, "User should have completed the quest.")
def testCompletedActivity(self): """Tests that approved_action works when a task is completed.""" activity = Activity( type="activity", name="Test", title="Test activity", slug="test-activity", description="Variable points!", expected_duration=10, point_value=10, pub_date=datetime.datetime.today(), expire_date=datetime.datetime.today() + datetime.timedelta(days=7), confirm_type="text", ) activity.save() # Test within context of a quest self.quest.unlock_conditions = "approved_action(action_slug='test-activity')" self.quest.save() quests = get_quests(self.user) self.assertTrue( self.quest not in quests, "User should not be able to participate in this quest.") member = ActionMember(user=self.user, action=activity, approval_status="approved") member.save() self.assertTrue( approved_action(self.user, action_slug="test-activity"), "User should have completed 'Test'.") self.assertTrue( approved_some_of_type(self.user, action_type="activity"), "User should have completed an activity") quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should be able to participate in this quest.") self.quest.unlock_conditions = "approved_some_of_type(action_type='activity')" self.quest.save() quests = get_quests(self.user) self.assertTrue(self.quest in quests["available_quests"], "User should be able to participate in this quest.") # Test as a completion condition. self.quest.accept(self.user) self.quest.completion_conditions = "not approved_action(action_slug='test-activity')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "not approved_some_of_type(action_type='activity')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest not in completed_quests, "User should not be able to complete the quest.") self.quest.completion_conditions = "approved_action(action_slug='test-activity')" self.quest.save() completed_quests = possibly_completed_quests(self.user) self.assertTrue(self.quest in completed_quests, "User should have completed the quest.")