예제 #1
0
    def testGetQuests(self):
        """Tests that we can get the quests for a user."""
        # Create some sample quests.
        self.assertEqual(len(get_quests(self.user)["available_quests"]), 0,
                         "There are no quests for the user.")
        for i in range(0, 3):
            quest_name = "Test Quest %d" % i
            quest = Quest(
                name=quest_name,
                quest_slug="test_quest_%d" % i,
                description=quest_name,
                level=1,
                unlock_conditions="True",
                completion_conditions="False"  # User cannot complete these.
            )
            quest.save()

        quests = get_quests(self.user)
        self.assertEqual(len(quests["available_quests"]), 3,
                         "User should have 3 quests available.")

        # Test that if we add another quest, the user still has the 3 original quests.
        quest = Quest(
            name="Another quest",
            quest_slug="another_quest",
            description="another quest",
            level=1,
            unlock_conditions="True",
            completion_conditions="False",
        )
        quest.save()

        quests = get_quests(self.user)
        self.assertEqual(len(quests["available_quests"]), 3,
                         "User should still have 3 quests available.")
        self.assertTrue(quest not in quests,
                        "New quest should not be in quests.")

        # Mark a quest as completed so that the new quest is picked up.
        quests["available_quests"][0].accept(self.user)
        member = QuestMember.objects.filter(user=self.user)[0]
        member.completed = True
        member.save()

        quests = get_quests(self.user)
        self.assertEqual(len(quests["available_quests"]), 3,
                         "User should have 3 quests available.")
        self.assertTrue(quest in quests["available_quests"],
                        "New quest should be in quests.")
예제 #2
0
 def testCancelQuest(self):
   """Test that a user can cancel their participation in a quest."""
   quest = Quest(
       name="Test quest",
       quest_slug="test_quest",
       description="test quest",
       level=1,
       unlock_conditions="True",
       completion_conditions="False",
   )
   quest.save()
   
   response = self.client.post(
       reverse("quests_accept", args=(quest.quest_slug,)), 
       follow=True,
       HTTP_REFERER=reverse("home_index"),
   )
   self.assertTrue(quest in response.context["QUESTS"]["user_quests"], "User should be participating in the test quest.")
   response = self.client.post(
       reverse("quests_cancel", args=(quest.quest_slug,)), 
       follow=True,
       HTTP_REFERER=reverse("home_index"),
   )
   self.assertRedirects(response, reverse("home_index"))
   self.assertTrue(quest not in response.context["QUESTS"]["user_quests"], "Test quest should not be in user's quests.")
   self.assertTrue(quest in response.context["QUESTS"]["available_quests"], "Test quest should be in available quests.")
예제 #3
0
 def testQuestCompletion(self):
   """Test that a user gets a dialog box when they complete a quest."""
   quest = Quest(
       name="Test quest",
       quest_slug="test_quest",
       description="test quest",
       level=1,
       unlock_conditions="True",
       completion_conditions="True",
   )
   quest.save()
   
   response = self.client.get(reverse("home_index"))
   self.assertEqual(len(response.context["NOTIFICATIONS"]["alerts"]), 
       0, "User should not have any completed quests.")
   
   response = self.client.post(
       reverse("quests_accept", args=(quest.quest_slug,)), 
       follow=True,
       HTTP_REFERER=reverse("home_index"),
   )
   self.assertRedirects(response, reverse("home_index"))
   self.assertFalse(quest in response.context["QUESTS"]["user_quests"], 
       "Quest should not be loaded as a user quest.")
   message = "Congratulations! You completed the '%s' quest." % quest.name
   self.assertContains(response, message, msg_prefix="Quest completion message should be shown.")
   self.assertContains(response, "notification-dialog", msg_prefix="Notification dialog should be shown.")
예제 #4
0
    def testOptOut(self):
        """Test that once a user opts out of a quest, it doesn't show up."""
        quest = Quest(
            name="Another quest",
            quest_slug="another_quest",
            description="another quest",
            level=1,
            unlock_conditions="False",  # User cannot unlock this quest
            completion_conditions="False",
        )
        quest.save()

        self.assertFalse(quest.opt_out(self.user),
                         "User should not be able to see this quest.")

        quest.unlock_conditions = "True"
        quest.save()
        self.assertTrue(quest.opt_out(self.user),
                        "User should be able to opt out of this quest.")

        quests = get_quests(self.user)
        self.assertTrue(quest not in quests["available_quests"],
                        "User should not see the quest as available.")
        self.assertTrue(
            quest not in quests["user_quests"],
            "User should not have this listed as their current quest.")
예제 #5
0
 def setUp(self):
   self.user = User(username="******", password="******")
   self.user.save()
   
   self.quest = Quest(
       name="Test quest",
       quest_slug="test_quest",
       description="test quest",
       level=1,
       unlock_conditions="True",
       completion_conditions="False",
   )
   self.quest.save()
예제 #6
0
 def testGetQuests(self):
   """Test that quests show up in the interface."""
   quest = Quest(
       name="Test quest",
       quest_slug="test_quest",
       description="test quest",
       level=1,
       unlock_conditions="False",
       completion_conditions="False",
   )
   quest.save()
   
   response = self.client.get(reverse("home_index"))
   self.failUnlessEqual(response.status_code, 200)
   self.assertNotContains(response, "Test quest", msg_prefix="Test quest should not be available to the user.")
   
   quest.unlock_conditions = "True"
   quest.save()
   response = self.client.get(reverse("home_index"))
   self.assertContains(response, "Test quest", msg_prefix="Test quest should be available to the user.")
예제 #7
0
    def testBasicPrerequisites(self):
        """Tests that the user can only get quests for which they meet the prerequisites."""
        quest = Quest(
            name="Test quest",
            quest_slug="test_quest",
            description="test quest",
            level=1,
            unlock_conditions="False",
            completion_conditions="False",
        )
        quest.save()

        quests = get_quests(self.user)
        self.assertEqual(len(quests["available_quests"]), 0,
                         "User should not have this quest available.")

        quest.unlock_conditions = "True"
        quest.save()
        quests = get_quests(self.user)
        self.assertEqual(len(quests["available_quests"]), 1,
                         "User should now have one quest.")
예제 #8
0
 def testOptOutOfQuest(self):
   """Test that a user can opt out of the quest."""
   quest = Quest(
       name="Test quest",
       quest_slug="test_quest",
       description="test quest",
       level=1,
       unlock_conditions="True",
       completion_conditions="True",
   )
   quest.save()
   
   response = self.client.get(reverse("home_index"))
   self.assertContains(response, "Test quest", msg_prefix="Test quest should be available to the user.")
   response = self.client.post(
       reverse("quests_opt_out", args=(quest.quest_slug,)), 
       follow=True,
       HTTP_REFERER=reverse("home_index"),
   )
   self.assertRedirects(response, reverse("home_index"))
   self.assertNotContains(response, "Test quest", msg_prefix="Test quest should not be shown.")
   self.assertFalse(response.context["QUESTS"].has_key("completed"), "There should not be any completed quests.")
예제 #9
0
 def testAcceptQuest(self):
   """Test that a user can accept a quest using a url."""
   quest = Quest(
       name="Test quest",
       quest_slug="test_quest",
       description="test quest",
       level=1,
       unlock_conditions="True",
       completion_conditions="False",
   )
   quest.save()
   
   response = self.client.get(reverse("home_index"))
   self.assertContains(response, "Test quest", msg_prefix="Test quest should be available to the user.")
   response = self.client.post(
       reverse("quests_accept", args=(quest.quest_slug,)), 
       follow=True,
       HTTP_REFERER=reverse("home_index"),
   )
   self.assertRedirects(response, reverse("home_index"))
   quests = get_quests(self.user)
   self.assertEqual(len(quests["user_quests"]), 1, "User should have one quest.")
예제 #10
0
파일: tests.py 프로젝트: ilwoof/makahiki
 def testQuestAchievement(self):
   quest = Quest(
       name="Test quest",
       quest_slug="test_quest",
       description="test quest",
       level=1,
       unlock_conditions="True",
       completion_conditions="True",
   )
   quest.save()
   
   # Accept the quest, which should be automatically completed.
   response = self.client.post(
       reverse("quests_accept", args=(quest.quest_slug,)), 
       follow=True,
       HTTP_REFERER=reverse("home_index"),
   )
   response = self.client.get(reverse("profile_index"))
   self.assertContains(response, "Quest: Test quest", count=1, 
       msg_prefix="Achievements should contain a social bonus entry")
   
   
예제 #11
0
    def testAccept(self):
        """Test that the user can accept quests."""
        quest = Quest(
            name="Another quest",
            quest_slug="another_quest",
            description="another quest",
            level=1,
            unlock_conditions="False",  # User cannot unlock this quest
            completion_conditions="False",
        )
        quest.save()

        self.assertFalse(quest.accept(self.user),
                         "User should not be able to accept this quest.")
        self.assertEqual(self.user.quest_set.count(), 0,
                         "User should not have any quests.")

        quest.unlock_conditions = "True"
        quest.save()
        self.assertTrue(quest.accept(self.user),
                        "User should be able to accept this quest.")
        self.assertEqual(self.user.quest_set.count(), 1,
                         "User should have an accepted quest.")
예제 #12
0
    def testCommentsAreIgnored(self):
        """Tests that any comments in the text are ignored."""
        quest = Quest(
            name="Test quest",
            quest_slug="test_quest",
            description="test quest",
            level=1,
            unlock_conditions="#Hello World\nTrue",
            completion_conditions="#Hello World\nTrue",
        )
        quest.save()

        quests = get_quests(self.user)
        self.assertEqual(len(quests["available_quests"]), 1,
                         "User should now have one quest.")

        quests["available_quests"][0].accept(self.user)

        possibly_completed_quests(self.user)
        complete_quests = self.user.quest_set.filter(
            questmember__completed=True)
        self.assertTrue(quest in complete_quests,
                        "Quest should be in the user's complete quests list.")
예제 #13
0
    def testBasicCompletion(self):
        """Tests that the user can complete quests."""
        quest = Quest(
            name="Test quest",
            quest_slug="test_quest",
            description="test quest",
            level=1,
            unlock_conditions="True",
            completion_conditions="False",
        )
        quest.save()

        quests = get_quests(self.user)
        self.assertEqual(len(quests["available_quests"]), 1,
                         "User should have one quest.")

        quests["available_quests"][0].accept(self.user)

        possibly_completed_quests(self.user)
        complete_quests = self.user.quest_set.filter(
            questmember__completed=True)
        self.assertTrue(quest not in complete_quests,
                        "Quest should not be completed.")

        quest.completion_conditions = True
        quest.save()
        possibly_completed_quests(self.user)
        complete_quests = self.user.quest_set.filter(
            questmember__completed=True)
        self.assertTrue(quest in complete_quests,
                        "Quest should be in the user's complete quests list.")

        quests = get_quests(self.user)
        self.assertTrue(quest not in quests["available_quests"],
                        "Quest should not be available after completion.")
        self.assertTrue(quest not in quests["user_quests"],
                        "Quest should not be in the user's active quests.")