Example #1
0
    def update_question(question_id):
        error = False
        request_json = request.get_json()

        try:
            question = Question.query.filter(
                Question.id == question_id).one_or_none()
        except:
            abort(422)

        if question:
            question.question = request_json['question']
            question.answer = request_json['answer']
            question.category = request_json['category']
            question.difficulty = request_json['difficulty']
            try:
                question.update()
            except:
                abort(422)
        else:
            try:
                question = Question(request_json['question'],
                                    request_json['answer'],
                                    request_json['category'],
                                    request_json['difficulty'])
                question.id = question_id
                question.insert()
            except:
                abort(422)
        return jsonify({"success": True, "question": question.format()})
Example #2
0
    def test_delete_question(self):
        # Question for delete
        try:
            q = Question(question='q', answer='a', category=1, difficulty=2)
            q.id = 30
            q.insert()
        except:
            pass

        res = self.client().delete('/questions/30')
        self.assertEqual(res.status_code, 200)
 def test_delete_question_success(self):
     ''' test for successful deletion of a question'''
     deleted_item = Question.query.get(20).format()
     cloned_item = Question(deleted_item['question'],
                            deleted_item['answer'],
                            deleted_item['category'],
                            deleted_item['difficulty'])
     res = self.client().delete('/questions/20')
     data = res.get_json()
     deleted_not_found = Question.query.get(20)
     self.assertEqual(deleted_not_found, None)
     self.assertEqual(res.status_code, 200)
     self.assertTrue(data['success'])
     self.assertEqual(data['deleted_question'], 20)
     # restore deleted item
     cloned_item.id = 20
     cloned_item.insert()
    def fetchQuestions(self, start, count):
        query = (
            "SELECT id, owner_id, content, c_time FROM questions ORDER BY c_time DESC LIMIT %s OFFSET %s;"
        )
        cursor = self.db.cursor()

        ret = []
        cursor.execute(query, (int(count), int(start)))
        for (id, owner_id, content, c_time) in cursor:
            question = Question()
            question.id = id
            question.owner_id = owner_id
            question.content = content
            question.create_time = c_time
            ret.append(question)
        cursor.close()
        return ret
Example #5
0
    def api_post_a_question():
        try:
            data = json.loads(request.data)
        except json.decoder.JSONDecodeError as e:
            raise e
            abort(400, f'json required, got: {request.data}')

        search = data.get('searchTerm')
        if search:
            found_questions = Question.query.filter(
                Question.question.ilike(f'%{search}%'))
            questions = [question.format() for question in found_questions]
            total_questions = len(questions)
            body = {
                'success': True,
                'categories': Category.format_all(),
                'total_questions': total_questions,
                'current_category': "ALL",
                'questions': questions,
                'page': 1
            }
        else:
            if not all([data.get(key) for key in Question.required_keys()]):
                abort(
                    422,
                    f'Requires Fields: {",".join(Question.required_keys())}')

            question = Question(question=data.get('question'),
                                answer=data.get('answer'),
                                category=data.get('category'),
                                difficulty=data.get('difficulty'))
            if data.get('id'):
                question.id = data.get('id')

            try:
                question.insert()
            except Exception as e:
                if '(psycopg2.errors.UniqueViolation)' in str(e):
                    abort(422, f"id={data.get('id')} already exists.")
                else:
                    abort(500)

            body = {'success': True, 'question': question.format()}
        return jsonify(body)
Example #6
0
    def save_question(self):
        text = self.lineEditQuestionText.text()
        answer1 = self.lineEditAnswer1.text()
        answer2 = self.lineEditAnswer2.text()
        answer3 = self.lineEditAnswer3.text()
        answer4 = self.lineEditAnswer4.text()

        correct_answer = self.lineEditCorrectAnswer.text()

        question = Question(text=text,
                            answers=[answer1, answer2, answer3, answer4],
                            correct_answer=correct_answer)

        if self.selected_question:
            question.id = self.selected_question.id

        if question.id:
            self.db_manager.update_question(question)
        else:
            self.db_manager.insert_question(question)