Files
mayan-edms/mayan/apps/user_management/tests/mixins.py
Roberto Rosario 111250fd99 Update usage of "an user"
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2019-06-15 02:17:55 -04:00

315 lines
10 KiB
Python

from __future__ import unicode_literals
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from .literals import (
TEST_CASE_SUPERUSER_EMAIL, TEST_CASE_SUPERUSER_PASSWORD, TEST_CASE_SUPERUSER_USERNAME,
TEST_CASE_GROUP_NAME, TEST_GROUP_NAME_EDITED, TEST_CASE_USER_EMAIL,
TEST_CASE_USER_PASSWORD, TEST_CASE_USER_USERNAME, TEST_GROUP_NAME,
TEST_USER_EMAIL, TEST_USER_USERNAME, TEST_USER_USERNAME_EDITED,
TEST_USER_PASSWORD, TEST_USER_PASSWORD_EDITED
)
class GroupAPITestMixin(object):
def _request_test_group_create_api_view(self):
result = self.post(
viewname='rest_api:group-list', data={
'name': TEST_GROUP_NAME
}
)
if 'id' in result.json():
self.test_group = Group.objects.get(pk=result.json()['id'])
return result
def _request_test_group_delete_api_view(self):
return self.delete(
viewname='rest_api:group-detail', kwargs={'pk': self.test_group.pk}
)
def _request_test_group_edit_patch_api_view(self):
return self.patch(
viewname='rest_api:group-detail', kwargs={'pk': self.test_group.pk},
data={
'name': TEST_GROUP_NAME_EDITED
}
)
def _request_test_group_edit_put_api_view(self):
return self.put(
viewname='rest_api:group-detail', kwargs={'pk': self.test_group.pk},
data={
'name': TEST_GROUP_NAME_EDITED
}
)
class GroupTestMixin(object):
def _create_test_group(self):
self.test_group = Group.objects.create(name=TEST_GROUP_NAME)
def _edit_test_group(self):
self.test_group.name = TEST_GROUP_NAME_EDITED
self.test_group.save()
class GroupViewTestMixin(object):
def _request_test_group_create_view(self):
reponse = self.post(
viewname='user_management:group_create', data={
'name': TEST_GROUP_NAME
}
)
self.test_group = Group.objects.filter(name=TEST_GROUP_NAME).first()
return reponse
def _request_test_group_delete_view(self):
return self.post(
viewname='user_management:group_delete', kwargs={
'pk': self.test_group.pk
}
)
def _request_test_group_edit_view(self):
return self.post(
viewname='user_management:group_edit', kwargs={
'pk': self.test_group.pk
}, data={
'name': TEST_GROUP_NAME_EDITED
}
)
def _request_test_group_list_view(self):
return self.get(viewname='user_management:group_list')
def _request_test_group_members_view(self):
return self.get(
viewname='user_management:group_members',
kwargs={'pk': self.test_group.pk}
)
class UserAPITestMixin(object):
def _request_test_user_create_api_view(self):
result = self.post(
viewname='rest_api:user-list', data={
'email': TEST_USER_EMAIL, 'password': TEST_USER_PASSWORD,
'username': TEST_USER_USERNAME,
}
)
if 'id' in result.json():
self.test_user = get_user_model().objects.get(pk=result.json()['id'])
return result
def _request_test_user_create_api_view_extra_data(self):
result = self.post(
viewname='rest_api:user-list', data={
'email': TEST_USER_EMAIL, 'password': TEST_USER_PASSWORD,
'username': TEST_USER_USERNAME,
'groups_pk_list': self.test_group.pk
}
)
if 'id' in result.json():
self.test_user = get_user_model().objects.get(pk=result.json()['id'])
return result
def _request_test_user_delete_api_view(self):
return self.delete(
viewname='rest_api:user-detail',
kwargs={'pk': self.test_user.pk}
)
def _request_test_user_edit_patch_api_view(self):
return self.patch(
viewname='rest_api:user-detail',
kwargs={'pk': self.test_user.pk},
data={'username': TEST_USER_USERNAME_EDITED}
)
def _request_test_user_edit_put_api_view(self):
return self.put(
viewname='rest_api:user-detail',
kwargs={'pk': self.test_user.pk},
data={'username': TEST_USER_USERNAME_EDITED}
)
def _request_test_user_group_add_api_view(self):
return self.post(
viewname='rest_api:users-group-list', kwargs={
'pk': self.test_user.pk
}, data={
'group_pk_list': '{}'.format(self.test_group.pk)
}
)
def _request_test_user_group_list_api_view(self):
return self.get(
viewname='rest_api:users-group-list', kwargs={
'pk': self.test_user.pk
}
)
def _request_test_user_password_change_api_view(self):
result = self.patch(
viewname='rest_api:user-detail', kwargs={
'pk': self.test_user.pk
}, data={
'password': TEST_USER_PASSWORD_EDITED,
}
)
self.test_user.cleartext_password = TEST_USER_PASSWORD_EDITED
return result
class UserTestCaseMixin(object):
"""
This TestCaseMixin is used to create a user and group to execute the
test case, these are used to just create an identity which is required by
most of the code in the project, these are not meant to be acted upon
(edited, deleted, etc). To create a test users or groups to modify, use
the UserTestMixin instead and the respective test_user and test_group.
The user and group created by this mixin will be prepended with
_test_case_{...}. The _test_case_user and _test_case_group are meant
to be used by other test case mixins like the ACLs test case mixin which
adds shorthand methods to create ACL entries to test access control.
"""
auto_login_superuser = False
auto_login_user = True
create_test_case_superuser = False
create_test_case_user = True
def setUp(self):
super(UserTestCaseMixin, self).setUp()
if self.create_test_case_user:
self._create_test_case_user()
self._create_test_case_group()
self._test_case_group.user_set.add(self._test_case_user)
if self.auto_login_user:
self.login_user()
if self.create_test_case_superuser:
self._create_test_case_superuser()
if self.auto_login_superuser:
self.login_superuser()
def tearDown(self):
self.client.logout()
super(UserTestCaseMixin, self).tearDown()
def _create_test_case_group(self):
self._test_case_group = Group.objects.create(name=TEST_CASE_GROUP_NAME)
def _create_test_case_superuser(self):
self._test_case_superuser = get_user_model().objects.create_superuser(
username=TEST_CASE_SUPERUSER_USERNAME, email=TEST_CASE_SUPERUSER_EMAIL,
password=TEST_CASE_SUPERUSER_PASSWORD
)
self._test_case_superuser.cleartext_password = TEST_CASE_SUPERUSER_PASSWORD
def _create_test_case_user(self):
self._test_case_user = get_user_model().objects.create_user(
username=TEST_CASE_USER_USERNAME, email=TEST_CASE_USER_EMAIL,
password=TEST_CASE_USER_PASSWORD
)
self._test_case_user.cleartext_password = TEST_CASE_USER_PASSWORD
def login(self, *args, **kwargs):
return self.client.login(*args, **kwargs)
def login_superuser(self):
return self.login(
username=TEST_CASE_SUPERUSER_USERNAME,
password=TEST_CASE_SUPERUSER_PASSWORD
)
def login_user(self):
return self.login(
username=TEST_CASE_USER_USERNAME, password=TEST_CASE_USER_PASSWORD
)
def logout(self):
self.client.logout()
class UserTestMixin(object):
def _create_test_superuser(self):
self.test_superuser = get_user_model().objects.create_superuser(
username=TEST_CASE_SUPERUSER_USERNAME, email=TEST_CASE_SUPERUSER_EMAIL,
password=TEST_CASE_SUPERUSER_PASSWORD
)
self.test_superuser.cleartext_password = TEST_USER_PASSWORD
def _create_test_user(self):
self.test_user = get_user_model().objects.create_user(
username=TEST_USER_USERNAME, email=TEST_USER_EMAIL,
password=TEST_USER_PASSWORD
)
self.test_user.cleartext_password = TEST_USER_PASSWORD
class UserViewTestMixin(object):
def _request_current_user_details_view(self):
return self.get(viewname='user_management:current_user_details')
def _request_test_superuser_delete_view(self):
return self.post(
viewname='user_management:user_delete',
kwargs={'pk': self.test_superuser.pk}
)
def _request_test_superuser_detail_view(self):
return self.get(
viewname='user_management:user_details',
kwargs={'pk': self.test_superuser.pk}
)
def _request_test_user_create_view(self):
reponse = self.post(
viewname='user_management:user_create', data={
'username': TEST_USER_USERNAME,
'password': TEST_USER_PASSWORD
}
)
self.test_user = get_user_model().objects.filter(
username=TEST_USER_USERNAME
).first()
return reponse
def _request_test_user_delete_view(self):
return self.post(
viewname='user_management:user_delete',
kwargs={'pk': self.test_user.pk}
)
def _request_test_user_delete_multiple_view(self):
return self.post(
viewname='user_management:user_multiple_delete', data={
'id_list': self.test_user.pk
}
)
def _request_test_user_edit_view(self):
return self.post(
viewname='user_management:user_edit', kwargs={
'pk': self.test_user.pk
}, data={
'username': TEST_USER_USERNAME_EDITED
}
)
def _request_test_user_groups_view(self):
return self.get(
viewname='user_management:user_groups',
kwargs={'pk': self.test_user.pk}
)