Esempio n. 1
0
    def testIndexCommitment(self):
        """Tests that a commitment shows up in public commitments and in the wall."""
        posts = self.team.post_set.count()
        # Create a commitment that will appear on the news page.
        commitment = Commitment(
            type="commitment",
            title="Test commitment",
            slug="test-commitment",
            description="A commitment!",
            point_value=10,
        )
        commitment.save()

        member = ActionMember(action=commitment, user=self.user)
        member.save()

        response = self.client.get(reverse("news_index"))
        self.failUnlessEqual(response.status_code, 200)
        self.assertEqual(
            posts + 1, self.team.post_set.count(),
            "One post should have been posted to the wall (public commitment)."
        )
        self.assertContains(response, commitment.title, 2,
            msg_prefix="Commitment title should only appear in the wall and the public " \
                       "commitments box."
        )
Esempio n. 2
0
    def testDeleteRemovesPoints(self):
        """Test that deleting a commitment member after it is completed removes the user's
        points."""
        points = self.user.get_profile().points()

        # Setup to check round points.
        (entry, _) = self.user.get_profile().scoreboardentry_set.get_or_create(
            round_name=self.current_round)
        round_points = entry.points

        commitment_member = ActionMember(user=self.user, action=self.commitment,
            completion_date=datetime.datetime.today())
        commitment_member.save()

        commitment_member.award_date = datetime.datetime.today()
        commitment_member.approval_status = "approved"
        commitment_member.save()
        award_date = commitment_member.award_date
        commitment_member.delete()

        # Verify nothing has changed.
        profile = self.user.get_profile()
        self.assertTrue(
            profile.last_awarded_submission() is None or
            profile.last_awarded_submission() < award_date)
        self.assertEqual(points, profile.points())

        entry = self.user.get_profile().scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points, entry.points)
        self.assertTrue(
            entry.last_awarded_submission is None or entry.last_awarded_submission < award_date)
Esempio n. 3
0
    def testPopularActivities(self):
        """Check which activity is the most popular."""
        activity_member = ActionMember(user=self.user, action=self.activity)
        activity_member.approval_status = "approved"
        activity_member.save()

        activities = smartgrid.get_popular_actions("activity", "approved")
        self.assertEqual(activities[0].title, self.activity.title)
Esempio n. 4
0
    def testPopularActivities(self):
        """Check which activity is the most popular."""
        activity_member = ActionMember(user=self.user, action=self.activity)
        activity_member.approval_status = "approved"
        activity_member.save()

        activities = smartgrid.get_popular_actions("activity", "approved")
        self.assertEqual(activities[0].title, self.activity.title)
    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.")
Esempio n. 6
0
    def testActivityLog(self):
        """
        Test that regular activities create the appropriate log.
        """
        member = ActionMember(user=self.user, action=self.activity, approval_status='approved')
        member.save()

        # Check the points log for this user.
        log = self.user.pointstransaction_set.all()[0]
        self.assertTrue(log.message.startswith(self.activity.type.capitalize()))
    def testPopularCommitments(self):
        """Tests that we can retrieve the most popular commitments."""
        commitment_member = ActionMember(user=self.user, action=self.commitment)
        commitment_member.award_date = datetime.datetime.today()
        commitment_member.approval_status = "approved"
        commitment_member.save()

        commitments = smartgrid.get_popular_actions("commitment", "approved")
        self.assertEqual(commitments[0].title, self.commitment.title)
        self.assertEqual(commitments[0].completions, 1, "Most popular commitment should have one completion.")
Esempio n. 8
0
    def testActivityLog(self):
        """
        Test that regular activities create the appropriate log.
        """
        member = ActionMember(user=self.user, action=self.activity, approval_status='approved')
        member.save()

        # Check the points log for this user.
        log = self.user.pointstransaction_set.all()[0]
        self.assertTrue(log.message.startswith(self.activity.type.capitalize()))
Esempio n. 9
0
    def testDeleteRemovesPoints(self):
        """Test that deleting a commitment member after it is completed removes the user's
        points."""
        points = self.user.profile.points()

        # Setup to check round points.
        (entry, _) = self.user.profile.scoreboardentry_set.get_or_create(
            round_name=self.current_round)
        round_points = entry.points

        commitment_member = ActionMember(user=self.user, action=self.commitment,
            completion_date=datetime.datetime.today())
        commitment_member.save()

        commitment_member.award_date = datetime.datetime.today()
        commitment_member.approval_status = "approved"
        commitment_member.save()
        award_date = commitment_member.award_date
        commitment_member.delete()

        # Verify nothing has changed.
        profile = self.user.profile
        self.assertTrue(
            profile.last_awarded_submission() is None or
            profile.last_awarded_submission() < award_date)
        self.assertEqual(points, profile.points())

        entry = self.user.profile.scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points, entry.points)
        self.assertTrue(
            entry.last_awarded_submission is None or entry.last_awarded_submission < award_date)
Esempio n. 10
0
def complete_setup_activity(user):
    """complete the setup activity."""

    # error out if we can't find to the activity.
    activity = get_setup_activity()
    members = ActionMember.objects.filter(user=user, action=activity)
    if not members:
        # if points not awarded, do so.
        member = ActionMember(action=activity, user=user)
        member.approval_status = "approved"
        member.save()
Esempio n. 11
0
def complete_setup_activity(user):
    """complete the setup activity."""

    # error out if we can't find to the activity.
    activity = get_setup_activity()
    members = ActionMember.objects.filter(user=user, action=activity)
    if not members:
        # if points not awarded, do so.
        member = ActionMember(action=activity, user=user)
        member.approval_status = "approved"
        member.save()
Esempio n. 12
0
def signup(request, event):
    """Commit the current user to the activity."""
    user = request.user

    action_member = ActionMember(user=user, action=event)
    action_member.save()

    response = HttpResponseRedirect(
        reverse("activity_task", args=(event.type, event.slug,)))
    value = score_mgr.signup_points()
    notification = "You just earned " + str(value) + " points."
    response.set_cookie("task_notify", notification)
    return response
Esempio n. 13
0
    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.")
Esempio n. 14
0
    def testIndexMostPopular(self):
        """Test most popular"""
        posts = self.team.post_set.count()
        commitment = Commitment(
            type="commitment",
            title="Test commitment2",
            slug="test-commitment2",
            description="A commitment2!",
            point_value=10,
        )
        commitment.save()

        member = ActionMember(action=commitment, user=self.user)
        member.save()

        member = ActionMember(action=commitment,
                              user=self.user,
                              approval_status="approved",
                              award_date=datetime.datetime.today())
        member.save()

        response = self.client.get(reverse("news_index"))
        self.failUnlessEqual(response.status_code, 200)
        self.assertEqual(
            posts + 2, self.team.post_set.count(),
            "Two posts should have been posted to the wall (commit and award)."
        )
Esempio n. 15
0
    def testCompletionAddsPoints(self):
        """Tests that completing a task adds points."""
        points = self.user.get_profile().points()

        # Setup to check round points.
        (entry, _) = self.user.get_profile().scoreboardentry_set.get_or_create(
            round_name=self.current_round)
        round_points = entry.points

        commitment_member = ActionMember(user=self.user, action=self.commitment,
            completion_date=datetime.datetime.today())
        commitment_member.save()

        # Check that the user's signup point.
        self.assertEqual(points + score_mgr.signup_points(), self.user.get_profile().points())

        entry = self.user.get_profile().scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points + score_mgr.signup_points(), entry.points)

        commitment_member.award_date = datetime.datetime.today()
        commitment_member.approval_status = "approved"
        commitment_member.save()
        points += commitment_member.action.commitment.point_value
        self.assertEqual(points + score_mgr.signup_points(), self.user.get_profile().points())
        self.assertEqual(self.user.get_profile().last_awarded_submission(),
            commitment_member.award_date)

        entry = self.user.get_profile().scoreboardentry_set.get(round_name=self.current_round)
        round_points += commitment_member.action.commitment.point_value
        self.assertEqual(round_points + score_mgr.signup_points(), entry.points)
        self.assertTrue(
            abs(entry.last_awarded_submission - commitment_member.award_date) < datetime.timedelta(
                minutes=1))
Esempio n. 16
0
    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.")
Esempio n. 17
0
    def testRejectionNotifications(self):
        """
        Test that notifications are created by rejections and
        are marked as read when the member changes back to pending.
        """
        notifications = UserNotification.objects.count()
        activity_member = ActionMember(user=self.user, action=self.activity,
            submission_date=datetime.datetime.today())
        activity_member.approval_status = "rejected"
        activity_member.submission_date = datetime.datetime.today()
        activity_member.save()

        self.assertEqual(UserNotification.objects.count(), notifications + 1,
            "New notification should have been created.")
        notice = activity_member.notifications.all()[0]
        self.assertTrue(notice.unread, "Notification should be unread.")
Esempio n. 18
0
    def testSocialBonusAchievement(self):
        """Check that the social bonus appears in the my achievements list."""
        # Create a second test user.
        user2 = User.objects.create_user("user2", "*****@*****.**")
        event = Event.objects.create(
            title="Test event",
            slug="test-event",
            description="Testing!",
            duration=10,
            point_value=10,
            social_bonus=10,
            pub_date=datetime.datetime.today(),
            expire_date=datetime.datetime.today() + datetime.timedelta(days=7),
            type="event",
            event_date=datetime.datetime.today(),
        )

        # Create membership for the two users.
        m = ActionMember(
            user=self.user,
            action=event,
            approval_status="approved",
        )
        m.social_email = "*****@*****.**"
        m.save()

        m2 = ActionMember(
            user=user2,
            action=event,
            approval_status="approved",
        )
        m2.social_email = "*****@*****.**"
        m2.save()

        response = self.client.get(reverse("profile_index"))
        self.assertContains(
            response, reverse("activity_task", args=(
                event.type,
                event.slug,
            )))
        entry = "Event: Test event (Social Bonus)"
        self.assertContains(
            response,
            entry,
            count=1,
            msg_prefix="Achievements should contain a social bonus entry")
Esempio n. 19
0
    def testCommitmentAchievement(self):
        """Check that the user's commitment achievements are loaded."""
        commitment = Commitment(
            title="Test commitment",
            description="A commitment!",
            point_value=10,
            type="commitment",
            slug="test-commitment",
        )
        commitment.save()

        # Test that profile page has a pending activity.
        member = ActionMember(user=self.user, action=commitment)
        member.save()
        response = self.client.get(reverse("profile_index"))
        self.assertContains(response,
            reverse("activity_task", args=(commitment.type, commitment.slug,)))
        self.assertContains(response, "In Progress")
        self.assertContains(response, "Commitment:")
        self.assertNotContains(response, "You have nothing in progress or pending.")

        # Test that the profile page has a rejected activity
        member.award_date = datetime.datetime.today()
        member.save()
        response = self.client.get(reverse("profile_index"))
        self.assertContains(response,
            reverse("activity_task", args=(commitment.type, commitment.slug,)))
        self.assertNotContains(response, "You have not been awarded anything yet!")
        self.assertNotContains(response, "In Progress")
Esempio n. 20
0
    def testApproveAddsPoints(self):
        """Test for verifying that approving a user awards them points."""
        points = self.user.get_profile().points()

        # Setup to check round points.
        (entry, _) = self.user.get_profile().scoreboardentry_set.get_or_create(
            round_name=self.current_round)
        round_points = entry.points
        round_last_awarded = entry.last_awarded_submission

        activity_points = self.activity.point_value

        activity_member = ActionMember(user=self.user, action=self.activity)
        activity_member.save()

        # Verify that nothing has changed.
        self.assertEqual(points, self.user.get_profile().points())
        entry = self.user.get_profile().scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points, entry.points)
        self.assertEqual(round_last_awarded, entry.last_awarded_submission)

        activity_member.approval_status = "approved"
        activity_member.save()

        # Verify overall score changed.
        new_points = self.user.get_profile().points()
        self.assertEqual(new_points - points, activity_points)

        # Verify round score changed.
        entry = self.user.get_profile().scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points + activity_points, entry.points)
        self.assertTrue(abs(
            activity_member.submission_date - entry.last_awarded_submission) < datetime.timedelta(
            minutes=1))
Esempio n. 21
0
    def testDeleteRemovesPoints(self):
        """Test that deleting an approved ActionMember removes their points."""

        points = self.user.get_profile().points()

        # Setup to check round points.
        (entry, _) = self.user.get_profile().scoreboardentry_set.get_or_create(
            round_name=self.current_round)
        round_points = entry.points

        activity_member = ActionMember(user=self.user, action=self.activity)
        activity_member.approval_status = "approved"
        activity_member.save()
        award_date = activity_member.award_date

        activity_member.delete()
        new_points = self.user.get_profile().points()

        self.assertEqual(points, new_points)
        self.assertTrue(self.user.get_profile().last_awarded_submission() is None)

        entry = self.user.get_profile().scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points, entry.points)
        self.assertTrue(
            entry.last_awarded_submission is None or entry.last_awarded_submission < award_date)
Esempio n. 22
0
    def testCompletionAddsPoints(self):
        """Tests that completing a task adds points."""
        points = self.user.profile.points()

        # Setup to check round points.
        (entry, _) = self.user.profile.scoreboardentry_set.get_or_create(
            round_name=self.current_round)
        round_points = entry.points

        commitment_member = ActionMember(user=self.user, action=self.commitment,
            completion_date=datetime.datetime.today())
        commitment_member.save()

        # Check that the user's signup point.
        self.assertEqual(points + score_mgr.signup_points(), self.user.profile.points())

        entry = self.user.profile.scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points + score_mgr.signup_points(), entry.points)

        commitment_member.award_date = datetime.datetime.today()
        commitment_member.approval_status = "approved"
        commitment_member.save()
        points += commitment_member.action.commitment.point_value
        self.assertEqual(points + score_mgr.signup_points(), self.user.profile.points())
        self.assertEqual(self.user.profile.last_awarded_submission(),
            commitment_member.award_date)

        entry = self.user.profile.scoreboardentry_set.get(round_name=self.current_round)
        round_points += commitment_member.action.commitment.point_value
        self.assertEqual(round_points + score_mgr.signup_points(), entry.points)
        self.assertTrue(
            abs(entry.last_awarded_submission - commitment_member.award_date) < datetime.timedelta(
                minutes=1))
Esempio n. 23
0
 def testRejectedActivity(self):
     """
     Test that a rejected activity submission posts a message.
     """
     activity = test_utils.create_activity()
     member = ActionMember(
         action=activity,
         user=self.user,
         approval_status="rejected",
         submission_date=datetime.datetime.today(),
     )
     member.save()
     response = self.client.get(reverse("learn_index"))
     self.assertContains(response, 'Your response to <a href="%s' % (
         reverse("activity_task", args=(activity.type, activity.slug,)),
         ))
     response = self.client.get(reverse("learn_index"))
     self.assertNotContains(response, "notification-box")
Esempio n. 24
0
    def testHasCommitment(self):
        """Tests that has_action works for a commitment in progress."""
        commitment = Commitment(
            title="Test commitment",
            type="commitment",
            name="Test",
            slug="test-commitment",
            description="A commitment!",
            point_value=10,
        )
        commitment.save()

        # Test as an unlock condition.
        self.quest.unlock_conditions = "completed_action(slug='test-commitment')"
        self.quest.save()
        self.assertTrue(
            self.quest not in get_quests(self.user),
            "User should not be able to participate in this quest.")

        member = ActionMember(user=self.user, action=commitment)
        member.save()
        self.assertTrue(completed_action(self.user, slug='test-commitment'),
                        "User should have a commitment in progress.")
        self.assertTrue(completed_some_of(self.user, action_type="commitment"),
                        "User should have a commitment in progress.")

        self.assertTrue(
            self.quest in get_quests(self.user)["available_quests"],
            "User should be able to participate in this quest.")
        self.quest.unlock_conditions = "completed_some_of(action_type='commitment')"
        self.quest.save()
        self.assertTrue(
            self.quest in get_quests(self.user)["available_quests"],
            "User should be able to participate in this quest.")

        member.award_date = datetime.datetime.today()
        member.save()
        self.assertTrue(completed_action(self.user, slug='test-commitment'),
                        "User should have a completed commitment.")
        self.assertTrue(completed_some_of(self.user, action_type="commitment"),
                        "User should have a completed commitment.")

        # Test as a completion condition
        self.quest.accept(self.user)
        self.quest.completion_conditions = "not completed_action(slug='test-commitment')"
        self.quest.save()
        self.assertTrue(self.quest not in possibly_completed_quests(self.user),
                        "User should not be able to complete this quest.")

        self.quest.completion_conditions = "not completed_some_of(action_type='commitment')"
        self.quest.save()
        self.assertTrue(self.quest not in possibly_completed_quests(self.user),
                        "User should not be able to complete this quest.")

        self.quest.completion_conditions = "completed_action(slug='test-commitment')"
        self.quest.save()
        self.assertTrue(self.quest in possibly_completed_quests(self.user),
                        "User should be able to complete this quest.")
Esempio n. 25
0
def signup(request, event):
    """Commit the current user to the activity."""
    user = request.user
    value = None

    # Search for an existing activity for this user
    if event not in user.action_set.all():
        action_member = ActionMember(user=user, action=event)
        action_member.save()

        response = HttpResponseRedirect(
            reverse("activity_task", args=(event.type, event.slug,)))
        value = score_mgr.signup_points()
        notification = "You just earned " + str(value) + " points."
        response.set_cookie("task_notify", notification)
        return response

    # adding to the existing activity results in redirecting to the task page
    return HttpResponseRedirect(reverse("activity_task", args=(event.type, event.slug,)))
Esempio n. 26
0
    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.")
Esempio n. 27
0
 def testRejectedActivity(self):
     """
     Test that a rejected activity submission posts a message.
     """
     activity = test_utils.create_activity()
     member = ActionMember(
         action=activity,
         user=self.user,
         approval_status="rejected",
         submission_date=datetime.datetime.today(),
     )
     member.save()
     response = self.client.get(reverse("learn_index"))
     self.assertContains(
         response, 'Your response to <a href="%s' %
         (reverse("activity_task", args=(
             activity.type,
             activity.slug,
         )), ))
     response = self.client.get(reverse("learn_index"))
     self.assertNotContains(response, "notification-box")
Esempio n. 28
0
    def testDeleteRemovesPoints(self):
        """Test that deleting an approved ActionMember removes their points."""

        points = self.user.profile.points()

        # Setup to check round points.
        (entry, _) = self.user.profile.scoreboardentry_set.get_or_create(
            round_name=self.current_round)
        round_points = entry.points

        activity_member = ActionMember(user=self.user, action=self.activity)
        activity_member.approval_status = "approved"
        activity_member.save()
        award_date = activity_member.award_date

        activity_member.delete()
        new_points = self.user.profile.points()

        self.assertEqual(points, new_points)
        self.assertTrue(self.user.profile.last_awarded_submission() is None)

        entry = self.user.profile.scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points, entry.points)
        self.assertTrue(
            entry.last_awarded_submission is None or entry.last_awarded_submission < award_date)
Esempio n. 29
0
    def testApproveAddsPoints(self):
        """Test for verifying that approving a user awards them points."""
        points = self.user.profile.points()

        # Setup to check round points.
        (entry, _) = self.user.profile.scoreboardentry_set.get_or_create(
            round_name=self.current_round)
        round_points = entry.points
        round_last_awarded = entry.last_awarded_submission

        activity_points = self.activity.point_value

        activity_member = ActionMember(user=self.user, action=self.activity)
        activity_member.save()

        # Verify that nothing has changed.
        self.assertEqual(points, self.user.profile.points())
        entry = self.user.profile.scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points, entry.points)
        self.assertEqual(round_last_awarded, entry.last_awarded_submission)

        activity_member.approval_status = "approved"
        activity_member.save()

        # Verify overall score changed.
        new_points = self.user.profile.points()
        self.assertEqual(new_points - points, activity_points)

        # Verify round score changed.
        entry = self.user.profile.scoreboardentry_set.get(round_name=self.current_round)
        self.assertEqual(round_points + activity_points, entry.points)
        self.assertTrue(abs(
            activity_member.submission_date - entry.last_awarded_submission) < datetime.timedelta(
            minutes=1))
Esempio n. 30
0
    def testCommitmentAchievement(self):
        """Check that the user's commitment achievements are loaded."""
        commitment = Commitment(
            title="Test commitment",
            description="A commitment!",
            point_value=10,
            type="commitment",
            slug="test-commitment",
        )
        commitment.save()

        # Test that profile page has a pending activity.
        member = ActionMember(user=self.user, action=commitment)
        member.save()
        response = self.client.get(reverse("profile_index"))
        self.assertContains(response,
            reverse("activity_task", args=(commitment.type, commitment.slug,)))
        self.assertContains(response, "In Progress")
        self.assertContains(response, "Commitment:")
        self.assertNotContains(response, "You have nothing in progress or pending.")

        # Test that the profile page has a rejected activity
        member.award_date = datetime.datetime.today()
        member.save()
        response = self.client.get(reverse("profile_index"))
        self.assertContains(response,
            reverse("activity_task", args=(commitment.type, commitment.slug,)))
        self.assertNotContains(response, "You have not been awarded anything yet!")
        self.assertNotContains(response, "In Progress")
Esempio n. 31
0
    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.")
Esempio n. 32
0
    def testCommitmentsNumCompleted(self):
        """Tests that approved_some_of works for a completed commitment."""
        commitment = Commitment(
            title="Test commitment",
            type="commitment",
            slug="test",
            name="Test",
            description="A commitment!",
            point_value=10,
        )
        commitment.save()

        member = ActionMember(user=self.user, action=commitment)
        member.save()
        self.assertFalse(
            approved_some(self.user, count=1),
            "User with commitment in progress should not have completed a task."
        )

        # Test as an unlock condition
        self.quest.unlock_conditions = "approved_some(count=1)"
        self.quest.save()
        self.assertTrue(
            self.quest not in get_quests(self.user),
            "User should not be able to participate in this quest.")

        member.award_date = datetime.datetime.today()
        member.approval_status = "approved"
        member.save()
        self.assertTrue(
            approved_some(self.user, count=1),
            "User that has a completed commitment did not complete a task.")
        self.assertTrue(
            self.quest in get_quests(self.user)["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(count=2)"
        self.quest.save()
        self.assertTrue(self.quest not in possibly_completed_quests(self.user),
                        "User should not be able to complete this quest.")

        self.quest.completion_conditions = "approved_some(count=1)"
        self.quest.save()
        self.assertTrue(self.quest in possibly_completed_quests(self.user),
                        "User should be able to complete this quest.")
Esempio n. 33
0
    def testIndexCommitment(self):
        """Tests that a commitment shows up in public commitments and in the wall."""
        posts = self.team.post_set.count()
        # Create a commitment that will appear on the news page.
        commitment = Commitment(
            type="commitment",
            title="Test commitment",
            slug="test-commitment",
            description="A commitment!",
            point_value=10,
        )
        commitment.save()

        member = ActionMember(action=commitment, user=self.user)
        member.save()

        response = self.client.get(reverse("news_index"))
        self.failUnlessEqual(response.status_code, 200)
        self.assertEqual(posts + 1, self.team.post_set.count(),
            "One post should have been posted to the wall (public commitment).")
        self.assertContains(response, commitment.title, 2,
            msg_prefix="Commitment title should only appear in the wall and the public " \
                       "commitments box."
        )
    def testHasCommitment(self):
        """Tests that has_action works for a commitment in progress."""
        commitment = Commitment(
            title="Test commitment",
            type="commitment",
            name="Test",
            slug="test-commitment",
            description="A commitment!",
            point_value=10,
        )
        commitment.save()

        # Test as an unlock condition.
        self.quest.unlock_conditions = "submitted_action(slug='test-commitment')"
        self.quest.save()
        self.assertTrue(self.quest not in get_quests(self.user),
            "User should not be able to participate in this quest.")

        member = ActionMember(user=self.user, action=commitment)
        member.save()
        self.assertTrue(submitted_action(self.user, slug='test-commitment'),
            "User should have a commitment in progress.")
        self.assertTrue(submitted_some_of(self.user, action_type="commitment"),
            "User should have a commitment in progress.")

        self.assertTrue(self.quest in get_quests(self.user)["available_quests"],
            "User should be able to participate in this quest.")
        self.quest.unlock_conditions = "submitted_some_of(action_type='commitment')"
        self.quest.save()
        self.assertTrue(self.quest in get_quests(self.user)["available_quests"],
            "User should be able to participate in this quest.")

        member.award_date = datetime.datetime.today()
        member.save()
        self.assertTrue(submitted_action(self.user, slug='test-commitment'),
            "User should have a completed commitment.")
        self.assertTrue(submitted_some_of(self.user, action_type="commitment"),
            "User should have a completed commitment.")

        # Test as a completion condition
        self.quest.accept(self.user)
        self.quest.completion_conditions = "not submitted_action(slug='test-commitment')"
        self.quest.save()
        self.assertTrue(self.quest not in possibly_completed_quests(self.user),
            "User should not be able to complete this quest.")

        self.quest.completion_conditions = "not submitted_some_of(action_type='commitment')"
        self.quest.save()
        self.assertTrue(self.quest not in possibly_completed_quests(self.user),
            "User should not be able to complete this quest.")

        self.quest.completion_conditions = "submitted_action(slug='test-commitment')"
        self.quest.save()
        self.assertTrue(self.quest in possibly_completed_quests(self.user),
            "User should be able to complete this quest.")
Esempio n. 35
0
    def testRejectThenApprove(self):
        """Test that Reject then approve a user removes their points."""
        points = self.user.get_profile().points()

        activity_member = ActionMember(user=self.user, action=self.activity,
            submission_date=datetime.datetime.today())

        activity_member.approval_status = "rejected"
        activity_member.save()
        self.assertEqual(len(mail.outbox), 1, "Check that the rejection sent an email.")
        self.assertTrue(activity_member.award_date is None)
        self.assertTrue(self.user.get_profile().last_awarded_submission() is None)

        activity_member.approval_status = "approved"
        activity_member.save()
        new_points = self.user.get_profile().points()

        self.assertEqual(points + activity_member.points_awarded, new_points)
Esempio n. 36
0
    def testPopularCommitments(self):
        """Tests that we can retrieve the most popular commitments."""
        commitment_member = ActionMember(user=self.user, action=self.commitment)
        commitment_member.award_date = datetime.datetime.today()
        commitment_member.approval_status = "approved"
        commitment_member.save()

        commitments = smartgrid.get_popular_actions("commitment", "approved")
        self.assertEqual(commitments[0].title, self.commitment.title)
        self.assertEqual(commitments[0].completions, 1,
            "Most popular commitment should have one completion.")
Esempio n. 37
0
def complete(request, event):
    """complete the event and try to claim point."""

    user = request.user

    if request.method == "POST":
        form = ActivityCodeForm(request.POST, request=request, action=event)

        if form.is_valid():
            # Approve the activity (confirmation code is validated in
            # forms.ActivityTextForm.clean())
            code = ConfirmationCode.objects.get(code=form.cleaned_data["response"].lower())
            code.is_active = False
            code.user = user
            code.save()

            try:
                action_member = ActionMember.objects.get(user=user, action=event)
            except ObjectDoesNotExist:
                action_member = ActionMember(user=user, action=event)

            action_member.approval_status = "approved"
            value = event.point_value

            action_member.social_email = form.cleaned_data["social_email"].lower()
            try:
                action_member.save()
            except IntegrityError:
                messages.error = 'Sorry, but it appears that you have already added this activity.'
                return HttpResponseRedirect(
                    reverse("activity_task", args=(event.type, event.slug,)))

            response = HttpResponseRedirect(
                reverse("activity_task", args=(event.type, event.slug,)))
            if value:
                notification = "You just earned " + str(value) + " points."
                response.set_cookie("task_notify", notification)

            return response

        # invalid form
        # rebuild the form
        form.form_title = "Get your points"
        return render_to_response("task.html", {
            "action": event,
            "form": form,
            "completed_count": 0,
            "team_members": None,
            "display_form": True,
            "reminders": None,
            }, context_instance=RequestContext(request))

    return HttpResponseRedirect(reverse("activity_task", args=(event.type, event.slug,)))
Esempio n. 38
0
    def testRejectThenApprove(self):
        """Test that Reject then approve a user removes their points."""
        points = self.user.get_profile().points()

        activity_member = ActionMember(user=self.user, action=self.activity, submission_date=datetime.datetime.today())

        activity_member.approval_status = "rejected"
        activity_member.save()
        self.assertEqual(len(mail.outbox), 1, "Check that the rejection sent an email.")
        self.assertTrue(activity_member.award_date is None)
        self.assertTrue(self.user.get_profile().last_awarded_submission() is None)

        activity_member.approval_status = "approved"
        activity_member.save()
        new_points = self.user.get_profile().points()

        self.assertEqual(points + activity_member.points_awarded, new_points)
Esempio n. 39
0
    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.")
Esempio n. 40
0
    def testSocialBonusAchievement(self):
        """Check that the social bonus appears in the my achievements list."""
        # Create a second test user.
        user2 = User.objects.create_user("user2", "*****@*****.**")
        event = Event.objects.create(
            title="Test event",
            slug="test-event",
            description="Testing!",
            duration=10,
            point_value=10,
            social_bonus=10,
            pub_date=datetime.datetime.today(),
            expire_date=datetime.datetime.today() + datetime.timedelta(days=7),
            type="event",
            event_date=datetime.datetime.today(),
        )

        # Create membership for the two users.
        m = ActionMember(
            user=self.user,
            action=event,
            approval_status="approved",
        )
        m.social_email = "*****@*****.**"
        m.save()

        m2 = ActionMember(
            user=user2,
            action=event,
            approval_status="approved",
        )
        m2.social_email = "*****@*****.**"
        m2.save()

        response = self.client.get(reverse("profile_index"))
        self.assertContains(response, reverse("activity_task", args=(event.type, event.slug,)))
        entry = "Event: Test event (Social Bonus)"
        self.assertContains(response, entry, count=1,
            msg_prefix="Achievements should contain a social bonus entry")
    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.")
Esempio n. 42
0
    def testRejectionNotifications(self):
        """
        Test that notifications are created by rejections and
        are marked as read when the member changes back to pending.
        """
        notifications = UserNotification.objects.count()
        activity_member = ActionMember(user=self.user, action=self.activity,
            submission_date=datetime.datetime.today())
        activity_member.approval_status = "rejected"
        activity_member.submission_date = datetime.datetime.today()
        activity_member.save()

        self.assertEqual(UserNotification.objects.count(), notifications + 1,
            "New notification should have been created.")
        notice = activity_member.notifications.all()[0]
        self.assertTrue(notice.unread, "Notification should be unread.")
Esempio n. 43
0
 def testAction(self):
     """Tests submitted_action and approved_action predicates."""
     self.assertFalse(submitted_some(self.user, count=1), "Haven't submitted any yet")
     action_member = ActionMember(user=self.user, action=self.activity)
     action_member.save()
     self.assertTrue(submitted_some(self.user, count=1), "Have submitted one.")
     self.assertTrue(submitted_action(self.user, self.activity.slug),
                     "submitted_action should be true")
     self.assertFalse(approved_action(self.user, self.activity.slug),
                      "approved_action should be false")
     self.assertFalse(approved_some(self.user, count=1), "Haven't had it approved yet.")
     action_member.approval_status = 'approved'
     action_member.save()
     self.assertTrue(approved_action(self.user, self.activity.slug),
                     "approved_action should be true")
     self.assertTrue(approved_some(self.user, count=1), "Have had one approved.")
    def testCommitmentsNumCompleted(self):
        """Tests that approved_some_of works for a completed commitment."""
        commitment = Commitment(
            title="Test commitment",
            type="commitment",
            slug="test",
            name="Test",
            description="A commitment!",
            point_value=10,
        )
        commitment.save()

        member = ActionMember(user=self.user, action=commitment)
        member.save()
        self.assertFalse(approved_some_of(self.user, 1),
            "User with commitment in progress should not have completed a task.")

        # Test as an unlock condition
        self.quest.unlock_conditions = "approved_some_of(1)"
        self.quest.save()
        self.assertTrue(self.quest not in get_quests(self.user),
            "User should not be able to participate in this quest.")

        member.award_date = datetime.datetime.today()
        member.approval_status = "approved"
        member.save()
        self.assertTrue(approved_some_of(self.user, 1),
            "User that has a completed commitment did not complete a task.")
        self.assertTrue(self.quest in get_quests(self.user)["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)"
        self.quest.save()
        self.assertTrue(self.quest not in possibly_completed_quests(self.user),
            "User should not be able to complete this quest.")

        self.quest.completion_conditions = "approved_some_of(1)"
        self.quest.save()
        self.assertTrue(self.quest in possibly_completed_quests(self.user),
            "User should be able to complete this quest.")
Esempio n. 45
0
 def testAction(self):
     """Tests submitted_action and approved_action predicates."""
     self.assertFalse(submitted_some(self.user, count=1),
                      "Haven't submitted any yet")
     action_member = ActionMember(user=self.user, action=self.activity)
     action_member.save()
     self.assertTrue(submitted_some(self.user, count=1),
                     "Have submitted one.")
     self.assertTrue(submitted_action(self.user, self.activity.slug),
                     "submitted_action should be true")
     self.assertFalse(approved_action(self.user, self.activity.slug),
                      "approved_action should be false")
     self.assertFalse(approved_some(self.user, count=1),
                      "Haven't had it approved yet.")
     action_member.approval_status = 'approved'
     action_member.save()
     self.assertTrue(approved_action(self.user, self.activity.slug),
                     "approved_action should be true")
     self.assertTrue(approved_some(self.user, count=1),
                     "Have had one approved.")
Esempio n. 46
0
 def testType(self):
     """Tests the predicates related to action_type."""
     self.assertFalse(submitted_some_of_type(self.user, action_type='activity', count=1),
                      "submitted_some_of_type(activity,1) should be false")
     self.assertFalse(submitted_some_of_type(self.user, action_type='commitment', count=1),
                      "submitted_some_of_type(commitment,1) should be false")
     self.assertFalse(submitted_some_of_type(self.user, action_type='event', count=1),
                      "submitted_some_of_type(event,1) should be false")
     self.assertFalse(submitted_all_of_type(self.user, action_type='activity'),
                      "submitted_all_of_type(activity) should be false")
     self.assertFalse(submitted_all_of_type(self.user, action_type='commitment'),
                      "submitted_all_of_type(commitment) should be false")
     self.assertFalse(submitted_all_of_type(self.user, action_type='event'),
                      "submitted_all_of_type(event) should be false")
     action_member_activity = ActionMember(user=self.user, action=self.activity)
     action_member_activity.save()
     self.assertTrue(submitted_some_of_type(self.user, action_type='activity', count=1),
                      "submitted_some_of_type(activity,1) should be true")
     self.assertFalse(submitted_some_of_type(self.user, action_type='commitment', count=1),
                      "submitted_some_of_type(commitment,1) should be false")
     self.assertFalse(submitted_some_of_type(self.user, action_type='event', count=1),
                      "submitted_some_of_type(event,1) should be false")
     self.assertTrue(submitted_all_of_type(self.user, action_type='activity'),
                      "submitted_all_of_type(activity) should be true")
     self.assertFalse(submitted_all_of_type(self.user, action_type='commitment'),
                      "submitted_all_of_type(commitment) should be false")
     self.assertFalse(submitted_all_of_type(self.user, action_type='event'),
                      "submitted_all_of_type(event) should be false")
     self.assertFalse(approved_some_of_type(self.user, action_type='activity', count=1),
                      "approved_some_of_type(activity,1) should be false")
     self.assertFalse(approved_all_of_type(self.user, action_type='activity'),
                      "approved_some_of_type(activity) should be false")
     action_member_activity.approval_status = 'approved'
     action_member_activity.save()
     self.assertTrue(approved_some_of_type(self.user, action_type='activity', count=1),
                      "approved_some_of_type(activity,1) should be true")
     self.assertTrue(approved_all_of_type(self.user, action_type='activity'),
                      "approved_some_of_type(activity) should be true")
     self.assertFalse(approved_some_of_type(self.user, action_type='event', count=1),
                      "approved_some_of_type(event,1) should be false")
     self.assertFalse(approved_all_of_type(self.user, action_type='event'),
                      "approved_some_of_type(event) should be false")
Esempio n. 47
0
    def testIndexMostPopular(self):
        """Test most popular"""
        posts = self.team.post_set.count()
        commitment = Commitment(
            type="commitment",
            title="Test commitment2",
            slug="test-commitment2",
            description="A commitment2!",
            point_value=10,
        )
        commitment.save()

        member = ActionMember(action=commitment, user=self.user)
        member.save()

        member = ActionMember(action=commitment, user=self.user,
                              approval_status="approved",
                              award_date=datetime.datetime.today())
        member.save()

        response = self.client.get(reverse("news_index"))
        self.failUnlessEqual(response.status_code, 200)
        self.assertEqual(posts + 2, self.team.post_set.count(),
            "Two posts should have been posted to the wall (commit and award).")
def add(request, activity):
    """Creates a request for points for an activity."""

    user = request.user

    if request.method == "POST":
        form = _get_form(request, activity)

        if form.is_valid():
            try:
                action_member = ActionMember.objects.get(user=user, action=activity)
            except ObjectDoesNotExist:
                action_member = ActionMember(user=user, action=activity,
                                             submission_date=datetime.datetime.today())

            # Attach image if it is an image form.
            if "image_response" in form.cleaned_data:
                if activity.confirm_type == "free_image":
                    action_member.response = form.cleaned_data["response"]

                path = activity_image_file_path(user=user,
                    filename=request.FILES['image_response'].name)
                action_member.image = path

                action_member.image.storage.save(path, request.FILES["image_response"])

                action_member.approval_status = "pending"
            # Attach text prompt question if one is provided
            elif "question" in form.cleaned_data:
                action_member.question = LibraryTextPromptQuestion.objects.get(
                    pk=form.cleaned_data["question"])
                action_member.response = form.cleaned_data["response"]
                action_member.approval_status = "pending"

            elif activity.confirm_type == "free":
                action_member.response = form.cleaned_data["response"]
                action_member.approval_status = "pending"

            action_member.social_email = form.cleaned_data["social_email"].lower()
            try:
                action_member.save()
            except IntegrityError:
                messages.error = 'Sorry, but it appears that you have already added this activity.'
                return HttpResponseRedirect(
                    reverse("activity_task", args=(activity.type, activity.slug,)))

            response = HttpResponseRedirect(
                reverse("activity_task", args=(activity.type, activity.slug,)))

            return response

        # invalid form
        # rebuild the form
        form.form_title = "Get your points"
        if activity.confirm_type == "text":
            qid = form.data["question"]
            question = LibraryTextPromptQuestion.objects.get(pk=qid)
            form.action_question = question
        return render_to_response("task.html", {
            "action": activity,
            "form": form,
            "completed_count": 0,
            "team_members": None,
            "display_form": True,
            "reminders": None,
            }, context_instance=RequestContext(request))

    return HttpResponseRedirect(reverse("activity_task", args=(activity.type, activity.slug,)))
Esempio n. 49
0
def add(request, commitment):
    """Commit the current user to the commitment."""
    user = request.user
    value = None

    if request.method == "GET":  # redirect to task page, only allow POST
        return  HttpResponseRedirect(
            reverse("activity_task", args=(commitment.type, commitment.slug,)))

    form = CommitmentCommentForm(request.POST, user=request.user.username)
    if not form.is_valid():
        # invalid form
        request.session["form_dict"] = form.data
        request.session["form_errors"] = form.errors

        return HttpResponseRedirect(
            reverse("activity_task",
                    args=(commitment.type, commitment.slug,)) + "?display_form=True")

    # now we have a valid form
    if smartgrid.can_complete_commitment(user, commitment):
        try:
            member = user.actionmember_set.get(action=commitment, award_date=None)
        except ObjectDoesNotExist:
            # ignore the race condition
            return HttpResponseRedirect(
                reverse("activity_task", args=(commitment.type, commitment.slug,)))

        #commitment end, award full point
        member.award_date = datetime.datetime.today()
        member.approval_status = "approved"

        if form.cleaned_data["social_email"]:
            member.social_email = form.cleaned_data["social_email"].lower()
        member.save()
        value = commitment.point_value

    elif smartgrid.can_add_commitment(user):
        # User can commit to this commitment. allow to commit to completed commitment again
        # as long as the pending does not reach max
        member = ActionMember(user=user, action=commitment)

        if form:
            member.social_email = form.cleaned_data["social_email"].lower()

        try:
            member.save()
            value = score_mgr.signup_points()

        except IntegrityError:
            messages.error = 'Sorry, but it appears that you are already participating in ' \
                             'this commitment.'
            return HttpResponseRedirect(
                reverse("activity_task", args=(commitment.type, commitment.slug,)))

    else:  # user can not add more than 5 commitment
        return  HttpResponseRedirect(
            reverse("activity_task", args=(commitment.type, commitment.slug,)))

    response = HttpResponseRedirect(
        reverse("activity_task", args=(commitment.type, commitment.slug,)))
    notification = "You just earned " + str(value) + " points."
    response.set_cookie("task_notify", notification)
    return response
Esempio n. 50
0
def attend_code(request):
    """Claim the attendance code or the Bonus Points code"""

    user = request.user
    action_member = None
    message = None
    social_email = None

    if request.is_ajax() and request.method == "POST":
        form = EventCodeForm(request.POST)
        if form.is_valid():
            message, social_email, code, is_bonus = _check_attend_code(user, form)

            if message:
                return HttpResponse(json.dumps({
                    "message": message,
                    "social_email": social_email
                }), mimetype="application/json")

            if not is_bonus:  # It was an event code.
                try:
                    action_member = ActionMember.objects.get(user=user, action=code.action)
                except ObjectDoesNotExist:
                    action_member = ActionMember(user=user, action=code.action)

                action_member.approval_status = "approved"
                value = code.action.point_value

                if "social_email" in form.cleaned_data and \
                    form.cleaned_data["social_email"] != "Email":
                    action_member.social_email = form.cleaned_data["social_email"].lower()

                # Model save method will award the points.
                action_member.save()
            else:  # It was a bonus point code.
                profile = user.get_profile()
                value = code.point_value
                s = "Bonus Points: claimed {0} points".format(value)
                profile.add_points(value,
                                   datetime.datetime.today(),
                                   s)
                code.claim_date = datetime.datetime.now()

            code.is_active = False
            code.user = user
            code.save()

            notification = "You just earned " + str(value) + " points."
            if not is_bonus:
                response = HttpResponse(json.dumps({
                            "redirectUrl": reverse("activity_task",
                                                   args=(code.action.type, code.action.slug))
                            }), mimetype="application/json")
                response.set_cookie("task_notify", notification)
            else:
                response = HttpResponse(json.dumps({
                            "redirectUrl": reverse("learn_index")}),
                                        mimetype="application/json")
                response.set_cookie("bonus_notify", notification)
                UserNotification.create_info_notification(user, s)
            return response

        # At this point there is a form validation error.
        return HttpResponse(json.dumps({
            "message": "Please input code."
        }), mimetype="application/json")

    raise Http404
Esempio n. 51
0
 def testFullSpectrum(self):
     """Tests the predicates related to full spectrum."""
     self.assertFalse(submitted_some_full_spectrum(self.user, count=1),
                      "submitted_some_full_spectrum(1) should be false")
     self.assertFalse(approved_some_full_spectrum(self.user, count=1),
                      "approved_some_full_spectrum(1) should be false")
     action_member_activity = ActionMember(user=self.user,
                                           action=self.activity)
     action_member_activity.save()
     self.assertFalse(submitted_some_full_spectrum(self.user, count=1),
                      "submitted_some_full_spectrum(1) should be false")
     self.assertFalse(approved_some_full_spectrum(self.user, count=1),
                      "approved_some_full_spectrum(1) should be false")
     action_member_commitment = ActionMember(user=self.user,
                                             action=self.commitment)
     action_member_commitment.save()
     action_member_event = ActionMember(user=self.user, action=self.event)
     action_member_event.save()
     self.assertTrue(submitted_some_full_spectrum(self.user, count=1),
                     "submitted_some_full_spectrum(1) should be true")
     self.assertFalse(approved_some_full_spectrum(self.user, count=1),
                      "approved_some_full_spectrum(1) should be false")
     action_member_activity.approval_status = 'approved'
     action_member_activity.save()
     self.assertFalse(approved_some_full_spectrum(self.user, count=1),
                      "approved_some_full_spectrum(1) should be false")
     action_member_commitment.approval_status = 'approved'
     action_member_commitment.save()
     action_member_event.approval_status = 'approved'
     action_member_event.save()
     self.assertTrue(approved_some_full_spectrum(self.user, count=1),
                     "approved_some_full_spectrum(1) should be true")
Esempio n. 52
0
 def testType(self):
     """Tests the predicates related to action_type."""
     self.assertFalse(
         submitted_some_of_type(self.user, action_type='activity', count=1),
         "submitted_some_of_type(activity,1) should be false")
     self.assertFalse(
         submitted_some_of_type(self.user,
                                action_type='commitment',
                                count=1),
         "submitted_some_of_type(commitment,1) should be false")
     self.assertFalse(
         submitted_some_of_type(self.user, action_type='event', count=1),
         "submitted_some_of_type(event,1) should be false")
     self.assertFalse(
         submitted_all_of_type(self.user, action_type='activity'),
         "submitted_all_of_type(activity) should be false")
     self.assertFalse(
         submitted_all_of_type(self.user, action_type='commitment'),
         "submitted_all_of_type(commitment) should be false")
     self.assertFalse(submitted_all_of_type(self.user, action_type='event'),
                      "submitted_all_of_type(event) should be false")
     action_member_activity = ActionMember(user=self.user,
                                           action=self.activity)
     action_member_activity.save()
     self.assertTrue(
         submitted_some_of_type(self.user, action_type='activity', count=1),
         "submitted_some_of_type(activity,1) should be true")
     self.assertFalse(
         submitted_some_of_type(self.user,
                                action_type='commitment',
                                count=1),
         "submitted_some_of_type(commitment,1) should be false")
     self.assertFalse(
         submitted_some_of_type(self.user, action_type='event', count=1),
         "submitted_some_of_type(event,1) should be false")
     self.assertTrue(
         submitted_all_of_type(self.user, action_type='activity'),
         "submitted_all_of_type(activity) should be true")
     self.assertFalse(
         submitted_all_of_type(self.user, action_type='commitment'),
         "submitted_all_of_type(commitment) should be false")
     self.assertFalse(submitted_all_of_type(self.user, action_type='event'),
                      "submitted_all_of_type(event) should be false")
     self.assertFalse(
         approved_some_of_type(self.user, action_type='activity', count=1),
         "approved_some_of_type(activity,1) should be false")
     self.assertFalse(
         approved_all_of_type(self.user, action_type='activity'),
         "approved_some_of_type(activity) should be false")
     action_member_activity.approval_status = 'approved'
     action_member_activity.save()
     self.assertTrue(
         approved_some_of_type(self.user, action_type='activity', count=1),
         "approved_some_of_type(activity,1) should be true")
     self.assertTrue(
         approved_all_of_type(self.user, action_type='activity'),
         "approved_some_of_type(activity) should be true")
     self.assertFalse(
         approved_some_of_type(self.user, action_type='event', count=1),
         "approved_some_of_type(event,1) should be false")
     self.assertFalse(approved_all_of_type(self.user, action_type='event'),
                      "approved_some_of_type(event) should be false")
Esempio n. 53
0
 def testLevel(self):
     """Tests the level based predicates."""
     level_name = "Level Foo"
     level = Level(name=level_name, slug='level-slug', priority=1)
     level.save()
     loc = Grid(level=level, column=1, row=1, action=self.activity)
     loc.save()
     loc = Grid(level=level, column=2, row=1, action=self.commitment)
     loc.save()
     loc = Grid(level=level, column=3, row=1, action=self.event)
     loc.save()
     self.assertFalse(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=1),
         "submitted_some_of_level should be false")
     self.assertFalse(
         approved_some_of_level(user=self.user,
                                level_name=level_name,
                                count=1),
         "approved_some_of_level(1) should be false")
     self.assertFalse(
         submitted_all_of_level(user=self.user, level_name=level_name),
         "submitted_all_of_level should be false")
     action_member_activity = ActionMember(user=self.user,
                                           action=self.activity)
     action_member_activity.save()
     self.assertTrue(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=1),
         "submitted_some_of_level(1) should be true")
     self.assertFalse(
         approved_some_of_level(user=self.user,
                                level_name=level_name,
                                count=1),
         "approved_some_of_level(1) should be false")
     self.assertFalse(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=2),
         "submitted_some_of_level(2) should be false")
     self.assertFalse(
         submitted_all_of_level(user=self.user, level_name=level_name),
         "submitted_all_of_level should be false")
     action_member_commitment = ActionMember(user=self.user,
                                             action=self.commitment)
     action_member_commitment.save()
     self.assertTrue(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=1),
         "submitted_some_of_level(1) should be true")
     self.assertTrue(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=2),
         "submitted_some_of_level(2) should be true")
     self.assertFalse(
         approved_some_of_level(user=self.user,
                                level_name=level_name,
                                count=1),
         "approved_some_of_level(1) should be false")
     self.assertFalse(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=3),
         "submitted_some_of_level(3) should be false")
     self.assertFalse(
         submitted_all_of_level(user=self.user, level_name=level_name),
         "submitted_all_of_level should be false")
     action_member_event = ActionMember(user=self.user, action=self.event)
     action_member_event.save()
     self.assertTrue(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=1),
         "submitted_some_of_level(1) should be true")
     self.assertTrue(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=2),
         "submitted_some_of_level(2) should be true")
     self.assertTrue(
         submitted_some_of_level(user=self.user,
                                 level_name=level_name,
                                 count=3),
         "submitted_some_of_level(3) should be true")
     self.assertTrue(
         submitted_all_of_level(user=self.user, level_name=level_name),
         "submitted_all_of_level should be true")
     self.assertFalse(
         approved_some_of_level(user=self.user,
                                level_name=level_name,
                                count=1),
         "approved_some_of_level(1) should be false")
     action_member_activity.approval_status = 'approved'
     action_member_activity.save()
     self.assertTrue(
         approved_some_of_level(user=self.user,
                                level_name=level_name,
                                count=1),
         "approved_some_of_level(1) should be true")
     self.assertFalse(
         approved_all_of_level(user=self.user, level_name=level_name),
         "approved_all_of_level should be false")
     action_member_commitment.approval_status = 'approved'
     action_member_commitment.save()
     action_member_event.approval_status = 'approved'
     action_member_event.save()
     self.assertTrue(
         approved_some_of_level(user=self.user,
                                level_name=level_name,
                                count=3),
         "approved_some_of_level(3) should be true")
     self.assertTrue(
         approved_all_of_level(user=self.user, level_name=level_name),
         "approved_all_of_level should be true")
Esempio n. 54
0
def add(request, commitment):
    """Commit the current user to the commitment."""
    user = request.user
    value = None

    if request.method == "GET":  # redirect to task page, only allow POST
        return HttpResponseRedirect(
            reverse("activity_task", args=(
                commitment.type,
                commitment.slug,
            )))

    form = CommitmentCommentForm(request.POST, user=request.user.username)
    if not form.is_valid():
        # invalid form
        request.session["form_dict"] = form.data
        request.session["form_errors"] = form.errors

        return HttpResponseRedirect(
            reverse("activity_task", args=(
                commitment.type,
                commitment.slug,
            )) + "?display_form=True")

    # now we have a valid form
    if smartgrid.can_complete_commitment(user, commitment):
        try:
            member = user.actionmember_set.get(action=commitment,
                                               award_date=None)
        except ObjectDoesNotExist:
            # ignore the race condition
            return HttpResponseRedirect(
                reverse("activity_task",
                        args=(
                            commitment.type,
                            commitment.slug,
                        )))

        #commitment end, award full point
        member.award_date = datetime.datetime.today()
        member.approval_status = "approved"

        if form.cleaned_data["social_email"]:
            member.social_email = form.cleaned_data["social_email"].lower()
        member.save()
        value = commitment.point_value

    elif smartgrid.can_add_commitment(user):
        # User can commit to this commitment. allow to commit to completed commitment again
        # as long as the pending does not reach max
        member = ActionMember(user=user, action=commitment)

        if form:
            member.social_email = form.cleaned_data["social_email"].lower()

        try:
            member.save()
            value = score_mgr.signup_points()

        except IntegrityError:
            messages.error = 'Sorry, but it appears that you are already participating in ' \
                             'this commitment.'
            return HttpResponseRedirect(
                reverse("activity_task",
                        args=(
                            commitment.type,
                            commitment.slug,
                        )))

    else:  # user can not add more than 5 commitment
        return HttpResponseRedirect(
            reverse("activity_task", args=(
                commitment.type,
                commitment.slug,
            )))

    response = HttpResponseRedirect(
        reverse("activity_task", args=(
            commitment.type,
            commitment.slug,
        )))
    notification = "You just earned " + str(value) + " points."
    response.set_cookie("task_notify", notification)
    return response
Esempio n. 55
0
    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.")
    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.")
Esempio n. 57
0
    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.")