summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPalaparthy Adityachandra2020-05-18 10:19:52 +0530
committerGitHub2020-05-18 10:19:52 +0530
commita72bd55bb9ba72b42ffd41b16c999321421e3224 (patch)
treef28a2300f03a3833b830e6968316ac99b8ecab64
parentb264b673a2f84def1b9736a7a596b1acd5bb4d72 (diff)
parentf8ce9e4e896231ae6f5c0193b76afd360d3bf1ea (diff)
downloadonline_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
-rw-r--r--yaksh/models.py16
-rw-r--r--yaksh/test_views.py588
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()