Merge pull request #897 from nofusscomputing/access-test-refactor

This commit is contained in:
Jon
2025-07-28 13:13:10 +09:30
committed by GitHub
23 changed files with 222 additions and 1283 deletions

View File

@ -1,43 +0,0 @@
import pytest
from access.tests.functional.entity.test_functional_entity_permission import (
EntityPermissionsAPIInheritedCases
)
class CompanyPermissionsAPITestCases(
EntityPermissionsAPIInheritedCases,
):
add_data: dict = {
'name': 'Ian1',
}
kwargs_create_item: dict = {
'name': 'Ian2',
}
kwargs_create_item_diff_org: dict = {
'name': 'Ian3',
}
class CompanyPermissionsAPIInheritedCases(
CompanyPermissionsAPITestCases,
):
add_data: dict = None
kwargs_create_item: dict = None
kwargs_create_item_diff_org: dict = None
class CompanyPermissionsAPIPyTest(
CompanyPermissionsAPITestCases,
):
pass

View File

@ -1,46 +0,0 @@
import pytest
from rest_framework.exceptions import ValidationError
from access.tests.functional.entity.test_functional_entity_serializer import (
MockView,
EntitySerializerInheritedCases
)
class CompanySerializerTestCases(
EntitySerializerInheritedCases
):
parameterized_test_data: dict = {
"name": {
'will_create': False,
'exception_key': 'required'
},
}
valid_data: dict = {
'name': 'Ian',
}
"""Valid data used by serializer to create object"""
class CompanySerializerInheritedCases(
CompanySerializerTestCases,
):
parameterized_test_data: dict = None
valid_data: dict = None
"""Valid data used by serializer to create object"""
class CompanySerializerPyTest(
CompanySerializerTestCases,
):
parameterized_test_data: dict = None

View File

@ -1,58 +0,0 @@
from django.test import TestCase
from access.models.company_base import Company
from access.tests.functional.entity.test_functional_entity_viewset import (
EntityViewSetInheritedCases
)
class ViewSetTestCases(
EntityViewSetInheritedCases,
):
add_data: dict = {
'name': 'Ian',
}
kwargs_create_item: dict = {
'name': 'Ian2',
}
kwargs_create_item_diff_org: dict = {
'name': 'Ian3',
}
model = Company
class CompanyViewSetInheritedCases(
ViewSetTestCases,
):
model = None
@classmethod
def setUpTestData(self):
self.kwargs_create_item = {
**super().kwargs_create_item,
**self.kwargs_create_item
}
self.kwargs_create_item_diff_org = {
**super().kwargs_create_item_diff_org,
**self.kwargs_create_item_diff_org
}
super().setUpTestData()
class CompanyViewSetTest(
ViewSetTestCases,
TestCase,
):
pass

View File

@ -1,70 +0,0 @@
import pytest
from access.tests.functional.person.test_functional_person_permission import (
PersonPermissionsAPIInheritedCases
)
class ContactPermissionsAPITestCases(
PersonPermissionsAPIInheritedCases,
):
add_data: dict = {
'email': 'ipfunny@unit.test',
}
kwargs_create_item: dict = {
'email': 'ipweird@unit.test',
}
kwargs_create_item_diff_org: dict = {
'email': 'ipstrange@unit.test',
}
class ContactPermissionsAPIInheritedCases(
ContactPermissionsAPITestCases,
):
add_data: dict = None
kwargs_create_item: dict = None
kwargs_create_item_diff_org: dict = None
# url_name = '_api_entity_sub'
# @pytest.fixture(scope='class')
# def inherited_var_setup(self, request):
# request.cls.url_kwargs.update({
# 'model_name': self.model._meta.sub_model_type
# })
# request.cls.url_view_kwargs.update({
# 'model_name': self.model._meta.sub_model_type
# })
# @pytest.fixture(scope='class', autouse = True)
# def class_setup(self, request, django_db_blocker,
# model,
# var_setup,
# prepare,
# inherited_var_setup,
# diff_org_model,
# create_model,
# ):
# pass
class ContactPermissionsAPIPyTest(
ContactPermissionsAPITestCases,
):
pass

View File

@ -1,46 +0,0 @@
import pytest
from rest_framework.exceptions import ValidationError
from access.tests.functional.person.test_functional_person_serializer import (
MockView,
PersonSerializerInheritedCases
)
class ContactSerializerTestCases(
PersonSerializerInheritedCases
):
parameterized_test_data: dict = {
"email": {
'will_create': False,
'exception_key': 'required'
}
}
valid_data: dict = {
'email': 'contactentityduplicatetwo@unit.test',
}
"""Valid data used by serializer to create object"""
class ContactSerializerInheritedCases(
ContactSerializerTestCases,
):
parameterized_test_data: dict = None
valid_data: dict = None
"""Valid data used by serializer to create object"""
class ContactSerializerPyTest(
ContactSerializerTestCases,
):
parameterized_test_data: dict = None

View File

@ -1,58 +0,0 @@
from django.test import TestCase
from access.models.contact import Contact
from access.tests.functional.person.test_functional_person_viewset import (
PersonViewSetInheritedCases
)
class ViewSetTestCases(
PersonViewSetInheritedCases,
):
add_data: dict = {
'email': 'ipfunny@unit.test',
}
kwargs_create_item: dict = {
'email': 'ipweird@unit.test',
}
kwargs_create_item_diff_org: dict = {
'email': 'ipstrange@unit.test',
}
model = Contact
class ContactViewSetInheritedCases(
ViewSetTestCases,
):
model = None
@classmethod
def setUpTestData(self):
self.kwargs_create_item = {
**super().kwargs_create_item,
**self.kwargs_create_item
}
self.kwargs_create_item_diff_org = {
**super().kwargs_create_item_diff_org,
**self.kwargs_create_item_diff_org
}
super().setUpTestData()
class ContactViewSetTest(
ViewSetTestCases,
TestCase,
):
pass

View File

@ -1,89 +0,0 @@
import pytest
from api.tests.functional.test_functional_api_permissions import (
APIPermissionsInheritedCases,
)
class EntityPermissionsAPITestCases(
APIPermissionsInheritedCases,
):
add_data: dict = {}
app_namespace = 'v2'
change_data = {}
delete_data = {}
kwargs_create_item: dict = {}
kwargs_create_item_diff_org: dict = {}
url_kwargs: dict = {}
url_name = '_api_entity'
url_view_kwargs: dict = {}
def test_returned_data_from_user_and_global_organizations_only(self):
"""Check items returned
This test case is a over-ride of a test case with the same name.
This model is not a tenancy model making this test not-applicable.
Items returned from the query Must be from the users organization and
global ONLY!
"""
pass
class EntityPermissionsAPIInheritedCases(
EntityPermissionsAPITestCases,
):
add_data: dict = None
kwargs_create_item: dict = None
kwargs_create_item_diff_org: dict = None
url_name = '_api_entity_sub'
@pytest.fixture(scope='class')
def inherited_var_setup(self, request):
request.cls.url_kwargs.update({
'model_name': self.model._meta.sub_model_type
})
request.cls.url_view_kwargs.update({
'model_name': self.model._meta.sub_model_type
})
@pytest.fixture(scope='class', autouse = True)
def class_setup(self, request, django_db_blocker,
model,
var_setup,
prepare,
inherited_var_setup,
diff_org_model,
create_model,
):
pass
class EntityPermissionsAPIPyTest(
EntityPermissionsAPITestCases,
):
pass

View File

@ -28,7 +28,7 @@ class MockView:
"""
@pytest.mark.skip(reason = 'see #874, tests being refactored')
class EntitySerializerTestCases:

View File

@ -1,266 +0,0 @@
import django
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from django.test import TestCase
from access.models.entity import Entity
from access.models.tenant import Tenant as Organization
from access.models.team import Team
from access.models.team_user import TeamUsers
from api.tests.abstract.api_serializer_viewset import SerializersTestCases
User = django.contrib.auth.get_user_model()
class ViewSetBase:
add_data: dict = {
'model_notes': 'added model note'
}
app_namespace = 'v2'
base_model = Entity
"""Base model for this sub model
don't change or override this value
"""
change_data = None
delete_data = {}
kwargs_create_item: dict = {
'model_notes': 'added model note'
}
kwargs_create_item_diff_org: dict = {
'model_notes': 'added model note'
}
model = None
url_kwargs: dict = {}
url_view_kwargs: dict = {}
url_name = None
@classmethod
def setUpTestData(self):
"""Setup Test
1. Create an organization for user and item
. create an organization that is different to item
2. Create a team
3. create teams with each permission: view, add, change, delete
4. create a user per team
"""
organization = Organization.objects.create(name='test_org')
self.organization = organization
self.different_organization = Organization.objects.create(name='test_different_organization')
self.view_user = User.objects.create_user(username="test_user_view", password="password")
self.item = self.model.objects.create(
organization = organization,
**self.kwargs_create_item
)
self.other_org_item = self.model.objects.create(
organization = self.different_organization,
**self.kwargs_create_item_diff_org
)
self.url_view_kwargs.update({ 'pk': self.item.id })
if self.add_data is not None:
self.add_data.update({
'organization': self.organization.id,
})
view_permissions = Permission.objects.get(
codename = 'view_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
view_team = Team.objects.create(
team_name = 'view_team',
organization = organization,
)
view_team.permissions.set([view_permissions])
add_permissions = Permission.objects.get(
codename = 'add_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
add_team = Team.objects.create(
team_name = 'add_team',
organization = organization,
)
add_team.permissions.set([add_permissions])
change_permissions = Permission.objects.get(
codename = 'change_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
change_team = Team.objects.create(
team_name = 'change_team',
organization = organization,
)
change_team.permissions.set([change_permissions])
delete_permissions = Permission.objects.get(
codename = 'delete_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
delete_team = Team.objects.create(
team_name = 'delete_team',
organization = organization,
)
delete_team.permissions.set([delete_permissions])
self.no_permissions_user = User.objects.create_user(username="test_no_permissions", password="password")
TeamUsers.objects.create(
team = view_team,
user = self.view_user
)
self.add_user = User.objects.create_user(username="test_user_add", password="password")
TeamUsers.objects.create(
team = add_team,
user = self.add_user
)
self.change_user = User.objects.create_user(username="test_user_change", password="password")
TeamUsers.objects.create(
team = change_team,
user = self.change_user
)
self.delete_user = User.objects.create_user(username="test_user_delete", password="password")
TeamUsers.objects.create(
team = delete_team,
user = self.delete_user
)
self.different_organization_user = User.objects.create_user(username="test_different_organization_user", password="password")
different_organization_team = Team.objects.create(
team_name = 'different_organization_team',
organization = self.different_organization,
)
different_organization_team.permissions.set([
view_permissions,
add_permissions,
change_permissions,
delete_permissions,
])
TeamUsers.objects.create(
team = different_organization_team,
user = self.different_organization_user
)
def test_sanity_is_asset_sub_model(self):
"""Sanity Test
This test ensures that the model being tested `self.model` is a
sub-model of `self.base_model`.
This test is required as the same viewset is used for all sub-models
of `Entity`
"""
assert issubclass(self.model, self.base_model)
class ViewSetTestCases(
ViewSetBase,
SerializersTestCases,
):
model = Entity
class EntityViewSetInheritedCases(
ViewSetTestCases,
):
model = None
url_name = '_api_entity_sub'
@classmethod
def setUpTestData(self):
self.kwargs_create_item = {
**super().kwargs_create_item,
**self.kwargs_create_item
}
self.kwargs_create_item_diff_org = {
**super().kwargs_create_item_diff_org,
**self.kwargs_create_item_diff_org
}
self.url_kwargs = {
'model_name': self.model._meta.sub_model_type
}
self.url_view_kwargs = {
'model_name': self.model._meta.sub_model_type
}
super().setUpTestData()
class EntityViewSetTest(
ViewSetTestCases,
TestCase,
):
url_name = '_api_entity'

View File

@ -1,91 +0,0 @@
import pytest
from access.tests.functional.entity.test_functional_entity_permission import (
EntityPermissionsAPIInheritedCases
)
class PersonPermissionsAPITestCases(
EntityPermissionsAPIInheritedCases,
):
add_data: dict = {
'f_name': 'Ian',
'm_name': 'Peter',
'l_name': 'Strange',
'dob': '2025-04-08',
}
# app_namespace = 'v2'
# change_data = {}
# delete_data = {}
kwargs_create_item: dict = {
'f_name': 'Ian',
'm_name': 'Peter',
'l_name': 'Weird',
'dob': '2025-04-08',
}
kwargs_create_item_diff_org: dict = {
'f_name': 'Ian',
'm_name': 'Peter',
'l_name': 'Funny',
'dob': '2025-04-08',
}
# url_kwargs: dict = {}
# url_name = '_api_entity'
# url_view_kwargs: dict = {}
class PersonPermissionsAPIInheritedCases(
PersonPermissionsAPITestCases,
):
add_data: dict = None
kwargs_create_item: dict = None
kwargs_create_item_diff_org: dict = None
# url_name = '_api_entity_sub'
# @pytest.fixture(scope='class')
# def inherited_var_setup(self, request):
# request.cls.url_kwargs.update({
# 'model_name': self.model._meta.sub_model_type
# })
# request.cls.url_view_kwargs.update({
# 'model_name': self.model._meta.sub_model_type
# })
# @pytest.fixture(scope='class', autouse = True)
# def class_setup(self, request, django_db_blocker,
# model,
# var_setup,
# prepare,
# inherited_var_setup,
# diff_org_model,
# create_model,
# ):
# pass
class PersonPermissionsAPIPyTest(
PersonPermissionsAPITestCases,
):
pass

View File

@ -1,67 +0,0 @@
from django.test import TestCase
from access.models.person import Person
from access.tests.functional.entity.test_functional_entity_viewset import (
EntityViewSetInheritedCases
)
class ViewSetTestCases(
EntityViewSetInheritedCases,
):
add_data: dict = {
'f_name': 'Ian',
'm_name': 'Peter',
'l_name': 'Strange',
'dob': '2025-04-08',
}
kwargs_create_item: dict = {
'f_name': 'Ian',
'm_name': 'Peter',
'l_name': 'Weird',
'dob': '2025-04-08',
}
kwargs_create_item_diff_org: dict = {
'f_name': 'Ian',
'm_name': 'Peter',
'l_name': 'Funny',
'dob': '2025-04-08',
}
model = Person
class PersonViewSetInheritedCases(
ViewSetTestCases,
):
model = None
@classmethod
def setUpTestData(self):
self.kwargs_create_item = {
**super().kwargs_create_item,
**self.kwargs_create_item
}
self.kwargs_create_item_diff_org = {
**super().kwargs_create_item_diff_org,
**self.kwargs_create_item_diff_org
}
super().setUpTestData()
class PersonViewSetTest(
ViewSetTestCases,
TestCase,
):
pass

View File

@ -1,7 +1,5 @@
import pytest
from django.test import TestCase
from access.models.company_base import Company
from access.tests.unit.entity.test_unit_entity_viewset import (
EntityViewsetInheritedCases
@ -14,7 +12,14 @@ class ViewsetTestCases(
EntityViewsetInheritedCases,
):
model: str = Company
@property
def parameterized_class_attributes(self):
return {
'model': {
'value': Company
}
}
@ -26,15 +31,13 @@ class CompanyViewsetInheritedCases(
Test Cases for Entity models that inherit from model Company
"""
model: str = None
"""name of the model to test"""
pass
@pytest.mark.module_access
class CompanyViewsetTest(
class CompanyViewsetPyTest(
ViewsetTestCases,
TestCase,
):
pass

View File

@ -1,7 +1,5 @@
import pytest
from django.test import TestCase
from access.models.contact import Contact
from access.tests.unit.person.test_unit_person_viewset import (
PersonViewsetInheritedCases
@ -14,7 +12,14 @@ class ViewsetTestCases(
PersonViewsetInheritedCases,
):
model: str = Contact
@property
def parameterized_class_attributes(self):
return {
'model': {
'value': Contact
}
}
@ -26,15 +31,13 @@ class ContactViewsetInheritedCases(
Test Cases for Entity models that inherit from model Contact
"""
model: str = None
"""name of the model to test"""
pass
@pytest.mark.module_access
class ContactViewsetTest(
class ContactViewsetPyTest(
ViewsetTestCases,
TestCase,
):
pass

View File

@ -7,13 +7,13 @@ from access.viewsets.entity import (
ViewSet,
)
from api.tests.unit.test_unit_common_viewset import ModelViewSetInheritedCases
from api.tests.unit.test_unit_common_viewset import SubModelViewSetInheritedCases
@pytest.mark.model_entity
class ViewsetTestCases(
ModelViewSetInheritedCases,
SubModelViewSetInheritedCases,
):
@ -25,26 +25,21 @@ class ViewsetTestCases(
@property
def parameterized_class_attributes(self):
return {
'_log': {
'type': logging.Logger,
'value': None
},
# '_log': {
# 'type': logging.Logger,
# 'value': None
# },
'_model_documentation': {
'type': type(None),
'value': None
},
# 'allowed_methods': {
# 'type': list,
# 'value': [
# 'GET',
# 'HEAD',
# 'OPTIONS',
# ]
# },
'back_url': {
'type': type(None),
'value': None
},
'base_model': {
'value': Entity
},
'documentation': {
'type': type(None),
'value': None
@ -61,6 +56,12 @@ class ViewsetTestCases(
'type': type(None),
'value': None
},
'model_kwarg': {
'value': 'model_name'
},
'model_suffix': {
'type': type(None)
},
'queryset': {
'type': type(None),
'value': None
@ -89,7 +90,6 @@ class ViewsetTestCases(
@pytest.mark.skip(reason = 'see #895, tests being refactored')
class EntityViewsetInheritedCases(
ViewsetTestCases,
):

View File

@ -1,7 +1,5 @@
import pytest
from django.test import TestCase
from access.models.person import Person
from access.tests.unit.entity.test_unit_entity_viewset import (
EntityViewsetInheritedCases
@ -14,7 +12,15 @@ class ViewsetTestCases(
EntityViewsetInheritedCases,
):
model: str = Person
@property
def parameterized_class_attributes(self):
return {
'model': {
'value': Person
}
}
@ -26,15 +32,13 @@ class PersonViewsetInheritedCases(
Test Cases for Entity models that inherit from model Person
"""
model: str = None
"""name of the model to test"""
pass
@pytest.mark.module_access
class PersonViewsetTest(
class PersonViewsetPyTest(
ViewsetTestCases,
TestCase,
):
pass

View File

@ -1,43 +0,0 @@
import pytest
from django.test import Client, TestCase
from rest_framework.reverse import reverse
from access.viewsets.organization import ViewSet
from api.tests.unit.test_unit_common_viewset import ModelViewSetInheritedCases
@pytest.mark.skip(reason = 'see #895, tests being refactored')
class OrganizationViewsetList(
ModelViewSetInheritedCases,
TestCase,
):
viewset = ViewSet
route_name = 'API:_api_tenant'
@classmethod
def setUpTestData(self):
"""Setup Test
1. make list request
"""
super().setUpTestData()
client = Client()
url = reverse(
self.route_name + '-list'
)
client.force_login(self.view_user)
self.http_options_response_list = client.options(url)

View File

@ -0,0 +1,85 @@
import pytest
from access.viewsets.organization import (
Tenant,
ViewSet,
)
from api.tests.unit.test_unit_common_viewset import (
ModelViewSetInheritedCases
)
@pytest.mark.model_tenant
class ViewsetTestCases(
ModelViewSetInheritedCases,
):
@pytest.fixture( scope = 'function' )
def viewset(self):
return ViewSet
@property
def parameterized_class_attributes(self):
return {
'_model_documentation': {
'type': type(None),
'value': None
},
'back_url': {
'type': type(None),
},
'documentation': {
'type': type(None),
},
'filterset_fields': {
'value': [
'name',
'manager',
]
},
'model': {
'value': Tenant
},
'model_documentation': {
'type': type(None),
},
'queryset': {
'type': type(None),
},
'serializer_class': {
'type': type(None),
},
'search_fields': {
'value': [
'name'
]
},
'view_description': {
'value': 'Centurion Tenants'
},
'view_name': {
'type': type(None),
},
'view_serializer_name': {
'type': type(None),
}
}
class TenantViewsetInheritedCases(
ViewsetTestCases,
):
pass
@pytest.mark.module_access
class TenantViewsetPyTest(
ViewsetTestCases,
):
pass

View File

@ -32,6 +32,7 @@ from api.viewsets.common import (
CommonViewSet,
ModelViewSet,
SubModelViewSet,
SubModelViewSet_ReWrite,
ModelCreateViewSet,
ModelListRetrieveDeleteViewSet,
@ -404,12 +405,6 @@ class CommonViewSetTestCases(
'type': str,
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': str,
'value': None
@ -907,23 +902,6 @@ class ModelViewSetTestCases(
Dont use inherit from this class use `ModelViewSetInheritedTest`
"""
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'DELETE',
'GET',
'HEAD',
'OPTIONS',
'PATCH',
'POST',
'PUT',
]
},
}
def test_class_inherits_modelviewsetbase(self, viewset):
"""Class Inheritence check
@ -1011,12 +989,6 @@ class ModelViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -1091,18 +1063,6 @@ class SubModelViewSetTestCases(
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'DELETE',
'GET',
'HEAD',
'OPTIONS',
'PATCH',
'POST',
'PUT',
]
},
'base_model': {
'type': type,
'value': None
@ -1110,6 +1070,10 @@ class SubModelViewSetTestCases(
'model_kwarg': {
'type': str,
'value': None
},
'model_suffix': {
'type': str,
'value': None
}
}
@ -1167,6 +1131,9 @@ class SubModelViewSetTestCases(
pass
# ToDo: Test returned serializer for all CRUD. Add, Change, Delete, Replace and View
@pytest.mark.api
@pytest.mark.viewset
@ -1177,7 +1144,7 @@ class SubModelViewSetPyTest(
@pytest.fixture( scope = 'function' )
def viewset(self):
return SubModelViewSet
return SubModelViewSet_ReWrite
@property
@ -1191,12 +1158,6 @@ class SubModelViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -1210,8 +1171,11 @@ class SubModelViewSetPyTest(
'value': None
},
'model': {
'type': django.db.models.NOT_PROVIDED,
'value': django.db.models.NOT_PROVIDED
},
'model_suffix': {
'type': type(None),
'value': None
},
'model_documentation': {
'type': type(None),
@ -1244,20 +1208,6 @@ class SubModelViewSetPyTest(
}
def test_view_attr_model_not_empty(self, viewset):
"""Attribute Test
This test case overrides a test case of the same name. As this test is
checking the base classes, it's return is different to a class that
has inherited from this or parent classes.
Attribute `model` must return a value that is not None
"""
assert viewset().model is None
def test_view_attr_type_base_model(self):
"""Attribute Test
@ -1331,20 +1281,6 @@ class ModelCreateViewSetTestCases(
):
"""Test Suite for class ModelCreateViewSet"""
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'GET',
'HEAD',
'OPTIONS',
'POST',
]
}
}
def test_class_inherits_viewsets_genericviewset(self, viewset):
"""Class Inheritence check
@ -1378,12 +1314,6 @@ class ModelCreateViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -1459,21 +1389,6 @@ class ModelListRetrieveDeleteViewSetTestCases(
"""Test Suite for class ModelListRetrieveDeleteViewSet"""
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'DELETE',
'GET',
'HEAD',
'OPTIONS',
]
}
}
def test_class_inherits_viewsets_genericviewset(self, viewset):
"""Class Inheritence check
@ -1507,12 +1422,6 @@ class ModelListRetrieveDeleteViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -1586,21 +1495,6 @@ class ModelRetrieveUpdateViewSetTestCases(
):
"""Test Suite for class ModelRetrieveUpdateViewSet"""
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'GET',
'HEAD',
'OPTIONS',
'PATCH',
'PUT'
]
}
}
def test_class_inherits_viewsets_genericviewset(self, viewset):
"""Class Inheritence check
@ -1634,12 +1528,6 @@ class ModelRetrieveUpdateViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -1713,19 +1601,6 @@ class ReadOnlyModelViewSetTestCases(
):
"""Test Suite for class ReadOnlyModelViewSet"""
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'GET',
'HEAD',
'OPTIONS',
]
}
}
def test_class_inherits_viewsets_genericviewset(self, viewset):
"""Class Inheritence check
@ -1760,12 +1635,6 @@ class ReadOnlyModelViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -1838,19 +1707,6 @@ class ReadOnlyListModelViewSetTestCases(
):
"""Test Suite for class ReadOnlyListModelViewSet"""
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'GET',
'HEAD',
'OPTIONS',
]
}
}
def test_class_inherits_viewsets_genericviewset(self, viewset):
"""Class Inheritence check
@ -1885,12 +1741,6 @@ class ReadOnlyListModelViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -1967,14 +1817,6 @@ class AuthUserReadOnlyModelViewSetTestCases(
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'GET',
'HEAD',
'OPTIONS',
]
},
'permission_classes': {
'type': list,
'value': [
@ -2008,12 +1850,6 @@ class AuthUserReadOnlyModelViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -2089,14 +1925,6 @@ class IndexViewsetCases(
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'GET',
'HEAD',
'OPTIONS',
]
},
'permission_classes': {
'type': list,
'value': [
@ -2130,12 +1958,6 @@ class IndexViewsetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -2211,14 +2033,6 @@ class PublicReadOnlyViewSetTestCases(
@property
def parameterized_class_attributes(self):
return {
'allowed_methods': {
'type': list,
'value': [
'GET',
'HEAD',
'OPTIONS',
]
},
'pagination_class': {
'type': type,
'value': StaticPageNumbering
@ -2260,12 +2074,6 @@ class PublicReadOnlyViewSetPyTest(
'type': type(None),
'value': None
},
'allowed_methods': {
'type': list,
'value': [
'OPTIONS',
]
},
'back_url': {
'type': type(None),
'value': None
@ -2411,7 +2219,19 @@ class ModelViewSetInheritedCases(
Use this Test Suite for ViewSet classes that inherit from ModelViewSet
"""
pass
@property
def parameterized_class_attributes(self):
return {
# '_log': {
# 'type': logging.Logger,
# 'value': None
# },
'_log': {
'type': type(None),
},
}
@ -2424,18 +2244,6 @@ class SubModelViewSetInheritedCases(
Use this Test Suite for ViewSet classes that inherit from SubModelViewSet
"""
http_options_response_list = None
"""Inherited class must make and store here a HTTP/Options request"""
route_name = None
"""Inherited class must define the url rout name with namespace"""
base_model = None
"""The Sub Model that is returned from the model property"""
# viewset = None
# @classmethod
# def setUpTestData(self):
# """Setup Test
@ -2450,13 +2258,70 @@ class SubModelViewSetInheritedCases(
# super().setUpTestData()
def test_view_attr_model_value(self, viewset):
"""Attribute Test
@pytest.fixture( scope = 'function' )
def viewset_mock_request(self, django_db_blocker, viewset,
model_user, kwargs_user, organization_one, model
):
Attribute `model` must return the correct sub-model
"""
with django_db_blocker.unblock():
assert viewset().model == self.model
user = model_user.objects.create( **kwargs_user )
view_set = viewset()
request = MockRequest(
user = user,
model = model,
viewset = viewset,
organization = organization_one,
)
view_set.request = request
view_set.kwargs = {
'model_name': model._meta.model_name
}
yield view_set
del view_set.request
with django_db_blocker.unblock():
user.delete()
@property
def parameterized_class_attributes(self):
return {
# '_log': {
# 'type': logging.Logger,
# 'value': None
# },
'_log': {
'type': type(None),
},
'model_suffix': {
'type': str,
'value': None
},
'base_model': {
'type': django.db.models.base.ModelBase,
'value': None
},
'model_kwarg': {
'type': str,
'value': None
}
}
# ToDo: model
# ToDo: related_objects
# ToDo: get_serializer_class
# ToDo: related_objects

View File

@ -1,40 +0,0 @@
from access.tests.functional.contact.test_functional_contact_permission import (
ContactPermissionsAPIInheritedCases
)
class EmployeePermissionsAPITestCases(
ContactPermissionsAPIInheritedCases,
):
add_data: dict = {
'employee_number': 123456,
}
kwargs_create_item: dict = {
'employee_number': 1234568,
}
kwargs_create_item_diff_org: dict = {
'employee_number': 1234567,
}
class EmployeePermissionsAPIInheritedCases(
EmployeePermissionsAPITestCases,
):
add_data: dict = None
kwargs_create_item: dict = None
kwargs_create_item_diff_org: dict = None
class EmployeePermissionsAPIPyTest(
EmployeePermissionsAPITestCases,
):
pass

View File

@ -1,45 +0,0 @@
import pytest
from rest_framework.exceptions import ValidationError
from access.tests.functional.contact.test_functional_contact_serializer import (
ContactSerializerInheritedCases
)
class EmployeeSerializerTestCases(
ContactSerializerInheritedCases
):
parameterized_test_data: dict = {
"employee_number": {
'will_create': False,
'exception_key': 'required'
}
}
valid_data: dict = {
'employee_number': 123456,
}
"""Valid data used by serializer to create object"""
class EmployeeSerializerInheritedCases(
EmployeeSerializerTestCases,
):
parameterized_test_data: dict = None
valid_data: dict = None
"""Valid data used by serializer to create object"""
class EmployeeSerializerPyTest(
EmployeeSerializerTestCases,
):
parameterized_test_data: dict = None

View File

@ -1,60 +0,0 @@
from django.test import TestCase
from access.tests.functional.contact.test_functional_contact_viewset import (
ContactViewSetInheritedCases
)
from human_resources.models.employee import Employee
class ViewSetTestCases(
ContactViewSetInheritedCases,
):
add_data: dict = {
'employee_number': 123,
}
kwargs_create_item: dict = {
'employee_number': 456,
}
kwargs_create_item_diff_org: dict = {
'employee_number': 789,
}
model = Employee
class EmployeeViewSetInheritedCases(
ViewSetTestCases,
):
model = None
@classmethod
def setUpTestData(self):
self.kwargs_create_item = {
**super().kwargs_create_item,
**self.kwargs_create_item
}
self.kwargs_create_item_diff_org = {
**super().kwargs_create_item_diff_org,
**self.kwargs_create_item_diff_org
}
super().setUpTestData()
class EmployeeViewSetTest(
ViewSetTestCases,
TestCase,
):
pass

View File

@ -9,7 +9,7 @@ from access.tests.unit.contact.test_unit_contact_viewset import (
from human_resources.models.employee import Employee
@pytest.mark.skip(reason = 'see #895, tests being refactored')
@pytest.mark.model_employee
class ViewsetTestCases(
ContactViewsetInheritedCases,

View File

@ -1146,6 +1146,7 @@ markers = [
"model_softwarecategory: Selects tests for model Software Category.",
"model_softwareenablefeatureflag: Selects tests for model Software Enabled Feature Flag.",
"model_softwareversion: Selects tests for model Software Version.",
"model_tenant: Selects tests for model Tenant.",
"model_ticketbase: Selects tests for model Ticket Base.",
"model_ticketcategory: Select all ticket category tests.",
"model_ticketcommentaction: Select test for model ticket Action Comment.",