From 908fd46f4db3360b7aaf673dd9bc641dfd43bc1e Mon Sep 17 00:00:00 2001 From: jsa Date: Tue, 30 Jul 2013 01:43:01 -0400 Subject: [PATCH] notification_prefs: add ajax endpoint to get preference status --- lms/djangoapps/notification_prefs/tests.py | 32 +++++++++++++++++++++- lms/djangoapps/notification_prefs/views.py | 19 ++++--------- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/lms/djangoapps/notification_prefs/tests.py b/lms/djangoapps/notification_prefs/tests.py index c70b19e92b..06a7521016 100644 --- a/lms/djangoapps/notification_prefs/tests.py +++ b/lms/djangoapps/notification_prefs/tests.py @@ -1,3 +1,5 @@ +import json + from django.contrib.auth.models import AnonymousUser from django.core.exceptions import PermissionDenied from django.http import Http404 @@ -7,7 +9,7 @@ from django.test.utils import override_settings from mock import Mock, patch from notification_prefs import NOTIFICATION_PREF_KEY -from notification_prefs.views import ajax_enable, ajax_disable, unsubscribe +from notification_prefs.views import ajax_enable, ajax_disable, ajax_status, unsubscribe from student.tests.factories import UserFactory from user_api.models import UserPreference @@ -57,6 +59,34 @@ class NotificationPrefViewTest(TestCase): UserPreference.objects.filter(user=user, key=NOTIFICATION_PREF_KEY).exists() ) + # AJAX status view + + def test_ajax_status_get_0(self): + request = self.request_factory.get("dummy") + request.user = self.user + response = ajax_status(request) + self.assertEqual(response.status_code, 200) + self.assertEqual(json.loads(response.content), {"status":0}) + + def test_ajax_status_get_1(self): + self.create_prefs() + request = self.request_factory.get("dummy") + request.user = self.user + response = ajax_status(request) + self.assertEqual(response.status_code, 200) + self.assertEqual(json.loads(response.content), {"status":1}) + + def test_ajax_status_post(self): + request = self.request_factory.post("dummy") + request.user = self.user + response = ajax_status(request) + self.assertEqual(response.status_code, 405) + + def test_ajax_status_anon_user(self): + request = self.request_factory.get("dummy") + request.user = AnonymousUser() + self.assertRaises(PermissionDenied, ajax_status, request) + # AJAX enable view def test_ajax_enable_get(self): diff --git a/lms/djangoapps/notification_prefs/views.py b/lms/djangoapps/notification_prefs/views.py index bacb98bc7d..e281f0306e 100644 --- a/lms/djangoapps/notification_prefs/views.py +++ b/lms/djangoapps/notification_prefs/views.py @@ -1,5 +1,6 @@ from base64 import urlsafe_b64encode, urlsafe_b64decode from hashlib import sha256 +import json from Crypto.Cipher import AES from Crypto import Random @@ -131,7 +132,7 @@ def ajax_disable(request): return HttpResponse(status=204) -@require_POST +@require_GET def ajax_status(request): """ A view that sends notifications status for the authenticated user @@ -142,22 +143,12 @@ def ajax_status(request): if not request.user.is_authenticated(): raise PermissionDenied - prefs UserPreference.objects.get( + qs = UserPreference.objects.filter( user=request.user, - key=NOTIFICATION_PREF_KEY, - defaults={ - "value": UsernameCipher.encrypt(request.user.username) - } + key=NOTIFICATION_PREF_KEY ) - if prefs - answer = true - else - answer = false - - return utils.JsonResponse({ - 'status': answer - }) + return HttpResponse(json.dumps({"status":len(qs)}), content_type="application/json") @require_GET