From: Tom Walker Date: Wed, 23 Jul 2014 16:00:16 +0000 (+0100) Subject: removed unused class from admin, added in filter for quiz marking list to filter... X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=9c9cbdcba8173e48b5812fa08ccfab05edcb5b76;p=django_quiz.git removed unused class from admin, added in filter for quiz marking list to filter by user or quiz title --- diff --git a/quiz/admin.py b/quiz/admin.py index c3f867b..7760b9f 100644 --- a/quiz/admin.py +++ b/quiz/admin.py @@ -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 diff --git a/quiz/tests.py b/quiz/tests.py index 17c5ab7..9be58c5 100644 --- a/quiz/tests.py +++ b/quiz/tests.py @@ -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') diff --git a/quiz/views.py b/quiz/views.py index 7f63556..76fc519 100644 --- a/quiz/views.py +++ b/quiz/views.py @@ -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):