def test_post_existing_question(self):
        """ response should be success = False for posting of existing question
        """
        # create new category & question:
        category = CategoryFactory()
        db.session.add(category)
        db.session.commit()
        question = QuestionFactory()
        question.category_id = category.id
        db.session.add(question)
        db.session.commit()
        # create new question with existing id:
        another_question = QuestionFactory().to_json()
        another_question["id"] = question.id
        another_question["category_id"] = category.id

        # send request:
        response = self.client.post(url_for('api.create_question'),
                                    content_type='application/json',
                                    data=json.dumps(another_question))

        self.assertEqual(response.status_code, 500)

        # parse json response:
        json_response = json.loads(response.get_data(as_text=True))
        # check response:
        self.assertEqual(json_response["success"], False)
        self.assertEqual(json_response["error"], 500)
        self.assertEqual(
            json_response["message"],
            "500 Internal Server Error: Failed to create new Question")
    def test_post_new_question(self):
        """ response should be success = True for posting of new question
        """
        # create new category:
        category = CategoryFactory()
        db.session.add(category)
        db.session.commit()
        # create new question:
        question = QuestionFactory().to_json()
        question["category_id"] = category.id

        # send request:
        response = self.client.post(url_for('api.create_question'),
                                    content_type='application/json',
                                    data=json.dumps({
                                        "answer":
                                        question["answer"],
                                        "question":
                                        question["question"],
                                        "difficulty":
                                        question["difficulty"],
                                        "category_id":
                                        question["category_id"]
                                    }))

        self.assertEqual(response.status_code, 201)

        # parse json response:
        json_response = json.loads(response.get_data(as_text=True))
        # check response:
        self.assertEqual(json_response["success"], True)
Exemplo n.º 3
0
 def generate_data(num):
     # generate test data:
     for id in range(num):
         # generate:
         category = CategoryFactory()
         question = QuestionFactory()
         # insert:
         db.session.add_all([category, question])
         db.session.commit()
    def test_search_questions(self):
        """ response should be questions with search term in question body
        """
        # create new category:
        category = CategoryFactory()
        db.session.add(category)
        db.session.commit()
        # create new questions:
        for _ in range(3):
            question = QuestionFactory()
            question.category_id = category.id
            question.question = 'KeyWordA'
            db.session.add(question)
            db.session.commit()
        for _ in range(4):
            question = QuestionFactory()
            question.category_id = category.id
            question.question = 'KeyWordB'
            db.session.add(question)
            db.session.commit()

        # send request:
        response = self.client.post(url_for('api.search_questions'),
                                    content_type='application/json',
                                    data=json.dumps({"searchTerm":
                                                     "KeyWordA"}))

        self.assertEqual(response.status_code, 200)

        # parse json response:
        json_response = json.loads(response.get_data(as_text=True))
        # check response:
        self.assertEqual(json_response["total_questions"], 3)
        # check current category:
        self.assertEqual(json_response["current_category"], None)

        # send request:
        response = self.client.post(url_for('api.search_questions'),
                                    content_type='application/json',
                                    data=json.dumps({"searchTerm":
                                                     "KeyWordB"}))

        self.assertEqual(response.status_code, 200)

        # parse json response:
        json_response = json.loads(response.get_data(as_text=True))
        # check response:
        self.assertEqual(json_response["total_questions"], 4)
        # check current category:
        self.assertEqual(json_response["current_category"], None)
    def test_get_questions_by_category(self):
        """ response should be questions which belongs to the given category
        """
        # create category one:
        category_one = CategoryFactory()
        db.session.add(category_one)
        db.session.commit()
        # add questions:
        for _ in range(3):
            question = QuestionFactory()
            question.category_id = category_one.id
            db.session.add(question)
            db.session.commit()
        # create category another:
        category_another = CategoryFactory()
        db.session.add(category_another)
        db.session.commit()
        for _ in range(4):
            question = QuestionFactory()
            question.category_id = category_another.id
            db.session.add(question)
            db.session.commit()

        # send request:
        response = self.client.get(url_for('api.get_questions_by_category',
                                           id=category_one.id),
                                   content_type='application/json')

        self.assertEqual(response.status_code, 200)

        # parse json response:
        json_response = json.loads(response.get_data(as_text=True))
        # check total question count:
        self.assertEqual(json_response["total_questions"], 3)
        # check current category:
        self.assertEqual(json_response["current_category"], category_one.id)

        # send request:
        response = self.client.get(url_for('api.get_questions_by_category',
                                           id=category_another.id),
                                   content_type='application/json')

        self.assertEqual(response.status_code, 200)

        # parse json response:
        json_response = json.loads(response.get_data(as_text=True))
        # check total question count:
        self.assertEqual(json_response["total_questions"], 4)
        # check current category:
        self.assertEqual(json_response["current_category"],
                         category_another.id)
Exemplo n.º 6
0
    def test_get_question_with_valid_id(self):
        """ response should be question with given id
        """
        # create data:
        category = CategoryFactory()
        db.session.add(category)
        db.session.commit()
        question = QuestionFactory()
        db.session.add(question)
        db.session.commit()

        # send request:
        response = self.client.get(url_for('api.get_question', id=question.id),
                                   content_type='application/json')

        # check status code:
        self.assertEqual(response.status_code, 200)

        # parse json response:
        json_response = json.loads(response.get_data(as_text=True))

        # check response:
        self.assertEqual(json_response["id"], question.id)
Exemplo n.º 7
0
    def test_get_quizzes_with_quiz_category(self):
        """ response should be contain new question from given category if there are still remaining ones, None otherwise
        """
        # create category one:
        category_one = CategoryFactory()
        db.session.add(category_one)
        db.session.commit()
        # add questions:
        category_one_question_ids = []
        for _ in range(3):
            question = QuestionFactory()
            question.category_id = category_one.id
            db.session.add(question)
            db.session.commit()
            # save ids as quiz state:
            category_one_question_ids.append(question.id)
        # create category another:
        category_another = CategoryFactory()
        db.session.add(category_another)
        db.session.commit()
        category_another_question_ids = []
        for _ in range(4):
            question = QuestionFactory()
            question.category_id = category_another.id
            db.session.add(question)
            db.session.commit()
            # save ids as quiz state:
            category_another_question_ids.append(question.id)

        # test category one:
        category_one_question_ids = set(category_one_question_ids)
        category_one_previous_question_ids = []
        for _ in range(len(category_one_question_ids)):
            # request one new question:
            response = self.client.post(url_for('api.get_quizzes'),
                                        content_type='application/json',
                                        data=json.dumps({
                                            "previous_questions":
                                            category_one_previous_question_ids,
                                            "quiz_category": {
                                                "id": category_one.id,
                                                "type": category_one.type
                                            }
                                        }))
            # check status code:
            self.assertEqual(response.status_code, 200)

            # parse json response:
            json_response = json.loads(response.get_data(as_text=True))
            next_question = json_response["question"]

            # check total question count:
            self.assertTrue(next_question["id"] in category_one_question_ids)

            # update state:
            category_one_previous_question_ids.append(next_question["id"])
            category_one_question_ids.remove(next_question["id"])

        # request one new question :
        response = self.client.post(url_for('api.get_quizzes'),
                                    content_type='application/json',
                                    data=json.dumps({
                                        "previous_questions":
                                        category_one_previous_question_ids,
                                        "quiz_category": {
                                            "id": category_one.id,
                                            "type": category_one.type
                                        }
                                    }))
        # check status code:
        self.assertEqual(response.status_code, 200)

        # parse json response:
        json_response = json.loads(response.get_data(as_text=True))
        next_question = json_response["question"]

        self.assertTrue(next_question is None)