test(core): Ensure model that has audit enableed has audit model
ref: #773 #515
This commit is contained in:
@ -21,6 +21,31 @@ class CenturionAbstractModelTestCases(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def test_model_has_history_model(self, model):
|
||||||
|
"""Audit History Table check
|
||||||
|
|
||||||
|
Check if the model has a corresponding audit history table that should be
|
||||||
|
called `<app_label>_<model_name>_audithistory`
|
||||||
|
"""
|
||||||
|
|
||||||
|
if model._meta.abstract:
|
||||||
|
|
||||||
|
pytest.xfail( reason = 'Model is an Abstract Model and can not be created.' )
|
||||||
|
|
||||||
|
elif not getattr(model, '_audit_enabled', False):
|
||||||
|
|
||||||
|
pytest.xfail( reason = 'Model has audit history disabled.' )
|
||||||
|
|
||||||
|
|
||||||
|
history_model = apps.get_model(
|
||||||
|
app_label = model._meta.app_label,
|
||||||
|
model_name = model().get_history_model_name()
|
||||||
|
)
|
||||||
|
|
||||||
|
assert history_model.__name__ == model().get_history_model_name()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_model_create_has_history_entry(self, content_type, created_model, model):
|
def test_model_create_has_history_entry(self, content_type, created_model, model):
|
||||||
"""Model Created
|
"""Model Created
|
||||||
|
|
||||||
@ -28,10 +53,14 @@ class CenturionAbstractModelTestCases(
|
|||||||
entry.
|
entry.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if model._meta.abstract:
|
if created_model._meta.abstract:
|
||||||
|
|
||||||
pytest.xfail( reason = 'Model is an Abstract Model and can not be created.' )
|
pytest.xfail( reason = 'Model is an Abstract Model and can not be created.' )
|
||||||
|
|
||||||
|
elif not getattr(created_model, '_audit_enabled', False):
|
||||||
|
|
||||||
|
pytest.xfail( reason = 'Model has audit history disabled.' )
|
||||||
|
|
||||||
|
|
||||||
history_model = apps.get_model( created_model._meta.app_label, created_model.get_history_model_name() )
|
history_model = apps.get_model( created_model._meta.app_label, created_model.get_history_model_name() )
|
||||||
|
|
||||||
|
@ -59,3 +59,104 @@ class CenturionAuditModelInheritedCases(
|
|||||||
):
|
):
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CenturionAuditModelPyTest(
|
||||||
|
CenturionAuditModelTestCases,
|
||||||
|
):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_models( excludes: list[ str ] ) -> list[ tuple ]:
|
||||||
|
"""Fetch models from Centurion Apps
|
||||||
|
|
||||||
|
Args:
|
||||||
|
excludes (list[ str ]): Words that may be in a models name to exclude
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list[ tuple ]: Centurion ERP Only models
|
||||||
|
"""
|
||||||
|
|
||||||
|
models: list = []
|
||||||
|
|
||||||
|
model_apps: list = []
|
||||||
|
|
||||||
|
exclude_model_apps = [
|
||||||
|
'django',
|
||||||
|
'django_celery_results',
|
||||||
|
'django_filters',
|
||||||
|
'drf_spectacular',
|
||||||
|
'drf_spectacular_sidecar',
|
||||||
|
'coresheaders',
|
||||||
|
'corsheaders',
|
||||||
|
'rest_framework',
|
||||||
|
'rest_framework_json_api',
|
||||||
|
'social_django',
|
||||||
|
]
|
||||||
|
|
||||||
|
for app in settings.INSTALLED_APPS:
|
||||||
|
|
||||||
|
app = app.split('.')[0]
|
||||||
|
|
||||||
|
if app in exclude_model_apps:
|
||||||
|
continue
|
||||||
|
|
||||||
|
model_apps += [ app ]
|
||||||
|
|
||||||
|
|
||||||
|
for model in apps.get_models():
|
||||||
|
|
||||||
|
if model._meta.app_label not in model_apps:
|
||||||
|
continue
|
||||||
|
|
||||||
|
skip = False
|
||||||
|
|
||||||
|
for exclude in excludes:
|
||||||
|
|
||||||
|
if exclude in str(model._meta.model_name):
|
||||||
|
skip = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if skip:
|
||||||
|
continue
|
||||||
|
|
||||||
|
models += [ (model,) ]
|
||||||
|
|
||||||
|
return models
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
history_models = get_models( [ 'audithistory', 'base', 'history', 'note', 'ticket' ] )
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
argnames = [
|
||||||
|
'test_model'
|
||||||
|
],
|
||||||
|
argvalues = history_models,
|
||||||
|
ids = [ model[0]._meta.app_label + '_' + model[0]._meta.model_name for model in history_models ]
|
||||||
|
)
|
||||||
|
def test_model_has_history_model(self, test_model, model):
|
||||||
|
"""Audit History Table check
|
||||||
|
|
||||||
|
Check if the model has a corresponding audit history table that should be
|
||||||
|
called `<app_label>_<model_name>_audithistory`
|
||||||
|
"""
|
||||||
|
|
||||||
|
if test_model._meta.abstract:
|
||||||
|
|
||||||
|
pytest.xfail( reason = 'Model is an Abstract Model and can not be created.' )
|
||||||
|
|
||||||
|
elif not getattr(test_model, '_audit_enabled', False):
|
||||||
|
|
||||||
|
pytest.xfail( reason = 'Model has audit history disabled.' )
|
||||||
|
|
||||||
|
|
||||||
|
history_model = apps.get_model(
|
||||||
|
app_label = test_model._meta.app_label,
|
||||||
|
model_name = test_model().get_history_model_name()
|
||||||
|
)
|
||||||
|
|
||||||
|
assert history_model.__name__ == test_model().get_history_model_name()
|
||||||
|
Reference in New Issue
Block a user