From c984b33f1e5bbb756986d3b27b4f27a5ae975536 Mon Sep 17 00:00:00 2001 From: Akita Noek Date: Tue, 12 Apr 2016 15:43:27 -0400 Subject: [PATCH 1/2] Fix erronous singleton role created for users Needed to be just a normal role, ie with `name` assigned instead of `singleton_name` Addresses #1499 --- awx/main/signals.py | 2 +- awx/main/tests/functional/api/test_user.py | 68 ++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 awx/main/tests/functional/api/test_user.py diff --git a/awx/main/signals.py b/awx/main/signals.py index 5315738ec7..bcdf2f7f42 100644 --- a/awx/main/signals.py +++ b/awx/main/signals.py @@ -126,7 +126,7 @@ def create_user_role(instance, **kwargs): instance.admin_role except Role.DoesNotExist: role = Role.objects.create( - singleton_name = '%s-admin_role' % instance.username, + name = '%s-admin_role' % instance.username, content_object = instance, ) role.members.add(instance) diff --git a/awx/main/tests/functional/api/test_user.py b/awx/main/tests/functional/api/test_user.py new file mode 100644 index 0000000000..d739d417c0 --- /dev/null +++ b/awx/main/tests/functional/api/test_user.py @@ -0,0 +1,68 @@ +import pytest + +from django.core.urlresolvers import reverse + + +# +# user creation +# + +@pytest.mark.django_db +def test_user_create(post, admin): + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + assert response.status_code == 201 + +@pytest.mark.django_db +def test_fail_double_create_user(post, admin): + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + assert response.status_code == 201 + + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + assert response.status_code == 400 + +@pytest.mark.django_db +def test_create_delete_create_user(post, delete, admin): + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + assert response.status_code == 201 + + response = delete(reverse('api:user_detail', args=(response.data['id'],)), admin) + assert response.status_code == 204 + + response = post(reverse('api:user_list'), { + "username": "affable", + "first_name": "a", + "last_name": "a", + "email": "a@a.com", + "is_superuser": False, + "password": "fo0m4nchU" + }, admin) + print(response.data) + assert response.status_code == 201 From a0356afbacfd5cb5daabae4f67117922b5e93182 Mon Sep 17 00:00:00 2001 From: Akita Noek Date: Tue, 12 Apr 2016 16:11:45 -0400 Subject: [PATCH 2/2] Improved code clarity and UI naming for user owner role creation #1499 --- awx/main/signals.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/awx/main/signals.py b/awx/main/signals.py index bcdf2f7f42..891c60b75b 100644 --- a/awx/main/signals.py +++ b/awx/main/signals.py @@ -123,10 +123,14 @@ def sync_superuser_status_to_rbac(instance, **kwargs): def create_user_role(instance, **kwargs): try: - instance.admin_role + Role.objects.get( + content_type=ContentType.objects.get_for_model(instance), + object_id=instance.id, + name = 'Owner' + ) except Role.DoesNotExist: role = Role.objects.create( - name = '%s-admin_role' % instance.username, + name = 'Owner', content_object = instance, ) role.members.add(instance)