/create_account: use proper HTTP status codes
Use status code 400 when there is a validation error in creating an account.
This commit is contained in:
@@ -6,49 +6,51 @@ import json
|
||||
import uuid
|
||||
|
||||
from django.conf import settings
|
||||
from django.test import TestCase
|
||||
from django.core.urlresolvers import reverse
|
||||
from mock import patch
|
||||
|
||||
from courseware.tests.helpers import LoginEnrollmentTestCase, check_for_post_code
|
||||
|
||||
|
||||
class TestExtraRegistrationVariables(LoginEnrollmentTestCase):
|
||||
class TestExtraRegistrationVariables(TestCase):
|
||||
"""
|
||||
Test that extra registration variables are properly checked according to settings
|
||||
"""
|
||||
|
||||
def _do_register_attempt(self, **extra_fields_values):
|
||||
"""
|
||||
Helper method to make the call to the do registration
|
||||
"""
|
||||
def setUp(self):
|
||||
super(TestExtraRegistrationVariables, self).setUp()
|
||||
self.url = reverse('create_account')
|
||||
username = 'foo_bar' + uuid.uuid4().hex
|
||||
fields_values = {
|
||||
self.url_params = {
|
||||
'username': username,
|
||||
'name': username,
|
||||
'email': 'foo' + uuid.uuid4().hex + '@bar.com',
|
||||
'password': 'password',
|
||||
'name': username,
|
||||
'terms_of_service': 'true',
|
||||
'honor_code': 'true',
|
||||
}
|
||||
fields_values = dict(fields_values.items() + extra_fields_values.items())
|
||||
resp = check_for_post_code(self, 200, reverse('create_account'), fields_values)
|
||||
data = json.loads(resp.content)
|
||||
return data
|
||||
|
||||
def test_default_missing_honor(self):
|
||||
"""
|
||||
By default, the honor code must be required
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='')
|
||||
self.assertEqual(data['success'], False)
|
||||
self.assertEqual(data['value'], u'To enroll, you must follow the honor code.')
|
||||
self.url_params['honor_code'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(
|
||||
obj['value'],
|
||||
u'To enroll, you must follow the honor code.',
|
||||
)
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'honor_code': 'optional'})
|
||||
def test_optional_honor(self):
|
||||
"""
|
||||
With the honor code is made optional, should pass without extra vars
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='')
|
||||
self.assertEqual(data['success'], True)
|
||||
self.url_params['honor_code'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(obj['success'], True)
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {
|
||||
'level_of_education': 'hidden',
|
||||
@@ -63,89 +65,164 @@ class TestExtraRegistrationVariables(LoginEnrollmentTestCase):
|
||||
"""
|
||||
When the fields are all hidden, should pass without extra vars
|
||||
"""
|
||||
data = self._do_register_attempt()
|
||||
self.assertEqual(data['success'], True)
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertTrue(obj['success'])
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'city': 'required'})
|
||||
def test_required_city_missing(self):
|
||||
"""
|
||||
Should require the city if configured as 'required' but missing
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='true', city='')
|
||||
self.assertEqual(data['success'], False)
|
||||
self.assertEqual(data['value'], u'A city is required')
|
||||
self.url_params['city'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(
|
||||
obj['value'],
|
||||
u'A city is required',
|
||||
)
|
||||
|
||||
data = self._do_register_attempt(honor_code='true', city='New York')
|
||||
self.assertEqual(data['success'], True)
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'city': 'required'})
|
||||
def test_required_city(self):
|
||||
"""
|
||||
Should require the city if configured as 'required' but missing
|
||||
"""
|
||||
self.url_params['city'] = 'New York'
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertTrue(obj['success'])
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'country': 'required'})
|
||||
def test_required_country_missing(self):
|
||||
"""
|
||||
Should require the country if configured as 'required' but missing
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='true', country='')
|
||||
self.assertEqual(data['success'], False)
|
||||
self.assertEqual(data['value'], u'A country is required')
|
||||
self.url_params['country'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(
|
||||
obj['value'],
|
||||
u'A country is required',
|
||||
)
|
||||
|
||||
data = self._do_register_attempt(honor_code='true', country='New York')
|
||||
self.assertEqual(data['success'], True)
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'country': 'required'})
|
||||
def test_required_country(self):
|
||||
self.url_params['country'] = 'New York'
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertTrue(obj['success'])
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'level_of_education': 'required'})
|
||||
def test_required_level_of_education_missing(self):
|
||||
"""
|
||||
Should require the level_of_education if configured as 'required' but missing
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='true', level_of_education='')
|
||||
self.assertEqual(data['success'], False)
|
||||
self.assertEqual(data['value'], u'A level of education is required.')
|
||||
self.url_params['level_of_education'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(
|
||||
obj['value'],
|
||||
u'A level of education is required',
|
||||
)
|
||||
|
||||
data = self._do_register_attempt(honor_code='true', level_of_education='p')
|
||||
self.assertEqual(data['success'], True)
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'level_of_education': 'required'})
|
||||
def test_required_level_of_education(self):
|
||||
self.url_params['level_of_education'] = 'p'
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertTrue(obj['success'])
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'gender': 'required'})
|
||||
def test_required_gender_missing(self):
|
||||
"""
|
||||
Should require the gender if configured as 'required' but missing
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='true', gender='')
|
||||
self.assertEqual(data['success'], False)
|
||||
self.assertEqual(data['value'], u'Your gender is required')
|
||||
self.url_params['gender'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(
|
||||
obj['value'],
|
||||
u'Your gender is required',
|
||||
)
|
||||
|
||||
data = self._do_register_attempt(honor_code='true', gender='m')
|
||||
self.assertEqual(data['success'], True)
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'gender': 'required'})
|
||||
def test_required_gender(self):
|
||||
self.url_params['gender'] = 'm'
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertTrue(obj['success'])
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'year_of_birth': 'required'})
|
||||
def test_required_year_of_birth_missing(self):
|
||||
"""
|
||||
Should require the year_of_birth if configured as 'required' but missing
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='true', year_of_birth='')
|
||||
self.assertEqual(data['success'], False)
|
||||
self.assertEqual(data['value'], u'Your year of birth is required')
|
||||
self.url_params['year_of_birth'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(
|
||||
obj['value'],
|
||||
u'Your year of birth is required',
|
||||
)
|
||||
|
||||
data = self._do_register_attempt(honor_code='true', year_of_birth='1982')
|
||||
self.assertEqual(data['success'], True)
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'year_of_birth': 'required'})
|
||||
def test_required_year_of_birth(self):
|
||||
self.url_params['year_of_birth'] = '1982'
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertTrue(obj['success'])
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'mailing_address': 'required'})
|
||||
def test_required_mailing_address_missing(self):
|
||||
"""
|
||||
Should require the mailing_address if configured as 'required' but missing
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='true', mailing_address='')
|
||||
self.assertEqual(data['success'], False)
|
||||
self.assertEqual(data['value'], u'Your mailing address is required')
|
||||
self.url_params['mailing_address'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(
|
||||
obj['value'],
|
||||
u'Your mailing address is required',
|
||||
)
|
||||
|
||||
data = self._do_register_attempt(honor_code='true', mailing_address='my address')
|
||||
self.assertEqual(data['success'], True)
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'mailing_address': 'required'})
|
||||
def test_required_mailing_address(self):
|
||||
self.url_params['mailing_address'] = 'my address'
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertTrue(obj['success'])
|
||||
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'goals': 'required'})
|
||||
def test_required_goals_missing(self):
|
||||
"""
|
||||
Should require the goals if configured as 'required' but missing
|
||||
"""
|
||||
data = self._do_register_attempt(honor_code='true', goals='')
|
||||
self.assertEqual(data['success'], False)
|
||||
self.assertEqual(data['value'], u'A description of your goals is required')
|
||||
self.url_params['goals'] = ''
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
obj = json.loads(response.content)
|
||||
self.assertEqual(
|
||||
obj['value'],
|
||||
u'A description of your goals is required',
|
||||
)
|
||||
|
||||
data = self._do_register_attempt(honor_code='true', goals='my goals')
|
||||
self.assertEqual(data['success'], True)
|
||||
@patch.dict(settings.REGISTRATION_EXTRA_FIELDS, {'goals': 'required'})
|
||||
def test_required_goals(self):
|
||||
self.url_params['goals'] = 'my goals'
|
||||
response = self.client.post(self.url, self.url_params)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
obj = json.loads(response.content)
|
||||
self.assertTrue(obj['success'])
|
||||
|
||||
Reference in New Issue
Block a user