def practice_mark_question(topic_id, question_id): """ Mark the submitted question answers """ user_id = session['user_id'] course_id = Topics.get_course_id(topic_id) if not course_id: abort(404) course = Courses.get_course(course_id) if not course: abort(404) topictitle = "UNKNOWN" try: topictitle = Topics.get_name(topic_id) except KeyError: abort(404) qt_id = DB.get_q_parent(question_id) q_title = DB.get_qt_name(qt_id) questions = Practice.get_sorted_questions(course_id, topic_id, user_id) q_pos = DB.get_qtemplate_practice_pos(qt_id) blocked = Practice.is_q_blocked(user_id, course_id, topic_id, qt_id) if blocked: return render_template( "practicequestionblocked.html", mesg=blocked, topictitle=topictitle, topic_id=topic_id, qt_id=qt_id, course=course, q_title=q_title, questions=questions, q_pos=q_pos, ) marking = Practice.mark_q(user_id, topic_id, question_id, request) prev_pos, next_pos = Practice.get_next_prev_pos(qt_id, topic_id) return render_template( "practicemarkquestion.html", topictitle=topictitle, topic_id=topic_id, qt_id=qt_id, course=course, q_title=q_title, questions=questions, q_pos=q_pos, q_id=question_id, marking=marking, next_pos=next_pos, prev_pos=prev_pos )
def test_topic_nextprev(self): """ Do the "next/previous" options in practice work? """ course_id = Courses.create("TEST101", "Test topic next/prev logic", 1, 1) topic1_id = Topics.create(course_id, "TESTTOPIC1", 1, 2) qt1_id = DB.create_qt(1, "TESTQ1", "Test question 1", 0, 5.0, 1) qt2_id = DB.create_qt(1, "TESTQ2", "Test question 2", 0, 4.1, 2) qt3_id = DB.create_qt(1, "TESTQ3", "Test question 3", 0, 0.0, 2) qt4_id = DB.create_qt(1, "TESTQ4", "Test question 4", 0, 2.0, 2) DB.move_qt_to_topic(qt1_id, topic1_id) DB.move_qt_to_topic(qt2_id, topic1_id) DB.move_qt_to_topic(qt3_id, topic1_id) DB.move_qt_to_topic(qt4_id, topic1_id) DB.update_qt_practice_pos(qt1_id, 1) DB.update_qt_practice_pos(qt2_id, 2) DB.update_qt_practice_pos(qt3_id, 3) DB.update_qt_practice_pos(qt4_id, 4) qts = Topics.get_qts(topic1_id) self.assertIn(qt1_id, qts) self.assertIn(qt2_id, qts) self.assertIn(qt3_id, qts) self.assertIn(qt4_id, qts) self.assertEqual(len(qts), 4) self.assertTupleEqual(Practice.get_next_prev_pos(qt1_id, topic1_id), (None, 2)) self.assertTupleEqual(Practice.get_next_prev_pos(qt2_id, topic1_id), (1, 3)) self.assertTupleEqual(Practice.get_next_prev_pos(qt3_id, topic1_id), (2, 4)) self.assertTupleEqual(Practice.get_next_prev_pos(qt4_id, topic1_id), (3, None)) DB.update_qt_practice_pos(qt2_id, 3) self.assertEqual(DB.get_qtemplate_practice_pos(qt1_id), 1) self.assertEqual(DB.get_qtemplate_practice_pos(qt2_id), 3) self.assertEqual(DB.get_qtemplate_practice_pos(qt3_id), 3) self.assertEqual(DB.get_qtemplate_practice_pos(qt4_id), 4) self.assertTupleEqual(Practice.get_next_prev_pos(qt1_id, topic1_id), (None, 3)) self.assertTupleEqual(Practice.get_next_prev_pos(qt2_id, topic1_id), (1, 4)) self.assertTupleEqual(Practice.get_next_prev_pos(qt3_id, topic1_id), (1, 4)) self.assertTupleEqual(Practice.get_next_prev_pos(qt4_id, topic1_id), (3, None)) self.assertTupleEqual(Practice.get_next_prev_pos(qt4_id, None), (None, None))