From 42e191ba7660b9313efdb473a53666c53db7767a Mon Sep 17 00:00:00 2001 From: Jon Date: Sat, 2 Aug 2025 12:13:26 +0930 Subject: [PATCH] refactor(itam): Serializer Unit Test Suite re-written to Pytest for model SoftwareCategory ref: #925 #926 --- .../test_software_category_serializer.py | 63 ------------------ .../tests/unit/software_category/conftest.py | 6 ++ .../test_unit_software_category_serializer.py | 65 +++++++++++++++++++ app/tests/fixtures/__init__.py | 1 + app/tests/fixtures/model_softwarecategory.py | 15 +++++ 5 files changed, 87 insertions(+), 63 deletions(-) delete mode 100644 app/itam/tests/functional/software_category/test_software_category_serializer.py create mode 100644 app/itam/tests/unit/software_category/test_unit_software_category_serializer.py diff --git a/app/itam/tests/functional/software_category/test_software_category_serializer.py b/app/itam/tests/functional/software_category/test_software_category_serializer.py deleted file mode 100644 index b1142c27..00000000 --- a/app/itam/tests/functional/software_category/test_software_category_serializer.py +++ /dev/null @@ -1,63 +0,0 @@ -import pytest - -from django.test import TestCase - -from rest_framework.exceptions import ValidationError - -from access.models.tenant import Tenant as Organization - -from centurion.tests.abstract.mock_view import MockView, User - -from itam.serializers.software_category import SoftwareCategory, SoftwareCategoryModelSerializer - - - -class SoftwareCategoryValidationAPI( - TestCase, -): - - model = SoftwareCategory - - @classmethod - def setUpTestData(self): - """Setup Test - - 1. Create an org - 2. Create an item - """ - - organization = Organization.objects.create(name='test_org') - - self.user = User.objects.create_user(username="test_user_view", password="password") - - self.organization = organization - - self.item = self.model.objects.create( - organization=organization, - name = 'os name', - ) - - self.mock_view = MockView( user = self.user ) - - - - def test_serializer_validation_no_name(self): - """Serializer Validation Check - - Ensure that if creating and no name is provided a validation error occurs - """ - - with pytest.raises(ValidationError) as err: - - serializer = SoftwareCategoryModelSerializer( - context = { - 'request': self.mock_view.request, - 'view': self.mock_view, - }, - data={ - "organization": self.organization.id, - }) - - serializer.is_valid(raise_exception = True) - - assert err.value.get_codes()['name'][0] == 'required' diff --git a/app/itam/tests/unit/software_category/conftest.py b/app/itam/tests/unit/software_category/conftest.py index 0ea0beb8..0968a076 100644 --- a/app/itam/tests/unit/software_category/conftest.py +++ b/app/itam/tests/unit/software_category/conftest.py @@ -17,3 +17,9 @@ def model_kwargs(request, kwargs_softwarecategory): if hasattr(request.cls, 'kwargs_create_item'): del request.cls.kwargs_create_item + + +@pytest.fixture( scope = 'class') +def model_serializer(serializer_softwarecategory): + + yield serializer_softwarecategory diff --git a/app/itam/tests/unit/software_category/test_unit_software_category_serializer.py b/app/itam/tests/unit/software_category/test_unit_software_category_serializer.py new file mode 100644 index 00000000..a1639ba8 --- /dev/null +++ b/app/itam/tests/unit/software_category/test_unit_software_category_serializer.py @@ -0,0 +1,65 @@ +import pytest + +from rest_framework.exceptions import ValidationError + +from api.tests.unit.test_unit_serializer import ( + SerializerTestCases +) + +from centurion.tests.abstract.mock_view import MockView + + + +@pytest.mark.model_softwarecategory +class SoftwareCategorySerializerTestCases( + SerializerTestCases +): + + + def test_serializer_validation_no_name(self, + kwargs_api_create, model, model_serializer, request_user, + ): + """Serializer Validation Check + + Ensure that if creating and no name is provided a validation error occurs + """ + + mock_view = MockView( + user = request_user, + model = model, + action = 'create', + ) + + kwargs = kwargs_api_create.copy() + del kwargs['name'] + + with pytest.raises(ValidationError) as err: + + serializer = model_serializer['model']( + context = { + 'request': mock_view.request, + 'view': mock_view, + }, + data = kwargs, + ) + + serializer.is_valid(raise_exception = True) + + assert err.value.get_codes()['name'][0] == 'required' + + + + + +class SoftwareCategorySerializerInheritedCases( + SoftwareCategorySerializerTestCases +): + pass + + + +@pytest.mark.module_itam +class SoftwareCategorySerializerPyTest( + SoftwareCategorySerializerTestCases +): + pass \ No newline at end of file diff --git a/app/tests/fixtures/__init__.py b/app/tests/fixtures/__init__.py index 21100a98..b9471126 100644 --- a/app/tests/fixtures/__init__.py +++ b/app/tests/fixtures/__init__.py @@ -280,6 +280,7 @@ from .model_software import ( from .model_softwarecategory import ( kwargs_softwarecategory, model_softwarecategory, + serializer_softwarecategory, ) from .model_softwareenablefeatureflag import ( diff --git a/app/tests/fixtures/model_softwarecategory.py b/app/tests/fixtures/model_softwarecategory.py index d6159349..e5452a31 100644 --- a/app/tests/fixtures/model_softwarecategory.py +++ b/app/tests/fixtures/model_softwarecategory.py @@ -2,6 +2,11 @@ import datetime import pytest from itam.models.software import SoftwareCategory +from itam.serializers.software_category import ( + SoftwareCategoryBaseSerializer, + SoftwareCategoryModelSerializer, + SoftwareCategoryViewSerializer +) @@ -24,3 +29,13 @@ def kwargs_softwarecategory(kwargs_centurionmodel): } yield kwargs.copy() + + +@pytest.fixture( scope = 'class') +def serializer_softwarecategory(): + + yield { + 'base': SoftwareCategoryBaseSerializer, + 'model': SoftwareCategoryModelSerializer, + 'view': SoftwareCategoryViewSerializer + }