fix change name view by replacing the request.user simple lazy object with request.user.id

LMS-2479
This commit is contained in:
Waqas Khalid
2014-04-03 19:13:12 +05:00
parent fe4bd4cbad
commit 43377af85a
2 changed files with 74 additions and 3 deletions

View File

@@ -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)")

View File

@@ -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({