refactor(settings): Serializer Unit Test Suite re-written to Pytest for model UserSettings

ref: #942 #941
This commit is contained in:
2025-08-05 13:55:49 +09:30
parent d577b12a33
commit 71a510170d
4 changed files with 134 additions and 6 deletions

View File

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

View File

@ -0,0 +1,108 @@
import pytest
from django.db import models
# 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_usersettings
class UserSettingsSerializerTestCases(
SerializerTestCases
):
@pytest.fixture( scope = 'function' )
def created_model(self, django_db_blocker, model, model_kwargs):
with django_db_blocker.unblock():
kwargs_many_to_many = {}
kwargs = {}
for key, value in model_kwargs.items():
field = model._meta.get_field(key)
if isinstance(field, models.ManyToManyField):
kwargs_many_to_many.update({
key: value
})
else:
kwargs.update({
key: value
})
item = model.objects.create( **kwargs )
for key, value in kwargs_many_to_many.items():
field = getattr(item, key)
for entry in value:
field.add(entry)
yield item
item.delete()
@pytest.mark.regression
def test_serializer_create_calls_model_full_clean(self, created_model,
kwargs_api_create, mocker, model, model_serializer, request_user
):
""" Serializer Check
Confirm that using valid data the object validates without exceptions.
"""
mock_view = MockView(
user = request_user,
model = model,
action = 'create',
)
serializer = model_serializer['model'](
created_model,
context = {
'request': mock_view.request,
'view': mock_view,
},
data = kwargs_api_create,
partial = True,
)
serializer.is_valid(raise_exception = True)
full_clean = mocker.spy(model, 'full_clean')
serializer.save()
full_clean.assert_called_once()
class UserSettingsSerializerInheritedCases(
UserSettingsSerializerTestCases
):
pass
@pytest.mark.module_settings
class UserSettingsSerializerPyTest(
UserSettingsSerializerTestCases
):
pass

View File

@ -362,4 +362,5 @@ from .model_user import (
from .model_usersettings import (
kwargs_usersettings,
model_usersettings,
serializer_usersettings,
)

View File

@ -2,6 +2,13 @@ import datetime
import pytest
from settings.models.user_settings import UserSettings
from settings.serializers.user_settings import (
UserSettingsBaseSerializer,
UserSettingsModelSerializer,
UserSettingsViewSerializer,
)
@pytest.fixture( scope = 'class')
def model_usersettings():
@ -9,6 +16,7 @@ def model_usersettings():
yield UserSettings
@pytest.fixture( scope = 'class')
def kwargs_usersettings( django_db_blocker, model_user ):
@ -23,12 +31,6 @@ def kwargs_usersettings( django_db_blocker, model_user ):
password = 'password'
)
# user_settings = UserSettings.objects.get(
# user = user
# )
# user_settings.delete() # Remove default created
kwargs = {
'user': user,
@ -39,3 +41,14 @@ def kwargs_usersettings( django_db_blocker, model_user ):
with django_db_blocker.unblock():
user.delete()
@pytest.fixture( scope = 'class')
def serializer_usersettings():
yield {
'base': UserSettingsBaseSerializer,
'model': UserSettingsModelSerializer,
'view': UserSettingsViewSerializer
}