diff options
author | Palaparthy Adityachandra | 2020-05-18 10:19:52 +0530 |
---|---|---|
committer | GitHub | 2020-05-18 10:19:52 +0530 |
commit | a72bd55bb9ba72b42ffd41b16c999321421e3224 (patch) | |
tree | f28a2300f03a3833b830e6968316ac99b8ecab64 /yaksh | |
parent | b264b673a2f84def1b9736a7a596b1acd5bb4d72 (diff) | |
parent | f8ce9e4e896231ae6f5c0193b76afd360d3bf1ea (diff) | |
download | online_test-a72bd55bb9ba72b42ffd41b16c999321421e3224.tar.gz online_test-a72bd55bb9ba72b42ffd41b16c999321421e3224.tar.bz2 online_test-a72bd55bb9ba72b42ffd41b16c999321421e3224.zip |
Merge pull request #705 from CruiseDevice/test_start_view_func
Add testcases for start view function
Diffstat (limited to 'yaksh')
-rw-r--r-- | yaksh/models.py | 16 | ||||
-rw-r--r-- | yaksh/test_views.py | 588 |
2 files changed, 597 insertions, 7 deletions
diff --git a/yaksh/models.py b/yaksh/models.py index 64489b8..b64ac77 100644 --- a/yaksh/models.py +++ b/yaksh/models.py @@ -773,14 +773,20 @@ class LearningModule(models.Model): def get_passing_status(self, user, course): course_status = CourseStatus.objects.filter(user=user, course=course) + ordered_units = [] if course_status.exists(): - learning_units_with_quiz = self.learning_unit.filter(type='quiz') + learning_units_with_quiz = self.learning_unit.filter( + type='quiz' + ).order_by("order") ordered_units = learning_units_with_quiz.order_by("order") - statuses = [ - unit.quiz.get_answerpaper_passing_status(user, course) - for unit in ordered_units - ] + if ordered_units: + statuses = [ + unit.quiz.get_answerpaper_passing_status(user, course) + for unit in ordered_units + ] + else: + statuses = [] if not statuses: status = False diff --git a/yaksh/test_views.py b/yaksh/test_views.py index 94b81ad..5d2e5b5 100644 --- a/yaksh/test_views.py +++ b/yaksh/test_views.py @@ -6402,7 +6402,7 @@ class TestPost(TestCase): self.assertContains(response, 'csrfmiddlewaretoken') def test_view_course_forum_denies_anonymous_user(self): - url = reverse('yaksh:course_forum', kwargs= { + url = reverse('yaksh:course_forum', kwargs={ 'course_id': self.course.id }) response = self.client.get(url, follow=True) @@ -6464,7 +6464,6 @@ class TestPost(TestCase): }) self.assertContains(response, 'href="{0}'.format(post_comments_url)) - def test_new_post_valid_post_data(self): self.client.login( username=self.student.username, @@ -6812,3 +6811,588 @@ class TestPostComment(TestCase): self.user.delete() self.course.delete() self.mod_group.delete() + + +class TestStartExam(TestCase): + def setUp(self): + self.client = Client() + self.mod_group = Group.objects.create(name='moderator') + tzone = pytz.timezone('UTC') + + # Create Moderator with profile + self.user1_plaintext_pass = 'demo' + self.user1 = User.objects.create_user( + username='demo_user', + password=self.user1_plaintext_pass, + first_name='first_name', + last_name='last_name', + email='demo@test.com', + ) + Profile.objects.create( + user=self.user1, + roll_number=10, + institute='IIT', + department='Chemical', + position='Moderator', + timezone='UTC', + is_moderator=True + ) + + # Add to moderator group + self.mod_group.user_set.add(self.user1) + + # Create Student + self.student_plaintext_pass = 'demo_student' + self.student = User.objects.create_user( + username='demo_student', + password=self.student_plaintext_pass, + first_name='student_first_name', + last_name='student_last_name', + email='demo_student@test.com' + ) + Profile.objects.create( + user=self.student, + roll_number=10, + institute='IIT', + department='Chemical', + position='Moderator', + timezone='UTC' + ) + + # Create courses for user1 + self.user1_course1 = Course.objects.create( + name="Demo Course", + enrollment="Enroll Request", creator=self.user1 + ) + # course1 status + self.course1_status = CourseStatus.objects.create( + course=self.user1_course1, user=self.user1 + ) + + # Create learning modules for user1 + self.learning_module1 = LearningModule.objects.create( + order=1, name="Demo Module", description="Demo Module", + check_prerequisite=False, creator=self.user1 + ) + self.learning_module2 = LearningModule.objects.create( + order=2, name="Demo Module 2", description="Demo Module 2", + check_prerequisite=False, creator=self.user1 + ) + + self.quiz1 = Quiz.objects.create( + time_between_attempts=0, description='Demo Quiz', + creator=self.user1 + ) + + self.quiz2 = Quiz.objects.create( + time_between_attempts=0, description='Demo Quiz 2', + creator=self.user1 + ) + + self.question_paper1 = QuestionPaper.objects.create( + quiz=self.quiz1, total_marks=1.0 + ) + + self.question_paper2 = QuestionPaper.objects.create( + quiz=self.quiz2, total_marks=1.0 + ) + + self.question1 = Question.objects.create( + summary="Test_question 1", description="Add two numbers", + points=1.0, language="python", type="code", user=self.user1 + ) + + user_answer = "def add(a, b)\n\treturn a+b" + self.new_answer = Answer.objects.create( + question=self.question1, answer=user_answer, + correct=True, error=json.dumps([]) + ) + + self.answerpaper = AnswerPaper.objects.create( + user=self.student, question_paper=self.question_paper1, + attempt_number=1, + start_time=datetime(2014, 10, 9, 10, 8, 15, 0, tzone), + end_time=datetime(2020, 10, 9, 10, 15, 15, 0, tzone), + user_ip="127.0.0.1", status="inprogress", passed=True, + percent=1, marks_obtained=1, course=self.user1_course1 + ) + + self.answerpaper.answers.add(self.new_answer) + self.answerpaper.questions_answered.add(self.question1) + + # Create lessons for user1 + self.lesson1 = Lesson.objects.create( + name="Demo Lesson", description="Demo Lession", + creator=self.user1 + ) + + self.lesson2 = Lesson.objects.create( + name="Test Lesson", description="Test Lession", + creator=self.user1 + ) + + # Create units for lesson and quiz + self.lesson_unit1 = LearningUnit.objects.create( + order=1, type="lesson", lesson=self.lesson1 + ) + self.quiz_unit1 = LearningUnit.objects.create( + order=2, type="quiz", quiz=self.quiz1 + ) + self.lesson_unit2 = LearningUnit.objects.create( + order=1, type="lesson", lesson=self.lesson2 + ) + self.quiz_unit2 = LearningUnit.objects.create( + order=2, type="quiz", quiz=self.quiz2 + ) + + # Add units to module + self.learning_module1.learning_unit.add(self.lesson_unit1) + self.learning_module1.learning_unit.add(self.quiz_unit1) + + self.learning_module2.learning_unit.add(self.lesson_unit2) + self.learning_module2.learning_unit.add(self.quiz_unit2) + + # Add module to course + self.user1_course1.learning_module.add(self.learning_module1) + self.user1_course1.learning_module.add(self.learning_module2) + + def test_start_question_paper_does_not_exists_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': 99, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 404) + + def test_start_question_paper_does_not_exists_for_moderator(self): + self.client.login( + username=self.user1.username, + password=self.user1_plaintext_pass + ) + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': 99, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_question_paper_has_no_question_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 404) + + def test_start_question_paper_has_no_question_for_moderator(self): + self.client.login( + username=self.user1.username, + password=self.user1_plaintext_pass + ) + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_has_no_active_learning_module_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + self.learning_module1.active = False + self.learning_module1.save() + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 404) + + def test_start_learning_module_has_prerequisite_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper2.fixed_questions.add(self.question1) + self.learning_module2.active = True + self.learning_module2.check_prerequisite = True + self.learning_module2.save() + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper2.id, + 'module_id': self.learning_module2.id, + 'course_id': self.user1_course1.id + }) + + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_learning_module_prerequisite_passes_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper2.fixed_questions.add(self.question1) + self.learning_module2.active = True + self.learning_module2.check_prerequisite = False + self.learning_module2.check_prerequisite_passes = True + self.learning_module2.save() + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper2.id, + 'module_id': self.learning_module2.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_user_enrolled_in_the_course_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + self.learning_module1.active = True + self.learning_module1.check_prerequisite = False + self.learning_module1.check_prerequisite_passes = False + self.learning_module1.save() + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_user_enrolled_in_the_course_for_moderator(self): + self.client.login( + username=self.user1.username, + password=self.user1_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + self.learning_module1.active = True + self.learning_module1.check_prerequisite = False + self.learning_module1.check_prerequisite_passes = False + self.learning_module1.save() + + self.user1_course1.is_trial = True + self.user1_course1.save() + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_course_is_active_and_not_expired_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + self.learning_module1.active = True + self.learning_module1.check_prerequisite = False + self.learning_module1.check_prerequisite_passes = False + self.learning_module1.save() + + self.user1_course1.students.add(self.student) + self.user1_course1.active = False + self.user1_course1.end_enroll_time = timezone.now() + self.user1_course1.save() + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_course_is_active_and_not_expired_for_moderator(self): + self.client.login( + username=self.user1.username, + password=self.user1_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + self.learning_module1.active = True + self.learning_module1.check_prerequisite = False + self.learning_module1.check_prerequisite_passes = False + self.learning_module1.save() + + self.user1_course1.students.add(self.user1) + self.user1_course1.active = False + self.user1_course1.end_enroll_time = timezone.now() + self.user1_course1.is_trial = True + self.user1_course1.save() + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_quiz_is_active_and_is_not_expired_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + self.learning_module1.active = True + self.learning_module1.check_prerequisite = False + self.learning_module1.check_prerequisite_passes = False + self.learning_module1.save() + + self.user1_course1.students.add(self.student) + self.user1_course1.save() + + self.question_paper1.quiz.end_date_time = timezone.now() + self.question_paper1.quiz.active = False + self.question_paper1.quiz.save() + + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_quiz_is_active_and_is_not_expired_for_moderator(self): + self.client.login( + username=self.user1.username, + password=self.user1_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + self.learning_module1.active = True + self.learning_module1.check_prerequisite = False + self.learning_module1.check_prerequisite_passes = False + self.learning_module1.save() + + self.user1_course1.students.add(self.user1) + self.user1_course1.is_trial = True + self.user1_course1.save() + + self.question_paper1.quiz.end_date_time = timezone.now() + self.question_paper1.quiz.active = False + self.question_paper1.quiz.save() + + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_prereq_check_and_pass_criteria_for_quiz_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper2.fixed_questions.add(self.question1) + self.learning_module2.active = True + self.learning_module2.check_prerequisite = False + self.learning_module2.check_prerequisite_passes = False + self.learning_module2.save() + + self.user1_course1.students.add(self.student) + self.user1_course1.is_trial = True + self.user1_course1.save() + + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper2.id, + 'module_id': self.learning_module2.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_prereq_check_and_pass_criteria_for_quiz_for_moderator(self): + self.client.login( + username=self.user1.username, + password=self.user1_plaintext_pass + ) + self.question_paper2.fixed_questions.add(self.question1) + self.learning_module2.active = True + self.learning_module2.check_prerequisite = False + self.learning_module2.check_prerequisite_passes = False + self.learning_module2.save() + + self.user1_course1.students.add(self.user1) + self.user1_course1.is_trial = True + self.user1_course1.save() + + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper2.id, + 'module_id': self.learning_module2.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_not_allowed_to_start_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + + self.learning_module1.active = True + self.learning_module1.check_prerequisite = False + self.learning_module1.check_prerequisite_passes = False + self.learning_module1.save() + + self.user1_course1.students.add(self.student) + self.user1_course1.is_trial = True + self.user1_course1.save() + + learning_unit = self.learning_module1.learning_unit.get( + quiz=self.question_paper1.quiz.id + ) + learning_unit.check_prerequisite = False + learning_unit.save() + + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper1.id, + 'module_id': self.learning_module1.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_not_allowed_to_start_for_moderator(self): + self.client.login( + username=self.user1.username, + password=self.user1_plaintext_pass + ) + self.question_paper1.fixed_questions.add(self.question1) + + self.learning_module1.active = True + self.learning_module1.check_prerequisite = False + self.learning_module1.check_prerequisite_passes = False + self.learning_module1.save() + + self.user1_course1.students.add(self.user1) + self.user1_course1.is_trial = True + self.user1_course1.save() + + learning_unit = self.learning_module1.learning_unit.get( + quiz=self.question_paper1.quiz.id + ) + learning_unit.check_prerequisite = False + learning_unit.save() + + def test_start_allowed_to_start_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper2.fixed_questions.add(self.question1) + + self.learning_module2.active = True + self.learning_module2.check_prerequisite = False + self.learning_module2.check_prerequisite_passes = False + self.learning_module2.save() + + self.user1_course1.students.add(self.student) + self.user1_course1.is_trial = True + self.user1_course1.save() + + learning_unit = self.learning_module2.learning_unit.get( + quiz=self.question_paper2.quiz.id + ) + learning_unit.check_prerequisite = False + learning_unit.save() + + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper2.id, + 'module_id': self.learning_module2.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_allowed_to_start_for_moderator(self): + self.client.login( + username=self.user1.username, + password=self.user1_plaintext_pass + ) + self.question_paper2.fixed_questions.add(self.question1) + + self.learning_module2.active = True + self.learning_module2.check_prerequisite = False + self.learning_module2.check_prerequisite_passes = False + self.learning_module2.save() + + self.user1_course1.students.add(self.user1) + self.user1_course1.is_trial = True + self.user1_course1.save() + + learning_unit = self.learning_module2.learning_unit.get( + quiz=self.question_paper2.quiz.id + ) + learning_unit.check_prerequisite = False + learning_unit.save() + + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper2.id, + 'module_id': self.learning_module2.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def test_start_allowed_to_start_when_quiz_is_exercise_for_user(self): + self.client.login( + username=self.student.username, + password=self.student_plaintext_pass + ) + self.question_paper2.fixed_questions.add(self.question1) + + self.learning_module2.active = True + self.learning_module2.check_prerequisite = False + self.learning_module2.check_prerequisite_passes = False + self.learning_module2.save() + + self.user1_course1.students.add(self.student) + self.user1_course1.is_trial = True + self.user1_course1.save() + + learning_unit = self.learning_module2.learning_unit.get( + quiz=self.question_paper2.quiz.id + ) + learning_unit.check_prerequisite = False + learning_unit.save() + + self.question_paper2.quiz.is_exercise = True + self.question_paper2.quiz.save() + + url = reverse('yaksh:start_quiz', kwargs={ + 'questionpaper_id': self.question_paper2.id, + 'module_id': self.learning_module2.id, + 'course_id': self.user1_course1.id + }) + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + def tearDown(self): + self.client.logout() + self.user1.delete() + self.student.delete() + self.quiz1.delete() + self.user1_course1.delete() |