]> git.parisson.com Git - django_quiz.git/commitdiff
removed unused class from admin, added in filter for quiz marking list to filter...
authorTom Walker <tomwalker0472@gmail.com>
Wed, 23 Jul 2014 16:00:16 +0000 (17:00 +0100)
committerTom Walker <tomwalker0472@gmail.com>
Wed, 23 Jul 2014 16:00:16 +0000 (17:00 +0100)
quiz/admin.py
quiz/tests.py
quiz/views.py

index c3f867b21d8f4bd1a1340a33c41768a0a03a3715..7760b9f869796f1dadac3e7572e7f8aa46873f30 100644 (file)
@@ -7,11 +7,6 @@ from multichoice.models import MCQuestion, Answer
 from true_false.models import TF_Question
 
 
-class QuestionInline(admin.TabularInline):
-    model = Question.quiz.through
-    filter_horizontal = ('content',)
-
-
 class AnswerInline(admin.TabularInline):
     model = Answer
 
index 17c5ab7b333625ee9c6a94dd48f067b1a199c16b..9be58c530a4cd9d3774fadd781bc930582cf9579 100644 (file)
@@ -335,39 +335,87 @@ class TestNonQuestionViews(TestCase):
         score, possible = anon_session_score(request.session)
         self.assertEqual((score, possible), (0.5, 2))
 
-    def test_paper_marking_view(self):
-        student = User.objects.create_user(username='luke',
-                                           email='luke@rebels.com',
-                                           password='top_secret')
-        teacher = User.objects.create_user(username='yoda',
-                                           email='yoda@jedis.com',
-                                           password='use_d@_force')
-        question1 = MCQuestion.objects.create(id=1, content='squawk')
-        question1.quiz.add(self.quiz1)
-        sitting1 = Sitting.objects.new_sitting(student, self.quiz1)
-        sitting2 = Sitting.objects.new_sitting(student, self.quiz2)
+
+class TestQuestionMarking(TestCase):
+
+    def setUp(self):
+        self.c1 = Category.objects.new_category(category='elderberries')
+        self.student = User.objects.create_user(username='luke',
+                                                email='luke@rebels.com',
+                                                password='top_secret')
+        self.teacher = User.objects.create_user(username='yoda',
+                                                email='yoda@jedis.com',
+                                                password='use_d@_force')
+        self.teacher.user_permissions.add(
+            Permission.objects.get(codename='view_sittings'))
+
+        self.quiz1 = Quiz.objects.create(id=1,
+                                         title='test quiz 1',
+                                         description='d1',
+                                         url='tq1',
+                                         category=self.c1,
+                                         single_attempt=True)
+        self.quiz2 = Quiz.objects.create(id=2,
+                                         title='test quiz 2',
+                                         description='d2',
+                                         url='tq2',
+                                         category=self.c1,
+                                         single_attempt=True)
+
+        self.question1 = MCQuestion.objects.create(id=1, content='squawk')
+        self.question1.quiz.add(self.quiz1)
+
+        sitting1 = Sitting.objects.new_sitting(self.student, self.quiz1)
+        sitting2 = Sitting.objects.new_sitting(self.student, self.quiz2)
         sitting1.complete = True
         sitting1.incorrect_questions = '1'
         sitting1.save()
         sitting2.complete = True
         sitting2.save()
 
+    def test_paper_marking_list_view(self):
         response = self.client.get('/q/marking/')
         self.assertRedirects(response, 'accounts/login/?next=/q/marking/',
                              status_code=302, target_status_code=404 or 200)
 
-        self.client.login(username='yoda', password='use_d@_force')
+        self.assertFalse(self.teacher.has_perm('view_sittings', self.student))
+
+        self.client.login(username='luke', password='top_secret')
         response = self.client.get('/q/marking/')
         self.assertRedirects(response, 'accounts/login/?next=/q/marking/',
                              status_code=302, target_status_code=404 or 200)
 
-        self.assertFalse(teacher.has_perm('view_sittings', teacher))
-        teacher.user_permissions.add(
-            Permission.objects.get(codename='view_sittings'))
-
+        self.client.login(username='yoda', password='use_d@_force')
         response = self.client.get('/q/marking/')
         self.assertContains(response, 'test quiz 1')
+        self.assertContains(response, 'test quiz 2')
+        self.assertContains(response, 'luke')
 
+    def test_paper_marking_list_view_filter_user(self):
+        new_student = User.objects.create_user(username='chewy',
+                                               email='chewy@rebels.com',
+                                               password='maaaawwwww')
+        chewy_sitting = Sitting.objects.new_sitting(new_student, self.quiz1)
+        chewy_sitting.complete = True
+        chewy_sitting.save()
+
+        self.client.login(username='yoda', password='use_d@_force')
+        response = self.client.get('/q/marking/',
+                                   {'user_filter': 'chewy'})
+
+        self.assertContains(response, 'chewy')
+        self.assertNotContains(response, 'luke')
+
+    def test_paper_marking_list_view_filter_quiz(self):
+        self.client.login(username='yoda', password='use_d@_force')
+        response = self.client.get('/q/marking/',
+                                   {'quiz_filter': '1'})
+
+        self.assertContains(response, 'quiz 1')
+        self.assertNotContains(response, 'quiz 2')
+
+    def test_paper_marking_detail_view(self):
+        self.client.login(username='yoda', password='use_d@_force')
         response = self.client.get('/q/marking/1/')
         self.assertContains(response, 'test quiz 1')
         self.assertContains(response, 'squawk')
index 7f63556264ad5d6bb09dbb4d4af4204f5f9d9b2d..76fc519b161e14772e4041a898329ee4fd1881f5 100644 (file)
@@ -1,6 +1,7 @@
 import random
 
 from django.contrib.auth.decorators import login_required, permission_required
+from django.contrib.auth.models import User
 from django.shortcuts import get_object_or_404, render, render_to_response
 from django.template import RequestContext
 from django.utils.decorators import method_decorator
@@ -77,8 +78,22 @@ class QuizMarkingList(QuizMarkerMixin, ListView):
         return super(QuizMarkingList, self).dispatch(request, *args, **kwargs)
 
     def get_queryset(self):
-        queryset = super(QuizMarkingList, self).get_queryset()
-        return queryset.filter(complete=True)
+        queryset = super(QuizMarkingList, self).get_queryset()\
+                                               .filter(complete=True)
+
+        user_filter = self.request.GET.get('user_filter')
+        if user_filter and User.objects\
+                               .filter(username__icontains=user_filter)\
+                               .exists():
+            return queryset.filter(user__username__icontains=user_filter)
+
+        quiz_filter = self.request.GET.get('quiz_filter')
+        if quiz_filter and Quiz.objects\
+                               .filter(title__icontains=quiz_filter)\
+                               .exists():
+            return queryset.filter(quiz__title__icontains=quiz_filter)
+
+        return queryset
 
 
 class QuizMarkingDetail(QuizMarkerMixin, DetailView):