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")
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)
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)
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
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")