Skip to content

Commit

Permalink
Merge 9a1ea33 into e9c5e89
Browse files Browse the repository at this point in the history
  • Loading branch information
adam-thomas committed Oct 1, 2015
2 parents e9c5e89 + 9a1ea33 commit 226adfb
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 41 deletions.
3 changes: 2 additions & 1 deletion .travis.yml
Expand Up @@ -19,7 +19,8 @@ matrix:
- env: TOX_ENV=py34-djangopre
install:
- psql -c 'CREATE DATABASE user_management' -U postgres;
- pip install tox!=1.9.1 coveralls
- pip install -U pip
- pip install tox==1.9.0 coveralls
script:
- tox -e $TOX_ENV
after_success:
Expand Down
46 changes: 18 additions & 28 deletions user_management/api/avatar/tests/test_views.py
Expand Up @@ -17,7 +17,7 @@
TEST_SERVER = 'http://testserver'


def _simple_png():
def simple_png():
"""Create a 1x1 black png in memory."""
image_file = BytesIO()
image = Image.new('RGBA', (1, 1))
Expand All @@ -30,23 +30,19 @@ def _simple_png():
)
image_file.seek(0)
return image_file
SIMPLE_PNG = _simple_png()


class TestProfileAvatar(APIRequestTestCase):
view_class = views.ProfileAvatar

def tearDown(self):
SIMPLE_PNG.seek(0)

def test_get(self):
user = UserFactory.build(avatar=SIMPLE_PNG)
user = UserFactory.build(avatar=simple_png())

request = self.create_request(user=user)
view = self.view_class.as_view()
response = view(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['avatar'], SIMPLE_PNG.url)
self.assertEqual(response.data['avatar'], simple_png().url)

def test_get_no_avatar(self):
user = UserFactory.build()
Expand All @@ -64,7 +60,7 @@ def test_unauthenticated_put(self):
The view should respond with a 401 response, confirming the user
is unauthorised to put to the view.
"""
data = {'avatar': SIMPLE_PNG}
data = {'avatar': simple_png()}
request = APIRequestFactory().put('/', data=data)
view = self.view_class.as_view()
response = view(request)
Expand All @@ -73,7 +69,7 @@ def test_unauthenticated_put(self):

def test_authenticated_put(self):
user = UserFactory.create()
data = {'avatar': SIMPLE_PNG}
data = {'avatar': simple_png()}

request = APIRequestFactory().put('/', data=data)
request.user = user
Expand All @@ -84,9 +80,8 @@ def test_authenticated_put(self):
mocked_url.return_value = 'mocked-url'
response = view(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
SIMPLE_PNG.seek(0)
user = User.objects.get(pk=user.pk)
self.assertEqual(user.avatar.read(), SIMPLE_PNG.read())
self.assertEqual(user.avatar.read(), simple_png().read())

def test_options(self):
request = self.create_request('options')
Expand All @@ -95,7 +90,7 @@ def test_options(self):
self.assertEqual(response.status_code, status.HTTP_200_OK)

def test_get_resize(self):
user = UserFactory.build(avatar=SIMPLE_PNG)
user = UserFactory.build(avatar=simple_png())

data = {
'width': 10,
Expand All @@ -111,7 +106,7 @@ def test_get_resize(self):
self.assertNotEqual(response.data['avatar'], expected_url)

def test_get_resize_width(self):
user = UserFactory.build(avatar=SIMPLE_PNG)
user = UserFactory.build(avatar=simple_png())

data = {
'width': 10,
Expand All @@ -126,7 +121,7 @@ def test_get_resize_width(self):
self.assertNotEqual(response.data['avatar'], expected_url)

def test_get_resize_height(self):
user = UserFactory.build(avatar=SIMPLE_PNG)
user = UserFactory.build(avatar=simple_png())

data = {
'height': 10,
Expand All @@ -149,7 +144,7 @@ def test_delete_without_avatar(self):
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

def test_delete_with_avatar(self):
user = UserFactory.create(avatar=SIMPLE_PNG)
user = UserFactory.create(avatar=simple_png())
request = self.create_request('delete', user=user)
view = self.view_class.as_view()
response = view(request)
Expand All @@ -171,7 +166,7 @@ def test_send_without_token_header(self):
user = UserFactory.create()
token = AuthTokenFactory(user=user)

data = {'avatar': SIMPLE_PNG, 'token': token.key}
data = {'avatar': simple_png(), 'token': token.key}
url = reverse('user_management_api:profile_avatar')
response = client.post(url, data=data)

Expand All @@ -185,10 +180,7 @@ class TestUserAvatar(APIRequestTestCase):

def setUp(self):
self.user = UserFactory.build()
self.other_user = UserFactory.build(avatar=SIMPLE_PNG)

def tearDown(self):
SIMPLE_PNG.seek(0)
self.other_user = UserFactory.build(avatar=simple_png())

def get_response(self, request):
"""
Expand Down Expand Up @@ -240,7 +232,7 @@ def test_get(self):
request = self.create_request(user=self.user)
response = self.get_response(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['avatar'], SIMPLE_PNG.url)
self.assertEqual(response.data['avatar'], simple_png().url)

def test_get_no_avatar(self):
self.other_user.avatar = None
Expand Down Expand Up @@ -289,7 +281,7 @@ def test_get_resize_height(self):
def test_put(self):
user = UserFactory.build(is_staff=True)
other_user = UserFactory.create()
data = {'avatar': SIMPLE_PNG}
data = {'avatar': simple_png()}

request = APIRequestFactory().put('/', data=data)
request.user = user
Expand All @@ -300,14 +292,13 @@ def test_put(self):
mocked_url.return_value = 'mocked-url'
response = view(request, pk=other_user.pk)
self.assertEqual(response.status_code, status.HTTP_200_OK)
SIMPLE_PNG.seek(0)
user = User.objects.get(pk=other_user.pk)
self.assertEqual(user.avatar.read(), SIMPLE_PNG.read())
self.assertEqual(user.avatar.read(), simple_png().read())

def test_patch(self):
user = UserFactory.build(is_staff=True)
other_user = UserFactory.create()
data = {'avatar': SIMPLE_PNG}
data = {'avatar': simple_png()}

request = APIRequestFactory().patch('/', data=data)
request.user = user
Expand All @@ -318,9 +309,8 @@ def test_patch(self):
mocked_url.return_value = 'mocked-url'
response = view(request, pk=other_user.pk)
self.assertEqual(response.status_code, status.HTTP_200_OK)
SIMPLE_PNG.seek(0)
user = User.objects.get(pk=other_user.pk)
self.assertEqual(user.avatar.read(), SIMPLE_PNG.read())
self.assertEqual(user.avatar.read(), simple_png().read())

def test_send_without_token_header(self):
"""Test support for legacy browsers that cannot support AJAX uploads.
Expand All @@ -334,7 +324,7 @@ def test_send_without_token_header(self):
user = UserFactory.create(is_staff=True)
token = AuthTokenFactory(user=user)

data = {'avatar': SIMPLE_PNG, 'token': token.key}
data = {'avatar': simple_png(), 'token': token.key}
url_kwargs = {'pk': user.pk}
url = reverse('user_management_api:user_avatar', kwargs=url_kwargs)
response = client.post(url, data=data)
Expand Down
17 changes: 7 additions & 10 deletions user_management/api/serializers.py
Expand Up @@ -51,7 +51,7 @@ def validate(self, attrs):
password2 = attrs.pop('password2')
if password2 != attrs.get('password'):
msg = _('Your passwords do not match.')
raise serializers.ValidationError(msg)
raise serializers.ValidationError({'password2': msg})
return attrs

def restore_object(self, attrs, instance=None):
Expand Down Expand Up @@ -97,16 +97,13 @@ def validate_old_password(self, attrs, source):
raise serializers.ValidationError(msg)
return attrs

def validate_new_password2(self, attrs, source):
if attrs.get('new_password') != attrs[source]:
msg = _('Your new passwords do not match.')
raise serializers.ValidationError(msg)
return attrs

def validate(self, attrs):
if attrs.get('old_password') == attrs.get('new_password'):
msg = _('Your new password must not be the same as your old password.')
raise serializers.ValidationError({'new_password': msg})
if attrs.get('new_password') != attrs['new_password2']:
msg = _('Your new passwords do not match.')
raise serializers.ValidationError({'new_password2': msg})
return attrs


Expand Down Expand Up @@ -135,10 +132,10 @@ def restore_object(self, attrs, instance=None):
instance.set_password(attrs['new_password'])
return instance

def validate_new_password2(self, attrs, source):
if attrs.get('new_password') != attrs[source]:
def validate(self, attrs):
if attrs.get('new_password') != attrs['new_password2']:
msg = _('Your new passwords do not match.')
raise serializers.ValidationError(msg)
raise serializers.ValidationError({'new_password2': msg})
return attrs


Expand Down
2 changes: 1 addition & 1 deletion user_management/api/tests/test_serializers.py
Expand Up @@ -179,7 +179,7 @@ def test_deserialize_mismatched_passwords(self):
serializer = serializers.RegistrationSerializer(data=self.data)
self.assertFalse(serializer.is_valid())
message = 'Your passwords do not match.'
self.assertIn(message, serializer.errors['non_field_errors'])
self.assertIn(message, serializer.errors['password2'])

def test_deserialize_no_email(self):
self.data['email'] = None
Expand Down
2 changes: 1 addition & 1 deletion user_management/api/tests/test_views.py
Expand Up @@ -238,7 +238,7 @@ def test_post_password_mismatch(self):
request = self.create_request('post', auth=False, data=self.data)
response = self.view_class.as_view()(request)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('Your passwords do not match.', response.data['non_field_errors'])
self.assertIn('Your passwords do not match.', response.data['password2'])

self.assertFalse(User.objects.count())

Expand Down

0 comments on commit 226adfb

Please sign in to comment.