Esempio n. 1
0
    def test_add_card(self):
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "What is it?"
        card_answer = "This is that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # There is no card shown on deck page.
        deck = Deck.objects.all()[0]
        r = self.client.get("/deck/%s/show/" % deck.id)
        self.assertNotIn(card_question, r.content)
        self.assertNotIn(card_answer, r.content)

        # There are now no cards in database.
        self.assertEqual(len(Card.objects.all()), 0)

        # Add new card.
        r = add_card(self.client, deck.id, card_question, card_answer)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # There is now one card in database.
        self.assertEqual(len(Card.objects.all()), 1)

        # Card is also shown on deck page.
        r = self.client.get("/deck/%s/show/" % deck.id)
        self.assertIn(card_question, r.content)
        self.assertIn(card_answer, r.content)
Esempio n. 2
0
    def test_start_shelf(self):
        shelf_name = "Some nice shelf"

        # Shelf is not shown on user shelf list and on all shelves list.
        r = self.client.get("/")
        self.assertNotIn(shelf_name, r.content)
        r = self.client.get("/shelf/list/")
        self.assertNotIn(shelf_name, r.content)

        add_shelf(self.client, shelf_name)

        # Shelf is now shown on all shelves list but
        # user still didn't take this shelf.
        r = self.client.get("/")
        self.assertNotIn(shelf_name, r.content)
        r = self.client.get("/shelf/list/")
        self.assertIn(shelf_name, r.content)

        # Start shelf.
        shelf = Shelf.objects.all()[0]
        r = self.client.get("/user/shelf/%s/start/" % shelf.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # Now this shelf is shown on user list and on all shelves list.
        r = self.client.get("/")
        self.assertIn(shelf_name, r.content)
        r = self.client.get("/shelf/list/")
        self.assertIn(shelf_name, r.content)
Esempio n. 3
0
    def test_delete_deck(self):
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        r = add_deck(self.client, shelf.id, deck_name)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # There is now one deck in database.
        self.assertEqual(len(Deck.objects.all()), 1)

        # The deck is shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertIn(deck_name, r.content)

        # Delete deck.
        deck = Deck.objects.all()[0]
        r = self.client.get("/deck/%s/delete/" % deck.id)

        # The deck is now not shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertNotIn(deck_name, r.content)

        # There are now no decks in database.
        self.assertEqual(len(Deck.objects.all()), 0)
Esempio n. 4
0
    def test_delete_deck(self):
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        r = add_deck(self.client, shelf.id, deck_name)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # There is now one deck in database.
        self.assertEqual(len(Deck.objects.all()), 1)

        # The deck is shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertIn(deck_name, r.content)

        # Delete deck.
        deck = Deck.objects.all()[0]
        r = self.client.get("/deck/%s/delete/" % deck.id)

        # The deck is now not shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertNotIn(deck_name, r.content)

        # There are now no decks in database.
        self.assertEqual(len(Deck.objects.all()), 0)
Esempio n. 5
0
    def test_delete_decks_and_check_order(self):
        shelf_name = "Some nice shelf"
        first_deck_name = "First deck"
        second_deck_name = "Second deck"
        third_deck_name = "Third deck"

        add_shelf(self.client, shelf_name)

        # Add decks.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, first_deck_name)
        add_deck(self.client, shelf.id, second_deck_name)
        add_deck(self.client, shelf.id, third_deck_name)

        all_decks = Deck.objects.all()

        self.assertEqual(len(all_decks), 3)

        # Delete deck in the middle.
        self.client.get("/deck/%d/delete/" % all_decks[1].id)

        all_decks = Deck.objects.all()

        # Order of last deck (third deck) was decreased in order
        # to achieve continuity.
        self.assertEqual(len(all_decks), 2)
        self.assertEqual(all_decks[0].order, 0)
        self.assertEqual(all_decks[0].name, first_deck_name)
        self.assertEqual(all_decks[1].order, 1)
        self.assertEqual(all_decks[1].name, third_deck_name)
Esempio n. 6
0
    def test_edit_deck(self):
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        new_deck_name = "New deck name"

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # There is one deck in database.
        self.assertEqual(len(Deck.objects.all()), 1)

        # Deck is shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertIn(deck_name, r.content)

        # Edit deck.
        deck = Deck.objects.all()[0]
        remember_deck_id = deck.id
        r = self.client.post("/deck/%s/edit/" % deck.id,
                             {"name": new_deck_name})
        deck = Deck.objects.all()[0]

        # Id of edited deck has not changed.
        self.assertEqual(remember_deck_id, deck.id)

        # Edited deck is shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertNotIn(deck_name, r.content)
        self.assertIn(new_deck_name, r.content)

        # The number of decks is still one in database.
        self.assertEqual(len(Deck.objects.all()), 1)
Esempio n. 7
0
    def test_count_cards_of_deck_tests(self):
        """User can see on deck page how many cards
        are placed in specific deck."""
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "Is?"
        card_answer = "Yes"

        # Add shelf, deck and card.
        add_shelf(self.client, shelf_name)
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)
        deck = Deck.objects.all()[0]

        # There are no cards in deck yet.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertIn("(0)", r.content)

        # Now there card is added.
        add_card(self.client, deck.id, card_question, card_answer)

        # There is one card in deck.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertNotIn("(0)", r.content)
        self.assertIn("(1)", r.content)
Esempio n. 8
0
    def test_try_to_see_deck_page_before_starting_training(self):
        """If the user started shelf with deck but he didn't
        start to train the deck then he shouldn't see the deck page."""
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "What is it?"
        card_answer = "This is that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Add card.
        deck = Deck.objects.all()[0]
        add_card(self.client, deck.id, card_question, card_answer)

        # Start shelf.
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # Then user tries to see deck page for shelf -
        # but he didn't start training so 404 is returned.
        r = self.client.get("/user/deck/%s/show/" % deck.id)
        self.assertEqual(r.status_code, HttpResponseNotFound.status_code)

        # Then user starts the training and training pool
        # is created this time.
        r = self.client.get("/user/deck/%s/train/" % deck.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # And user after starting training and creation of
        # training pool can view deck page.
        r = self.client.get("/user/deck/%s/show/" % deck.id)
        self.assertEqual(r.status_code, 200)
Esempio n. 9
0
    def test_start_training_when_there_are_no_cards(self):
        """Session is not created when there are no cards to train."""
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        deck = Deck.objects.all()[0]

        # Start shelf.
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # Train a deck with no cards there.
        r = self.client.get("/user/deck/%s/train/" % deck.id, follow=True)
        self.assertEqual(r.status_code, 200)

        # Train pool was created.
        trainpools = TrainPool.objects.all()
        self.assertEqual(len(trainpools), 1)

        # But train session not because there are no cards in train pool.
        trainsessions = TrainSession.objects.all()
        self.assertEqual(len(trainsessions), 0)
Esempio n. 10
0
    def test_train_or_continue_session(self):
        """If user started session then he will see continue session instead
        of train on shelf page."""

        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "What is it?"
        card_answer = "This is that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Add card.
        deck = Deck.objects.all()[0]
        add_card(self.client, deck.id, card_question, card_answer)

        # Start shelf.
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # User didn't start session so there is shown Train link.
        r = self.client.get("/user/shelf/%s/show/" % shelf.id)
        self.assertIn("Train", r.content)
        self.assertNotIn("Continue session", r.content)

        # Train a new deck.
        self.client.get("/user/deck/%s/train/" % deck.id)

        # User started session so there is shown only Continue session link.
        r = self.client.get("/user/shelf/%s/show/" % shelf.id)
        self.assertNotIn("Train", r.content)
        self.assertIn("Continue session", r.content)
Esempio n. 11
0
    def test_order_of_decks_is_taken_into_account(self):
        """Order of decks is kept in XML dump so that decks are sorted
        by order."""

        add_shelf(self.client, "first shelf")

        # Add decks.
        all_shelves = Shelf.objects.all()
        add_deck(self.client, all_shelves[0].id, "first deck")
        add_deck(self.client, all_shelves[0].id, "second deck")

        all_decks = Deck.objects.all()

        # Move first shelf up.
        self.client.get("/deck/%d/move/up/" % all_decks[0].id)

        # Second shelf is listed as first and first shelf is listed as second.
        r = self.client.get("/data/dump/")
        c = ("""<?xml version='1.0' encoding='UTF-8'?>\n"""
             """<data>\n"""
             """  <shelf name="first shelf">\n"""
             """    <deck name="second deck"/>\n"""
             """    <deck name="first deck"/>\n"""
             """  </shelf>\n"""
             """</data>\n""")
        self.assertEqual(c, r.content)
Esempio n. 12
0
    def test_max_number_of_cards_for_session(self):
        """For one session maximum 10 cards are chosen."""

        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "What is it?"
        card_answer = "This is that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Add card.
        deck = Deck.objects.all()[0]

        # Add 20 cards.
        for i in range(20):
            add_card(self.client,
                     deck.id,
                     card_question + str(i),
                     card_answer)

        # Start shelf.
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # Start deck training.
        self.client.get("/user/deck/%s/train/" % deck.id)

        # Maximum 10 cards are in this session.
        trainsessions = TrainSession.objects.all()
        session = trainsessions[0]
        traincards_of_session = session.train_cards.split(",")
        self.assertEqual(len(traincards_of_session), 10)
Esempio n. 13
0
    def test_delete_decks_and_check_order(self):
        shelf_name = "Some nice shelf"
        first_deck_name = "First deck"
        second_deck_name = "Second deck"
        third_deck_name = "Third deck"

        add_shelf(self.client, shelf_name)

        # Add decks.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, first_deck_name)
        add_deck(self.client, shelf.id, second_deck_name)
        add_deck(self.client, shelf.id, third_deck_name)

        all_decks = Deck.objects.all()

        self.assertEqual(len(all_decks), 3)

        # Delete deck in the middle.
        self.client.get("/deck/%d/delete/" % all_decks[1].id)

        all_decks = Deck.objects.all()

        # Order of last deck (third deck) was decreased in order
        # to achieve continuity.
        self.assertEqual(len(all_decks), 2)
        self.assertEqual(all_decks[0].order, 0)
        self.assertEqual(all_decks[0].name, first_deck_name)
        self.assertEqual(all_decks[1].order, 1)
        self.assertEqual(all_decks[1].name, third_deck_name)
Esempio n. 14
0
    def test_count_cards_of_deck_tests(self):
        """User can see on deck page how many cards
        are placed in specific deck."""
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "Is?"
        card_answer = "Yes"

        # Add shelf, deck and card.
        add_shelf(self.client, shelf_name)
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)
        deck = Deck.objects.all()[0]

        # There are no cards in deck yet.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertIn("(0)", r.content)

        # Now there card is added.
        add_card(self.client, deck.id, card_question, card_answer)

        # There is one card in deck.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertNotIn("(0)", r.content)
        self.assertIn("(1)", r.content)
Esempio n. 15
0
    def test_edit_deck(self):
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        new_deck_name = "New deck name"

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # There is one deck in database.
        self.assertEqual(len(Deck.objects.all()), 1)

        # Deck is shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertIn(deck_name, r.content)

        # Edit deck.
        deck = Deck.objects.all()[0]
        remember_deck_id = deck.id
        r = self.client.post("/deck/%s/edit/" % deck.id,
                             {"name": new_deck_name})
        deck = Deck.objects.all()[0]

        # Id of edited deck has not changed.
        self.assertEqual(remember_deck_id, deck.id)

        # Edited deck is shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertNotIn(deck_name, r.content)
        self.assertIn(new_deck_name, r.content)

        # The number of decks is still one in database.
        self.assertEqual(len(Deck.objects.all()), 1)
Esempio n. 16
0
    def test_order_of_decks_is_taken_into_account(self):
        """Order of decks is kept in XML dump so that decks are sorted
        by order."""

        add_shelf(self.client, "first shelf")

        # Add decks.
        all_shelves = Shelf.objects.all()
        add_deck(self.client, all_shelves[0].id, "first deck")
        add_deck(self.client, all_shelves[0].id, "second deck")

        all_decks = Deck.objects.all()

        # Move first shelf up.
        self.client.get("/deck/%d/move/up/" % all_decks[0].id)

        # Second shelf is listed as first and first shelf is listed as second.
        r = self.client.get("/data/dump/")
        c = ("""<?xml version='1.0' encoding='UTF-8'?>\n"""
             """<data>\n"""
             """  <shelf name="first shelf">\n"""
             """    <deck name="second deck"/>\n"""
             """    <deck name="first deck"/>\n"""
             """  </shelf>\n"""
             """</data>\n""")
        self.assertEqual(c, r.content)
Esempio n. 17
0
    def test_add_deck(self):
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"

        add_shelf(self.client, shelf_name)

        # Deck is not shown on shelf page.
        shelf = Shelf.objects.all()[0]
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertNotIn(deck_name, r.content)

        # Add deck.
        r = add_deck(self.client, shelf.id, deck_name)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # There is one deck in database.
        self.assertEqual(len(Deck.objects.all()), 1)

        # Shelf is assigned to the deck.
        deck = Deck.objects.all()[0]
        self.assertEqual(deck.shelf.id, shelf.id)
        self.assertEqual(deck.name, deck_name)

        # First deck has order 0 which means that it's first.
        self.assertEqual(deck.order, 0)

        # Deck is shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertIn(deck_name, r.content)
Esempio n. 18
0
    def test_start_or_stop_link_is_present(self):
        """If shelf is not started then there is present on all shelf list
        the start button, otherwise stop button."""

        shelf_name = "Some nice shelf"

        add_shelf(self.client, shelf_name)

        # When shelf is not started then there is Start link.
        r = self.client.get("/shelf/list/")
        self.assertIn("Start", r.content)
        self.assertNotIn("Stop", r.content)

        # Start shelf.
        shelf = Shelf.objects.all()[0]
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # When shelf is started then only Stop link is present.
        r = self.client.get("/shelf/list/")
        self.assertIn("Stop", r.content)
        self.assertNotIn("Start", r.content)

        # Stop shelf.
        self.client.get("/user/shelf/%s/stop/" % shelf.id)

        # Shelf was stopped so now it can be started again.
        r = self.client.get("/shelf/list/")
        self.assertIn("Start", r.content)
        self.assertNotIn("Stop", r.content)
Esempio n. 19
0
    def test_edit_shelf(self):
        shelf_name = "Some nice shelf"
        shelf_new_name = "New name for shelf"

        add_shelf(self.client, shelf_name)

        # Shelf is shown on main page.
        r = self.client.get("/shelf/list/")
        self.assertIn(shelf_name, r.content)
        self.assertNotIn(shelf_new_name, r.content)

        # There is one shelf in database.
        shelf_objects = Shelf.objects.all()
        self.assertEqual(len(shelf_objects), 1)
        shelf_id = shelf_objects[0].id

        # Edit shelf.
        r = self.client.post("/shelf/%d/edit/" % shelf_id,
                             {"name": shelf_new_name})
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # Edited shelf is shown on main page.
        r = self.client.get("/shelf/list/")
        self.assertNotIn(shelf_name, r.content)
        self.assertIn(shelf_new_name, r.content)

        # There is still one shelf in database.
        self.assertEqual(len(Shelf.objects.all()), 1)
Esempio n. 20
0
    def test_start_shelf_twice(self):
        shelf_name = "Some nice shelf"

        add_shelf(self.client, shelf_name)

        # No shelves are now started by user.
        shelves = UserProfile.objects.all()[0].shelves.all()
        self.assertEqual(len(shelves), 0)

        # Start a shelf.
        shelf = Shelf.objects.all()[0]
        r = self.client.get("/user/shelf/%s/start/" % shelf.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # One shelf is started by user.
        shelves = UserProfile.objects.all()[0].shelves.all()
        self.assertEqual(len(shelves), 1)

        # Start the same shelf again.
        r = self.client.get("/user/shelf/%s/start/" % shelf.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # Still only one shelf is connected with user.
        shelves = UserProfile.objects.all()[0].shelves.all()
        self.assertEqual(len(shelves), 1)
Esempio n. 21
0
    def test_add_deck(self):
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"

        add_shelf(self.client, shelf_name)

        # Deck is not shown on shelf page.
        shelf = Shelf.objects.all()[0]
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertNotIn(deck_name, r.content)

        # Add deck.
        r = add_deck(self.client, shelf.id, deck_name)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # There is one deck in database.
        self.assertEqual(len(Deck.objects.all()), 1)

        # Shelf is assigned to the deck.
        deck = Deck.objects.all()[0]
        self.assertEqual(deck.shelf.id, shelf.id)
        self.assertEqual(deck.name, deck_name)

        # First deck has order 0 which means that it's first.
        self.assertEqual(deck.order, 0)

        # Deck is shown on shelf page.
        r = self.client.get("/shelf/%s/show/" % shelf.id)
        self.assertIn(deck_name, r.content)
Esempio n. 22
0
    def test_start_training_session_index_only_increases_after_answer(self):
        """Only when answer is given then index of session with new card
        increases."""

        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question1 = "What is it?"
        card_answer1 = "This is that."
        card_question2 = "What was it?"
        card_answer2 = "This was that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Add two cards.
        deck = Deck.objects.all()[0]
        add_card(self.client, deck.id, card_question1, card_answer1)
        add_card(self.client, deck.id, card_question2, card_answer2)

        # Start shelf.
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # Train a new deck.
        self.client.get("/user/deck/%s/train/" % deck.id)

        # One session was started.
        trainsessions = TrainSession.objects.all()
        session = trainsessions[0]
        self.assertEqual(len(trainsessions), 1)

        # Figure out which card was now chosen.
        r = self.client.get("/user/train/session/%s/" % session.id)
        if card_question1 in r.content:
            current_question = card_question1
            next_question = card_question2
        else:
            current_question = card_question2
            next_question = card_question1
        self.assertIn(current_question, r.content)

        # Check if the same question was shown if no answer was given.
        r = self.client.get("/user/train/session/%s/" % session.id)
        self.assertIn(current_question, r.content)

        # Answer was given so next question is now shown.
        r = self.client.post("/user/train/session/%s/" % session.id,
                             {"Answer": "Bad"})
        self.assertIn(next_question, r.content)

        # Answer is given and training session is finished.
        self.client.post("/user/train/session/%s/" % session.id,
                         {"Answer": "Good"})

        # No train sessions are present.
        trainsessions = TrainSession.objects.all()
        self.assertEqual(len(trainsessions), 0)
Esempio n. 23
0
    def test_show_shelf_page_when_user_didnt_start_shelf(self):
        """If user didn't start shelf then he shouldn't see shelf page."""

        shelf_name = "Some nice shelf"

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]

        # User didn't start shelf so he cannot see shelf page.
        r = self.client.get("/user/shelf/%s/show/" % shelf.id)
        self.assertEqual(r.status_code, HttpResponseNotFound.status_code)
Esempio n. 24
0
 def test_add_shelf_with_already_existing_name(self):
     """It's forbidden to add new shelf with already existing name."""
     shelf_name = "Some nice shelf"
     r = self.client.get("/shelf/list/")
     self.assertNotIn(shelf_name, r.content)
     r = add_shelf(self.client, shelf_name)
     self.assertEqual(r.status_code, HttpResponseRedirect.status_code)
     r = add_shelf(self.client, shelf_name)
     self.assertEqual(r.status_code, 200)
     self.assertIn("Shelf with this Name already exists.", r.content)
     r = self.client.get("/shelf/list/")
     # Some nice shelf name is placed only once in database.
     self.assertEqual(r.content.count(shelf_name), 1)
     self.assertEqual(len(Shelf.objects.all()), 1)
Esempio n. 25
0
 def test_shelf_already_exists(self):
     """Shelf with the same name as one which already
     is present in database won't be added."""
     add_shelf(self.client, "aa")
     xml_content = "<data><shelf name=\"aa\"></shelf></data>"
     sent_file = SimpleUploadedFile("dump_data.xml", xml_content)
     r = self.client.post("/data/load/", {"data_dump_file": sent_file},
                          follow=True)
     self.assertEqual(200, r.status_code)
     self.assertIn("Error while parsing XML: 1: cannot add shelf: "
                   "column name is not unique", r.content)
     self.assertEqual(len(Card.objects.all()), 0)
     self.assertEqual(len(Shelf.objects.all()), 1)
     self.assertEqual(len(Deck.objects.all()), 0)
Esempio n. 26
0
 def test_shelf_already_exists(self):
     """Shelf with the same name as one which already
     is present in database won't be added."""
     add_shelf(self.client, "aa")
     xml_content = "<data><shelf name=\"aa\"></shelf></data>"
     sent_file = SimpleUploadedFile("dump_data.xml", xml_content)
     r = self.client.post("/data/load/", {"data_dump_file": sent_file},
                          follow=True)
     self.assertEqual(200, r.status_code)
     self.assertIn(
         "Error while parsing XML: 1: cannot add shelf: "
         "column name is not unique", r.content)
     self.assertEqual(len(Card.objects.all()), 0)
     self.assertEqual(len(Shelf.objects.all()), 1)
     self.assertEqual(len(Deck.objects.all()), 0)
Esempio n. 27
0
    def test_start_training_and_check_answer_time_on_wrong_answer(self):
        """When the answer for question is wrong then new time to show for
        card is not calculated."""
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "What is it?"
        card_answer = "This is that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Add card.
        deck = Deck.objects.all()[0]
        add_card(self.client, deck.id, card_question, card_answer)

        # Start shelf.
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # Train a new deck.
        r = self.client.get("/user/deck/%s/train/" % deck.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # Get current session and time to show for card.
        trainsessions = TrainSession.objects.all()
        session = trainsessions[0]
        traincards = TrainCard.objects.all()
        traincard = traincards[0]
        time_to_show = traincard.time_to_show

        # Check first question.
        r = self.client.get("/user/train/session/%s/" % session.id)
        self.assertIn(card_question, r.content)

        # Answer good on first question.
        self.client.post("/user/train/session/%s/" % session.id,
                         {"Answer": "Bad"})

        # Get newer calculated time to show for card.
        traincards = TrainCard.objects.all()
        traincard = traincards[0]
        new_time_to_show = traincard.time_to_show

        # Check that new time to show is greater than old time to show.
        self.assertTrue(new_time_to_show == time_to_show)
Esempio n. 28
0
    def test_add_multiple_shelves(self):
        first_shelf_name = "First shelf name"
        second_shelf_name = "Second shelf name"
        r = self.client.get("/shelf/list/")
        self.assertNotIn(first_shelf_name, r.content)
        self.assertNotIn(second_shelf_name, r.content)
        r = add_shelf(self.client, first_shelf_name)
        r = add_shelf(self.client, second_shelf_name)
        r = self.client.get("/shelf/list/")
        self.assertIn(first_shelf_name, r.content)
        self.assertIn(second_shelf_name, r.content)

        # First shelf name is printed before second shelf name.
        first_shelf_name_index = r.content.find(first_shelf_name)
        second_shelf_name_index = r.content.find(second_shelf_name)
        self.assertLess(first_shelf_name_index, second_shelf_name_index)
        self.assertEqual(len(Shelf.objects.all()), 2)
Esempio n. 29
0
 def test_add_empty_shelf_name(self):
     """It's forbidden to add new shelf with an empty name."""
     shelf_name = ""
     r = add_shelf(self.client, shelf_name)
     self.assertEqual(r.status_code, 200)
     # This field is required. is displayed above name form field.
     self.assertIn("This field is required.", r.content)
     self.assertEqual(len(Shelf.objects.all()), 0)
Esempio n. 30
0
 def test_add_blank_shelf_name(self):
     """It's forbidden to add new shelf with a blank name
     (for example only white spaces)."""
     shelf_name = " "
     r = add_shelf(self.client, shelf_name)
     self.assertEqual(r.status_code, 200)
     self.assertIn("This value cannot be whitespace only.", r.content)
     self.assertEqual(len(Shelf.objects.all()), 0)
Esempio n. 31
0
 def test_add_shelf_name_with_whitespace_around(self):
     """Whitespace characters are trimmed from shelf name."""
     shelf_name = "  Some shelf name  \t  "
     r = add_shelf(self.client, shelf_name)
     self.assertEqual(r.status_code, HttpResponseRedirect.status_code)
     shelf_objects = Shelf.objects.all()
     self.assertEqual(len(shelf_objects), 1)
     self.assertEqual("Some shelf name", shelf_objects[0].name)
Esempio n. 32
0
    def test_stop_shelf_before_starting(self):
        shelf_name = "Some nice shelf"

        add_shelf(self.client, shelf_name)

        # No shelves are started.
        shelves = UserProfile.objects.all()[0].shelves.all()
        self.assertEqual(len(shelves), 0)

        # Try to stop shelf even if not shelves are started.
        shelf = Shelf.objects.all()[0]
        r = self.client.get("/user/shelf/%s/stop/" % shelf.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # Still no shelves are started.
        shelves = UserProfile.objects.all()[0].shelves.all()
        self.assertEqual(len(shelves), 0)
Esempio n. 33
0
 def test_add_shelf_name_longer_than_128_characters(self):
     """It's forbidden to add new shelf with name longer
     than 128 characters."""
     shelf_name = "a" * 129
     r = add_shelf(self.client, shelf_name)
     self.assertEqual(r.status_code, 200)
     self.assertIn("Ensure this value has at most 128"
                   " characters (it has 129).", r.content)
     self.assertEqual(len(Shelf.objects.all()), 0)
Esempio n. 34
0
 def test_add_shelf(self):
     shelf_name = "Some nice shelf"
     r = self.client.get("/shelf/list/")
     self.assertNotIn(shelf_name, r.content)
     r = add_shelf(self.client, shelf_name)
     self.assertEqual(r.status_code, HttpResponseRedirect.status_code)
     r = self.client.get("/shelf/list/")
     self.assertIn(shelf_name, r.content)
     self.assertEqual(len(Shelf.objects.all()), 1)
Esempio n. 35
0
    def test_edit_card(self):
        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "What is it?"
        card_answer = "This is that."
        new_card_question = "Why so?"
        new_card_answer = "No idea"

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Add card.
        deck = Deck.objects.all()[0]
        add_card(self.client, deck.id, card_question, card_answer)

        # Only this card is in database.
        cards = Card.objects.all()
        card = cards[0]
        self.assertEqual(len(cards), 1)

        # Check if card is shown on deck page.
        r = self.client.get("/deck/%s/show/" % deck.id)
        self.assertIn(card_question, r.content)
        self.assertIn(card_answer, r.content)

        # Edit card.
        r = self.client.post("/card/%s/edit/" % card.id,
                             {"question": new_card_question,
                              "answer": new_card_answer})
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # Edited card is shown on deck page.
        r = self.client.get("/deck/%s/show/" % deck.id)
        self.assertNotIn(card_question, r.content)
        self.assertNotIn(card_answer, r.content)
        self.assertIn(new_card_question, r.content)
        self.assertIn(new_card_answer, r.content)

        # The number of card objects should not change.
        self.assertEqual(len(Card.objects.all()), 1)
Esempio n. 36
0
    def test_add_card_with_empty_question(self):
        """Question and answer for the card cannot be empty."""

        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = ""
        card_answer = "This is that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Get deck.
        deck = Deck.objects.all()[0]

        # Add new card.
        r = add_card(self.client, deck.id, card_question, card_answer)
        self.assertIn("This field is required.", r.content)
Esempio n. 37
0
    def test_add_multiple_decks_and_check_order(self):
        shelf_name = "Some nice shelf"
        first_deck_name = "First deck"
        second_deck_name = "Second deck"
        third_deck_name = "Third deck"

        add_shelf(self.client, shelf_name)

        # Add decks.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, first_deck_name)
        add_deck(self.client, shelf.id, second_deck_name)
        add_deck(self.client, shelf.id, third_deck_name)

        all_decks = Deck.objects.all()
        # Each new added deck has order so it's maximum value
        # of other orders + 1
        self.assertEqual(all_decks[0].order, 0)
        self.assertEqual(all_decks[1].order, 1)
        self.assertEqual(all_decks[2].order, 2)
Esempio n. 38
0
    def test_add_multiple_decks_and_check_order(self):
        shelf_name = "Some nice shelf"
        first_deck_name = "First deck"
        second_deck_name = "Second deck"
        third_deck_name = "Third deck"

        add_shelf(self.client, shelf_name)

        # Add decks.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, first_deck_name)
        add_deck(self.client, shelf.id, second_deck_name)
        add_deck(self.client, shelf.id, third_deck_name)

        all_decks = Deck.objects.all()
        # Each new added deck has order so it's maximum value
        # of other orders + 1
        self.assertEqual(all_decks[0].order, 0)
        self.assertEqual(all_decks[1].order, 1)
        self.assertEqual(all_decks[2].order, 2)
Esempio n. 39
0
    def test_start_and_stop_shelf(self):
        shelf_name = "Some nice shelf"

        add_shelf(self.client, shelf_name)

        # Start shelf.
        shelf = Shelf.objects.all()[0]
        r = self.client.get("/user/shelf/%s/start/" % shelf.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # One shelf is started.
        shelves = UserProfile.objects.all()[0].shelves.all()
        self.assertEqual(len(shelves), 1)

        # Stop shelf.
        r = self.client.get("/user/shelf/%s/stop/" % shelf.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # Zero shelves are started.
        shelves = UserProfile.objects.all()[0].shelves.all()
        self.assertEqual(len(shelves), 0)
Esempio n. 40
0
    def test_user_cannot_perform_sessions_of_other_users(self):
        """If two users train the same deck, they can't have access
        to the sessions of each other."""

        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "What is it?"
        card_answer = "This is that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Add card.
        deck = Deck.objects.all()[0]
        add_card(self.client, deck.id, card_question, card_answer)

        # Start shelf.
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # Train a new deck.
        r = self.client.get("/user/deck/%s/train/" % deck.id)
        self.assertEqual(r.status_code, HttpResponseRedirect.status_code)

        # Train session and get correct result because this user started it.
        trainsessions = TrainSession.objects.all()
        session = trainsessions[0]
        r = self.client.get("/user/train/session/%s/" % session.id)
        self.assertEqual(r.status_code, 200)

        # Login as other user.
        UserProfile.objects.create_user(username="******", password="******")
        self.client.logout()
        self.client.login(username="******", password="******")

        # Try to train session of other user - it's forbidden.
        r = self.client.get("/user/train/session/%s/" % session.id)
        self.assertEqual(r.status_code, HttpResponseForbidden.status_code)
Esempio n. 41
0
    def test_train_all_option_gets_all_cards_in_session(self):
        """Except normal train session which gets in session max
        10 cards, there is also an option to train all cards which
        will create session with all cards in given deck.."""

        shelf_name = "Some nice shelf"
        deck_name = "Some nice deck"
        card_question = "What is it?"
        card_answer = "This is that."

        add_shelf(self.client, shelf_name)

        # Add deck.
        shelf = Shelf.objects.all()[0]
        add_deck(self.client, shelf.id, deck_name)

        # Add card.
        deck = Deck.objects.all()[0]

        # Add 20 cards.
        for i in range(20):
            add_card(self.client,
                     deck.id,
                     card_question + str(i),
                     card_answer)

        # Start shelf.
        self.client.get("/user/shelf/%s/start/" % shelf.id)

        # Start deck training.
        self.client.get("/user/deck/%s/train/all/" % deck.id)

        # All 20 cards will be put in session.
        trainsessions = TrainSession.objects.all()
        session = trainsessions[0]
        traincards_of_session = session.train_cards.split(",")
        self.assertEqual(len(traincards_of_session), 20)