diff options
-rw-r--r-- | yaksh/models.py | 25 | ||||
-rw-r--r-- | yaksh/test_models.py | 64 |
2 files changed, 81 insertions, 8 deletions
diff --git a/yaksh/models.py b/yaksh/models.py index 1e45851..9a406c3 100644 --- a/yaksh/models.py +++ b/yaksh/models.py @@ -78,7 +78,6 @@ string_check_type = ( attempts = [(i, i) for i in range(1, 6)] attempts.append((-1, 'Infinite')) -days_between_attempts = [(j, j) for j in range(401)] test_status = ( ('inprogress', 'Inprogress'), @@ -294,8 +293,8 @@ class Quiz(models.Model): # Number of attempts for the quiz attempts_allowed = models.IntegerField(default=1, choices=attempts) - time_between_attempts = models.IntegerField( - "Number of Days", choices=days_between_attempts + time_between_attempts = models.FloatField( + "Time Between Quiz Attempts in hours" ) is_trial = models.BooleanField(default=False) @@ -335,20 +334,32 @@ class Quiz(models.Model): return demo_quiz def get_total_students(self, course): + try: + qp = self.questionpaper_set.get().id + except QuestionPaper.DoesNotExist: + qp = None return AnswerPaper.objects.filter( - question_paper=self.questionpaper_set.get().id, + question_paper=qp, course=course ).values_list("user", flat=True).distinct().count() def get_passed_students(self, course): + try: + qp = self.questionpaper_set.get().id + except QuestionPaper.DoesNotExist: + qp = None return AnswerPaper.objects.filter( - question_paper=self.questionpaper_set.get().id, + question_paper=qp, course=course, passed=True ).values_list("user", flat=True).distinct().count() def get_failed_students(self, course): + try: + qp = self.questionpaper_set.get().id + except QuestionPaper.DoesNotExist: + qp = None return AnswerPaper.objects.filter( - question_paper=self.questionpaper_set.get().id, + question_paper=qp, course=course, passed=False ).values_list("user", flat=True).distinct().count() @@ -1208,7 +1219,7 @@ class QuestionPaper(models.Model): user=user, questionpaper=self, course_id=course_id ) if last_attempt: - time_lag = (timezone.now() - last_attempt.start_time).days + time_lag = (timezone.now() - last_attempt.start_time).total_seconds() / 3600 return time_lag >= self.quiz.time_between_attempts else: return True diff --git a/yaksh/test_models.py b/yaksh/test_models.py index 7086a1e..df8372c 100644 --- a/yaksh/test_models.py +++ b/yaksh/test_models.py @@ -449,10 +449,73 @@ class QuizTestCases(unittest.TestCase): self.course = Course.objects.get(name="Python Course") self.creator = User.objects.get(username="creator") self.teacher = User.objects.get(username="demo_user2") + self.student1 = User.objects.get(username='demo_user3') + self.student2 = User.objects.get(username='demo_user4') self.quiz1 = Quiz.objects.get(description='demo quiz 1') self.quiz2 = Quiz.objects.get(description='demo quiz 2') + self.quiz3 = Quiz.objects.create( + start_date_time=datetime(2015, 10, 9, 10, 8, 15, 0, tzinfo=pytz.utc), + end_date_time=datetime(2199, 10, 9, 10, 8, 15, 0, tzinfo=pytz.utc), + duration=30, active=True, + attempts_allowed=1, time_between_attempts=0, + description='demo quiz 3', pass_criteria=0, + instructions="Demo Instructions" + ) + self.question_paper3 = QuestionPaper.objects.create(quiz=self.quiz3) + self.quiz4 = Quiz.objects.create( + start_date_time=datetime(2015, 10, 9, 10, 8, 15, 0, tzinfo=pytz.utc), + end_date_time=datetime(2199, 10, 9, 10, 8, 15, 0, tzinfo=pytz.utc), + duration=30, active=True, + attempts_allowed=1, time_between_attempts=0, + description='demo quiz 4', pass_criteria=0, + instructions="Demo Instructions" + ) + self.answerpaper1 = AnswerPaper.objects.create( + user=self.student1, + question_paper=self.question_paper3, + course=self.course, + attempt_number=1, + start_time=datetime(2015, 10, 9, 10, 8, 15, 0, tzinfo=pytz.utc), + end_time=datetime(2015, 10, 9, 10, 28, 15, 0, tzinfo=pytz.utc), + passed=True + ) + self.answerpaper2 = AnswerPaper.objects.create( + user=self.student2, + question_paper=self.question_paper3, + course=self.course, + attempt_number=1, + start_time=datetime(2015, 10, 9, 10, 8, 15, 0, tzinfo=pytz.utc), + end_time=datetime(2015, 10, 9, 10, 28, 15, 0, tzinfo=pytz.utc), + passed=False + ) self.trial_course = Course.objects.create_trial_course(self.creator) + def tearDown(self): + self.answerpaper1.delete() + self.answerpaper2.delete() + self.trial_course.delete() + self.quiz3.delete() + self.quiz4.delete() + self.question_paper3.delete() + + def test_get_total_students(self): + self.assertEqual(self.quiz3.get_total_students(self.course), 2) + + def test_get_total_students_without_questionpaper(self): + self.assertEqual(self.quiz4.get_total_students(self.course), 0) + + def test_get_passed_students(self): + self.assertEqual(self.quiz3.get_passed_students(self.course), 1) + + def test_get_passed_students_without_questionpaper(self): + self.assertEqual(self.quiz4.get_passed_students(self.course), 0) + + def test_get_failed_students(self): + self.assertEqual(self.quiz3.get_failed_students(self.course), 1) + + def test_get_failed_students_without_questionpaper(self): + self.assertEqual(self.quiz4.get_failed_students(self.course), 0) + def test_quiz(self): """ Test Quiz""" self.assertEqual((self.quiz1.start_date_time).strftime('%Y-%m-%d'), @@ -530,7 +593,6 @@ class QuizTestCases(unittest.TestCase): self.assertTrue(self.quiz1.view_answerpaper) - ############################################################################### class QuestionPaperTestCases(unittest.TestCase): @classmethod |