refactor(base): model instancxe code de-duplicated

ref: #804
This commit is contained in:
2025-06-07 21:37:46 +09:30
parent f5ef97ab4a
commit 613ad7e4e4
5 changed files with 98 additions and 89 deletions

View File

@ -92,7 +92,7 @@ class ModelTestCases(
@pytest.fixture( scope = 'function', autouse = True)
def model_instance(cls, request, model, model_kwargs):
def model_instance(cls, model_kwarg_data, model, model_kwargs):
class MockModel(model):
class Meta:
@ -110,52 +110,24 @@ class ModelTestCases(
else:
kwargs = {}
many_field = {}
for field, value in model_kwargs.items():
if isinstance(getattr(model, field).field, models.ManyToManyField):
if field in many_field:
many_field[field] += [ value ]
else:
many_field.update({
field: [
value
]
})
continue
kwargs.update({
field: value
})
instance = model.objects.create( **kwargs )
instance = model_kwarg_data(
model = model,
model_kwargs = model_kwargs,
create_instance = True,
)
for field, values in many_field.items():
for value in values:
getattr(instance, field).add( value )
yield instance
yield instance['instance']
if 'mockmodel' in apps.all_models['core']:
del apps.all_models['core']['mockmodel']
if instance.id and type(instance) is not MockModel:
if type(instance) is dict:
instance['instance'].delete()
elif instance.id and type(instance) is not MockModel:
instance.delete()

View File

@ -98,6 +98,10 @@ from .model_knowledgebasecategory import (
model_knowledgebasecategory,
)
from .model_kwarg_data import (
model_kwarg_data
)
from .model_manufacturer import (
kwargs_manufacturer,
model_manufacturer,

View File

@ -1,4 +1,5 @@
import pytest
import json
from django.db import models
@ -19,6 +20,9 @@ def kwargs_api_create(django_db_blocker, model_kwargs):
if isinstance(value, models.Model):
value = value.id
elif isinstance(value, dict):
value = json.dumps(value)
kwargs.update({
field: value
})

View File

@ -10,7 +10,7 @@ model_objs: list = []
@pytest.fixture( scope = 'class')
def model_instance(django_db_blocker, model_user, model, model_kwargs):
def model_instance(django_db_blocker, model_kwarg_data, model, model_kwargs):
with django_db_blocker.unblock():
@ -51,57 +51,13 @@ def model_instance(django_db_blocker, model_user, model, model_kwargs):
else:
new_kwargs = model_kwargs.copy()
new_kwargs.update( kwargs_create )
kwargs = {}
many_field = {}
for field, value in new_kwargs.items():
if isinstance(getattr(model, field).field, models.ManyToManyField):
if field in many_field:
many_field[field] += [ value ]
else:
many_field.update({
field: [
value
]
})
continue
kwargs.update({
field: value
})
if random_field:
random_str = str(datetime.datetime.now(tz=datetime.timezone.utc)).replace(
' ', '').replace(':', '').replace('+', '').replace('.', '')
kwargs.update({
random_field: str( random_field ) + '' + random_str
})
obj = model.objects.create(
**kwargs
obj = model_kwarg_data(
model = model,
model_kwargs = model_kwargs,
create_instance = True,
)
for field, values in many_field.items():
for value in values:
getattr(obj, field).add( value )
model_objs += [ obj ]

73
app/tests/fixtures/model_kwarg_data.py vendored Normal file
View File

@ -0,0 +1,73 @@
import datetime
import json
import pytest
from django.db import models
@pytest.fixture( scope = 'class' )
def model_kwarg_data():
def data(model, model_kwargs, model_instance = None, create_instance = False) -> dict:
random_str = str(datetime.datetime.now(tz=datetime.timezone.utc))
random_str = str(random_str).replace(
' ', '').replace(':', '').replace('+', '').replace('.', '').replace('-', '')
# data = {}
kwargs = {}
many_field = {}
for field, value in model_kwargs.items():
if isinstance(getattr(model, field).field, models.ManyToManyField):
if field in many_field:
many_field[field] += [ value ]
else:
many_field.update({
field: [
value
]
})
continue
elif getattr(model, field).field.unique:
value = 'a' + random_str
kwargs.update({
field: value
})
instance = None
if create_instance:
instance =model.objects.create(
**kwargs
)
for field, values in many_field.items():
for value in values:
getattr(instance, field).add( value )
return {
'instance': instance,
'kwargs': kwargs,
'api_json': ''
}
yield data