diff --git a/taiga/users/api.py b/taiga/users/api.py index 735d7c0d..4bf7dd91 100644 --- a/taiga/users/api.py +++ b/taiga/users/api.py @@ -171,7 +171,7 @@ class UsersViewSet(ModelCrudViewSet): """ self.check_permissions(request, "change_avatar", None) - avatar = request.FILES['avatar'] + avatar = request.FILES.get('avatar', None) if not avatar: raise exc.WrongArguments(_("Incomplete arguments")) diff --git a/tests/integration/resources_permissions/test_users_resources.py b/tests/integration/resources_permissions/test_users_resources.py index 6570ac90..e0bb916a 100644 --- a/tests/integration/resources_permissions/test_users_resources.py +++ b/tests/integration/resources_permissions/test_users_resources.py @@ -167,13 +167,6 @@ def test_user_action_change_password(client, data): def test_user_action_change_avatar(client, data): url = reverse('users-change-avatar') - users = [ - None, - data.registered_user, - data.other_user, - data.superuser, - ] - with NamedTemporaryFile() as avatar: avatar.write(DUMMY_BMP_DATA) avatar.seek(0) diff --git a/tests/integration/test_change_avatar.py b/tests/integration/test_change_avatar.py new file mode 100644 index 00000000..a2202f32 --- /dev/null +++ b/tests/integration/test_change_avatar.py @@ -0,0 +1,54 @@ +# Copyright (C) 2014 Andrey Antukh +# Copyright (C) 2014 Jesús Espino +# Copyright (C) 2014 David Barragán +# Copyright (C) 2014 Anler Hernández +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from django.core.urlresolvers import reverse + +from tempfile import NamedTemporaryFile + +import pytest + +from .. import factories as f + +pytestmark = pytest.mark.django_db + +DUMMY_BMP_DATA = b'BM:\x00\x00\x00\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x04\x00\x00\x00\x13\x0b\x00\x00\x13\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + + +def test_change_avatar(client): + url = reverse('users-change-avatar') + + user = f.UserFactory() + client.login(user) + + with NamedTemporaryFile() as avatar: + # Test no avatar send + post_data = {} + response = client.post(url, post_data) + assert response.status_code == 400 + + # Test invalid file send + post_data = { + 'avatar': avatar + } + response = client.post(url, post_data) + assert response.status_code == 400 + + # Test empty valid avatar send + avatar.write(DUMMY_BMP_DATA) + avatar.seek(0) + response = client.post(url, post_data) + assert response.status_code == 200