Exemplo n.º 1
0
def answer_question():
    try:
        json = request.get_json()

        errors = []

        username = json.get('user', '')
        text = json.get('text', '')
        question_id = json.get('questionId', '')

        if not username:
            errors.append({'field': 'user', 'message': 'User is required.'})

        if not text:
            errors.append({'field': 'text', 'message': 'Text is required.'})

        if not question_id:
            errors.append({
                'field': 'questionId',
                'message': 'Question ID is required.'
            })
        else:
            if not isinstance(int(question_id), int):
                errors.append({
                    'field': 'questionId',
                    'message': 'Question ID must be a integer.'
                })

            question = Question.query.get(question_id)

            if not question:
                errors.append({
                    'field': 'questionId',
                    'message': 'Question ID is not valid.'
                })

        if errors:
            return jsonify({'errors': errors}), 422

        answer = Answer.create(question=question, text=text, username=username)
        answer.save()

        return jsonify({'answer': answer.to_json()}), 201

    except BadRequest as bad_e:
        return jsonify({
            'errors':
            'Something went wrong! Maybe your JSON is malformed. Please, fix it and try again.'
        }), 400

    except ValueError as val_e:
        errors.append({
            'field': 'questionId',
            'message': 'Question ID must be a integer.'
        })

        return jsonify({'errors': errors}), 400
Exemplo n.º 2
0
def write_answer(id):
    s = search()
    if s:
        return s
    question = Question.query.get_or_404(id)
    if question.answers.filter_by(
            author=current_user._get_current_object()).first():
        flash('你已经回答了该问题', category='warning')
        return redirect(url_for('.question', id=question.id))
    form = WriteAnswerForm()
    if form.validate_on_submit():
        Answer.create(body=form.body.data,
                      question=question,
                      author=current_user._get_current_object(),
                      anonymous=form.anonymous.data)
        question_answer_add.send(question)
        flash('添加回答成功', category='success')
        return redirect(url_for('.question', id=question.id))
    return render_template('answer/write_answer.html',
                           form=form,
                           question=question)
    def test_collect_answer(self):
        q = Question.create(title='dwwf')
        a = Answer.create(body='dwwdf', question=q)
        f = Favorite.create(title='数学')

        self.assertListEqual(f.answers.all(), [])
        self.assertTrue(f.answers.count() == 0)
        self.assertTrue(a.favorites.count() == 0)
        f.collect(a)
        self.assertListEqual([i.answer for i in f.answers.all()], [a])
        self.assertTrue(f.answers.count() == 1)
        self.assertTrue(a.favorites.count() == 1)
        self.assertTrue(f.has_collect_answer(a))
        f.uncollect(a)
        self.assertTrue(f.answers.count() == 0)
        self.assertTrue(a.favorites.count() == 0)
        self.assertFalse(f.has_collect_answer(a))
Exemplo n.º 4
0
def seed_all():
    for item in questions_list:
        num = random.randint(0, len(users_list) - 1)
        question = Question.create(
            text=item['text'], username=users_list[num]['email'])
        print(f'Seeding question `{question.text}`')
        question.save()

        max_answers = random.randint(0, 20)

        for i in range(max_answers):
            a_num = random.randint(0, len(answers_list) - 1)
            num = random.randint(0, len(users_list) - 1)
            answer = Answer.create(
                text=answers_list[a_num]['text'],
                username=users_list[num]['email'],
                question=question
            )
            print(
                f'Seeding answer `{answer.text}` to question `{question.text}`')
            answer.save()

    print('Finished seeding.')
    def test_core_database_functionality(self):
        # admin_create_survey
        print('')
        print('Creating an administrator user...')
        role = Role.get_by_name('admin')
        self.assertTrue(role is not None)
        user = User(username='******', role=role, password='******')
        print('Adding and commiting data to database...')
        db.session.add(user)
        db.session.commit()
        self.assertTrue(User.query.filter_by(
            username='******').first() is not None)
        print('Successfully added and committed data to database.')
        print('Administrator user successfully created.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')

        print('Creating course...')
        c = Course(course_code='TEST')
        print('Adding and commiting data to database...')
        db.session.add(c)
        db.session.commit()
        self.assertTrue(Course.query.filter_by(
            course_code='TEST').first() is not None)
        print('Successfully added and committed data to database.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')

        print('Creating a survey with the course code...')
        survey = Survey.create(description='blah test', times=['1', '2'],
                               owner_id=user.id, course=c.course_code)
        self.assertTrue(Survey.query.filter_by(description='blah test')
                        .first() is not None)
        self.assertTrue(Survey.query.filter_by(description='blah test')
                        .first().status == 'review')
        print('Survey successfully created with the course code.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')
        print('Creating questions for survey...')
        question1 = Question.create(
            description="a test question1", owner_id=user.id, optional=False, q_type=2)
        question2 = Question.create(
            description="a test question2", owner_id=user.id, optional=True, q_type=2)
        self.assertTrue(question1 is not None)
        self.assertTrue(question2 is not None)
        print('Successfully created questions.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')
        print('Setting questions to survey...')
        survey.set_questions([question1.id, question2.id])
        self.assertTrue(survey.questions.all() is not None)
        print('Successfully assigned questions to survey.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')

        # staff_review_survey
        print('Creating staff user...')
        role = Role.get_by_name('staff')
        self.assertTrue(role is not None)
        user = User(username='******', role=role, password='******')
        print('Adding and commiting data to database...')
        db.session.add(user)
        db.session.commit()
        self.assertTrue(User.query.filter_by(username='******')
                        .first() is not None)
        survey = Survey.query.filter_by(description='blah test').first()
        self.assertTrue(survey is not None)
        self.assertTrue(survey.status == 'review')
        print('Successfully added and committed data to database.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')
        print('Setting survey phase to open...')
        survey.status = 'open'
        self.assertTrue(survey.status == 'open')
        db.session.add(survey)
        db.session.commit()
        print('Successfully set survey phase to open and made changes to database.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')

        # student_answer_survey
        print('Creating a student user...')
        role = Role.get_by_name('student')
        self.assertTrue(role is not None)
        user = User(username='******', role=role, password='******')
        db.session.add(user)
        db.session.commit()
        print('Successfully created student user.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')
        print('Creating a survey...')
        survey = Survey.query.filter_by(description='blah test').first()
        self.assertTrue(survey is not None)
        self.assertTrue(survey.status == 'open')
        print('Successfully created a survey.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')
        print('Creating answers for the survey...')
        a = Answer.create(survey_id=survey.id, owner_id=user.id)
        self.assertTrue(a is not None)
        self.assertTrue(a.survey_id == survey.id)
        self.assertTrue(a.owner_id == user.id)
        for question in survey.questions.all():
            ae = AnswerEntity.create(answer_id=a.id,
                                     question_id=question.id,
                                     answer_content='blah'
                                     )
            self.assertTrue(ae is not None)
            self.assertTrue(ae.question_id == question.id)
            self.assertTrue(ae.answer_id == a.id)
        print('Successfully created answers for the survey.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')

        # admin_close_survey
        print('Creating an administrator user...')
        user = User.query.filter_by(username='******').first()
        self.assertTrue(user is not None)
        print('Administrator user successfully created.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')
        print('Creating a survey...')
        survey = Survey.query.filter_by(description='blah test').first()
        self.assertTrue(survey is not None)
        print('Survey successfully created.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')
        print('Setting survey phase to closed...')
        survey.status = 'closed'
        db.session.add(survey)
        db.session.commit()
        self.assertTrue(survey.status == 'closed')
        print('Successfully set survey to closed.')
        print('\x1b[0;32;40m' + 'pass' + '\x1b[0m')
        print('')