From 43377af85a3e736804b8efd224443683293ba11f Mon Sep 17 00:00:00 2001 From: Waqas Khalid Date: Thu, 3 Apr 2014 19:13:12 +0500 Subject: [PATCH] fix change name view by replacing the request.user simple lazy object with request.user.id LMS-2479 --- .../student/tests/test_change_name.py | 70 +++++++++++++++++++ common/djangoapps/student/views.py | 7 +- 2 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 common/djangoapps/student/tests/test_change_name.py diff --git a/common/djangoapps/student/tests/test_change_name.py b/common/djangoapps/student/tests/test_change_name.py new file mode 100644 index 0000000000..d2cb85b318 --- /dev/null +++ b/common/djangoapps/student/tests/test_change_name.py @@ -0,0 +1,70 @@ +""" +Unit tests for change_name view of student. +""" +import json + +from django.core.urlresolvers import reverse, NoReverseMatch +from django.test.client import Client +from django.test import TestCase + +from student.tests.factories import UserFactory +from student.models import UserProfile +from unittest.case import SkipTest + + +class TestChangeName(TestCase): + """ + Check the change_name view of student. + """ + def setUp(self): + self.student = UserFactory.create(password='test') + self.client = Client() + + def test_change_name_get_request(self): + """Get requests are not allowed in this view.""" + change_name_url = self.get_url() + resp = self.client.get(change_name_url) + self.assertEquals(resp.status_code, 405) + + def test_change_name_post_request(self): + """Name will be changed when provided with proper data.""" + self.client.login(username=self.student.username, password='test') + change_name_url = self.get_url() + resp = self.client.post(change_name_url, { + 'new_name': 'waqas', + 'rationale': 'change identity' + }) + response_data = json.loads(resp.content) + user = UserProfile.objects.get(user=self.student.id) + meta = json.loads(user.meta) + self.assertEquals(user.name, 'waqas') + self.assertEqual(meta['old_names'][0][1], 'change identity') + self.assertTrue(response_data['success']) + + def test_change_name_without_name(self): + """Empty string for name is not allowed in this view.""" + self.client.login(username=self.student.username, password='test') + change_name_url = self.get_url() + resp = self.client.post(change_name_url, { + 'new_name': '', + 'rationale': 'change identity' + }) + response_data = json.loads(resp.content) + self.assertFalse(response_data['success']) + + def test_unauthenticated(self): + """Unauthenticated user is not allowed to call this view.""" + change_name_url = self.get_url() + resp = self.client.post(change_name_url, { + 'new_name': 'waqas', + 'rationale': 'change identity' + }) + self.assertEquals(resp.status_code, 404) + + def get_url(self): + """Get the url of change_name view.""" + try: + change_name_url = reverse('change_name') + return change_name_url + except NoReverseMatch: + raise SkipTest("Skip this test if url cannot be found (ie running from CMS tests)") diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index 4e9226b325..db0472de20 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -1654,17 +1654,18 @@ def confirm_email_change(request, key): @ensure_csrf_cookie +@require_POST def change_name_request(request): """ Log a request for a new name. """ - if not request.user.is_authenticated: + if not request.user.is_authenticated(): raise Http404 try: - pnc = PendingNameChange.objects.get(user=request.user) + pnc = PendingNameChange.objects.get(user=request.user.id) except PendingNameChange.DoesNotExist: pnc = PendingNameChange() pnc.user = request.user - pnc.new_name = request.POST['new_name'] + pnc.new_name = request.POST['new_name'].strip() pnc.rationale = request.POST['rationale'] if len(pnc.new_name) < 2: return JsonResponse({