Ejemplo n.º 1
0
    def test_remove_wrong_question(self):
        course = self.make_standard_course(guest_access=True)
        self.session.add(course)

        user = self.makeUser(email="*****@*****.**",
                             id=1,
                             username="******")
        self.session.add(user)
        self.session.commit()
        course.add_instructor(user)
        self.session.commit()
        l1 = self.make_standard_course_lesson(title="lesson 1",
                                              course=course,
                                              order=1)
        self.session.add(l1)
        self.session.commit()
        question = datamodels.LessonQA(lesson=l1,
                                       question="Why?",
                                       answer="Because you can!")
        l1.questions.append(question)
        self.session.add(l1)
        self.session.commit()

        self.assertEqual(len(l1.questions), 1)
        response = make_authorized_call(
            url="/course/abc-123/lessons/{}/qa/{}/delete".format(l1.id, 123),
            user=user,
            expected_status_code=400,
        )
        self.assertEqual(len(l1.questions), 1)
        self.assertFalse(response.json["success"])
        self.assertEqual(response.json["message"], "Wrong question or lesson")
Ejemplo n.º 2
0
    def test_remove_question(self):
        course = self.make_standard_course(guest_access=True)
        self.session.add(course)

        user = self.makeUser(email="*****@*****.**",
                             id=1,
                             username="******")
        self.session.add(user)
        self.session.commit()
        course.add_instructor(user)
        self.session.commit()
        l1 = self.make_standard_course_lesson(title="lesson 1",
                                              course=course,
                                              order=1)
        self.session.add(l1)
        self.session.commit()
        q1 = datamodels.LessonQA(lesson=l1,
                                 question="Why 1?",
                                 answer="Because you can do 1!",
                                 order=1)
        q2 = datamodels.LessonQA(lesson=l1,
                                 question="Why 2?",
                                 answer="Because you can do 2!",
                                 order=2)
        q3 = datamodels.LessonQA(lesson=l1,
                                 question="Why 3?",
                                 answer="Because you can do 3!",
                                 order=3)
        l1.questions.append(q1)
        l1.questions.append(q2)
        l1.questions.append(q3)
        self.session.add(l1)
        self.session.commit()

        self.assertEqual(len(l1.questions), 3)
        response = make_authorized_call(
            url="/course/abc-123/lessons/{}/qa/{}/delete".format(l1.id, q1.id),
            user=user,
            expected_status_code=200,
        )
        self.assertEqual(len(l1.questions), 2)
        self.assertTrue(response.json["success"])
        self.assertEqual(response.json["message"], "Question deleted")

        # Check order
        self.assertEqual(q2.order, 1)
        self.assertEqual(q3.order, 2)
Ejemplo n.º 3
0
    def test_reorder_questions(self):
        course = self.make_standard_course(guest_access=True)
        self.session.add(course)

        user = self.makeUser(email="*****@*****.**",
                             id=1,
                             username="******")
        self.session.add(user)
        self.session.commit()
        course.add_instructor(user)
        self.session.commit()
        l1 = self.make_standard_course_lesson(title="lesson 1",
                                              course=course,
                                              order=1)
        self.session.add(l1)
        self.session.commit()
        q1 = datamodels.LessonQA(lesson=l1,
                                 question="Why 1?",
                                 answer="Because you can do 1!",
                                 order=1)
        q2 = datamodels.LessonQA(lesson=l1,
                                 question="Why 2?",
                                 answer="Because you can do 2!",
                                 order=2)
        q3 = datamodels.LessonQA(lesson=l1,
                                 question="Why 3?",
                                 answer="Because you can do 3!",
                                 order=3)
        l1.questions.append(q1)
        l1.questions.append(q2)
        l1.questions.append(q3)
        self.session.add(l1)
        self.session.commit()

        self.assertEqual(len(l1.questions), 3)
        make_authorized_call(
            url="/course/abc-123/lessons/{}/qa/reorder".format(l1.id),
            user=user,
            data={"items_order": "{},{},{}".format(q3.id, q1.id, q2.id)},
            expected_status_code=200,
        )

        self.assertEqual(q1.order, 2)
        self.assertEqual(q2.order, 3)
        self.assertEqual(q3.order, 1)
Ejemplo n.º 4
0
def add_lesson_qa(user,
                  course,
                  course_slug,
                  lesson_id,
                  qa_id=None,
                  institute=""):
    lesson = datamodels.Course.find_lesson_by_course_slug_and_id(
        course.slug, lesson_id)

    if not AjaxCSRFTokenForm(request.form).validate():
        return jsonify({"message": "CSRF token required"}), 400

    if not lesson:
        return jsonify({"message": "Wrong lesson or course"}), 400

    form = LessonQAForm(data=request.form)

    if form.validate():
        # get instance of LessonQA
        qa = datamodels.LessonQA.find_by_lesson_and_id(lesson_id, qa_id)
        if qa is None and qa_id:
            return jsonify({"message": "Wrong question or lesson"}), 400

        if not qa:
            qa = datamodels.LessonQA(lesson=lesson,
                                     order=len(lesson.questions) + 1)

        qa.answer = form.answer.data
        qa.question = form.question.data

        db = datamodels.get_session()
        db.add(qa)
        db.commit()

        return jsonify({
            "message": "Question saved",
            "html": render_question_answer(course, lesson, qa),
        })

    return jsonify({"message": "Error saving questions"}), 400
Ejemplo n.º 5
0
    def test_edit_question_from_different_lesson(self):
        course = self.make_standard_course(guest_access=True)
        self.session.add(course)

        user = self.makeUser(email="*****@*****.**",
                             id=1,
                             username="******")
        self.session.add(user)
        self.session.commit()
        course.add_instructor(user)
        self.session.commit()
        l1 = self.make_standard_course_lesson(title="lesson 1",
                                              course=course,
                                              order=1)
        l2 = self.make_standard_course_lesson(title="lesson 2",
                                              course=course,
                                              order=2)
        self.session.add(l1)
        self.session.add(l2)
        self.session.commit()
        question = datamodels.LessonQA(lesson=l1,
                                       question="Why?",
                                       answer="Because you can!")
        l1.questions.append(question)
        self.session.add(l1)
        self.session.commit()

        self.assertEqual(len(l2.questions), 0)
        response = make_authorized_call(
            url="/course/abc-123/lessons/{}/qa/{}/edit".format(
                l2.id, question.id),
            user=user,
            data={
                "question": "Be or not to be",
                "answer": "Because you can!"
            },
            expected_status_code=400,
        )
        self.assertEqual(len(l2.questions), 0)
        self.assertEqual(response.json["message"], "Wrong question or lesson")