示例#1
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)."
        )
示例#2
0
    def testAddCommitment(self):
        """
        Test that the user can add a commitment.
        """
        commitment = Commitment(
            title="Test commitment",
            slug="test-commitment",
            description="A commitment!",
            point_value=10,
            type="commitment",
        )
        commitment.save()

        response = self.client.post(reverse("activity_add_task",
                                            args=(
                                                commitment.type,
                                                commitment.slug,
                                            )),
                                    follow=True)
        self.failUnlessEqual(response.status_code, 200)

        points = Profile.objects.get(user=self.user).points
        response = self.client.post(reverse("activity_add_task",
                                            args=(
                                                commitment.type,
                                                commitment.slug,
                                            )),
                                    follow=True)
        self.failUnlessEqual(response.status_code, 200)

        self.assertEqual(points, Profile.objects.get(user=self.user).points)
示例#3
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")
示例#4
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")
示例#5
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."
        )
示例#6
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.")
    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.")
示例#8
0
def instantiate_smartgrid_action_from_designer(draft, slug):
    """Creates a Smart Grid instance from the designer instance."""
    des_action = get_designer_action(draft, slug)
    action_type = des_action.type
    old_obj = None
    try:
        old_obj = get_smartgrid_action(slug)
    except Http404:
        old_obj = None
    grid_action = None
    if old_obj == None:
        if action_type == 'activity':
            grid_action = Activity()
        if action_type == 'commitment':
            grid_action = Commitment()
        if action_type == 'event':
            grid_action = Event()
        if action_type == 'filler':
            grid_action = Filler()
    else:
        grid_action = old_obj
    _copy_fields_no_foriegn_keys(des_action, grid_action)
    grid_action.save()

    # Copy all the DesignerTextPropmtQuestions
    for question in DesignerTextPromptQuestion.objects.filter(draft=draft, action=des_action):
        old_ques = TextPromptQuestion.objects.filter(action=grid_action, \
                                                     question=question.question, \
                                                     answer=question.answer)
        if len(old_ques) == 0:
            tqp = TextPromptQuestion(action=grid_action, question=question.question, \
                                     answer=question.answer)
            tqp.save()

    return grid_action
示例#9
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.")
示例#10
0
    def setUp(self):
        """Create test user and commitment. Set the competition settings to the current
        date for testing."""
        self.user = User(username="******", password="******")
        self.user.save()
        self.commitment = Commitment(
            title="Test commitment",
            name="Test",
            slug="test",
            description="A commitment!",
            point_value=10,
            type="commitment",
        )
        self.commitment.save()

        self.current_round = "Round 1"
        test_utils.set_competition_round()
    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.")
示例#12
0
    def testAddCommitment(self):
        """
        Test that the user can add a commitment.
        """
        commitment = Commitment(
            title="Test commitment",
            slug="test-commitment",
            description="A commitment!",
            point_value=10,
            type="commitment",
        )
        commitment.save()

        response = self.client.post(
            reverse("activity_add_task", args=(commitment.type, commitment.slug,)), follow=True)
        self.failUnlessEqual(response.status_code, 200)

        points = Profile.objects.get(user=self.user).points
        response = self.client.post(
            reverse("activity_add_task", args=(commitment.type, commitment.slug,)), follow=True)
        self.failUnlessEqual(response.status_code, 200)

        self.assertEqual(points, Profile.objects.get(user=self.user).points)
示例#13
0
文件: tests.py 项目: csdl/makahiki
    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).")
示例#14
0
文件: tests.py 项目: csdl/makahiki
    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."
        )
示例#15
0
    def setUp(self):
        """Create test user and commitment. Set the competition settings to the current
        date for testing."""
        self.user = User(username="******", password="******")
        self.user.save()
        self.commitment = Commitment(
            title="Test commitment",
            name="Test",
            slug="test",
            description="A commitment!",
            point_value=10,
            type="commitment",
        )
        self.commitment.save()

        self.current_round = "Round 1"
        test_utils.set_competition_round()
示例#16
0
class CommitmentsUnitTestCase(TransactionTestCase):
    """Commitment Test."""
    def setUp(self):
        """Create test user and commitment. Set the competition settings to the current
        date for testing."""
        self.user = User(username="******", password="******")
        self.user.save()
        self.commitment = Commitment(
            title="Test commitment",
            name="Test",
            slug="test",
            description="A commitment!",
            point_value=10,
            type="commitment",
        )
        self.commitment.save()

        self.current_round = "Round 1"
        test_utils.set_competition_round()

    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.")

    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))

    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)
示例#17
0
class CommitmentsUnitTestCase(TransactionTestCase):
    """Commitment Test."""
    def setUp(self):
        """Create test user and commitment. Set the competition settings to the current
        date for testing."""
        self.user = User(username="******", password="******")
        self.user.save()
        self.commitment = Commitment(
            title="Test commitment",
            name="Test",
            slug="test",
            description="A commitment!",
            point_value=10,
            type="commitment",
        )
        self.commitment.save()

        self.current_round = "Round 1"
        test_utils.set_competition_round()

    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.")

    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))

    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)