refactor(itam): Serializer Unit Test Suite re-written to Pytest for model SoftwareVersion

ref: #925 #927
This commit is contained in:
2025-08-02 12:15:34 +09:30
parent 7d47a9ca49
commit fc984c5034
4 changed files with 117 additions and 0 deletions

View File

@ -17,3 +17,9 @@ def model_kwargs(request, kwargs_softwareversion):
if hasattr(request.cls, 'kwargs_create_item'):
del request.cls.kwargs_create_item
@pytest.fixture( scope = 'class')
def model_serializer(serializer_softwareversion):
yield serializer_softwareversion

View File

@ -0,0 +1,95 @@
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_softwareversion
class SoftwareVersionSerializerTestCases(
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'
@pytest.mark.regression
def test_serializer_create_calls_model_full_clean(self,
kwargs_api_create, mocker, model, model_serializer, request_user
):
mock_view = MockView(
user = request_user,
model = model,
action = 'create',
)
mock_view.kwargs = {
'software_id': kwargs_api_create['software']
}
serializer = model_serializer['model'](
context = {
'request': mock_view.request,
'view': mock_view,
},
data = kwargs_api_create
)
serializer.is_valid(raise_exception = True)
full_clean = mocker.spy(model, 'full_clean')
serializer.save()
full_clean.assert_called_once()
class SoftwareVersionSerializerInheritedCases(
SoftwareVersionSerializerTestCases
):
pass
@pytest.mark.module_itam
class SoftwareVersionSerializerPyTest(
SoftwareVersionSerializerTestCases
):
pass

View File

@ -291,6 +291,7 @@ from .model_softwareenablefeatureflag import (
from .model_softwareversion import (
kwargs_softwareversion,
model_softwareversion,
serializer_softwareversion,
)
from .model_ticketbase import (

View File

@ -2,6 +2,11 @@ import datetime
import pytest
from itam.models.software import SoftwareVersion
from itam.serializers.software_version import (
SoftwareVersionBaseSerializer,
SoftwareVersionModelSerializer,
SoftwareVersionViewSerializer
)
@ -41,3 +46,13 @@ def kwargs_softwareversion(django_db_blocker,
with django_db_blocker.unblock():
software.delete()
@pytest.fixture( scope = 'class')
def serializer_softwareversion():
yield {
'base': SoftwareVersionBaseSerializer,
'model': SoftwareVersionModelSerializer,
'view': SoftwareVersionViewSerializer
}