feat(core): If user context not supplied, dont create audithistory for model
this allows tests and direct creation via code if required. ref: #789 #759
This commit is contained in:
@ -18,10 +18,10 @@ class TenancyAbstractModelTestCases(
|
||||
parameterized_class_attributes = {
|
||||
'context': {
|
||||
'type': dict,
|
||||
'value': {
|
||||
'logger': None,
|
||||
'user': None,
|
||||
}
|
||||
# 'value': {
|
||||
# 'logger': None,
|
||||
# 'user': None,
|
||||
# }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -394,35 +394,30 @@ class APIPermissionsInheritedCases(
|
||||
def prepare(self, request, api_request_permissions, model_instance):
|
||||
|
||||
request.cls.change_item = model_instance(
|
||||
user = api_request_permissions['user']['change'],
|
||||
kwargs_create = {
|
||||
'organization': api_request_permissions['tenancy']['user']
|
||||
}
|
||||
)
|
||||
|
||||
request.cls.delete_item = model_instance(
|
||||
user = api_request_permissions['user']['delete'],
|
||||
kwargs_create = {
|
||||
'organization': api_request_permissions['tenancy']['user']
|
||||
}
|
||||
)
|
||||
|
||||
request.cls.diff_tenancy_item = model_instance(
|
||||
user = api_request_permissions['user']['different_tenancy'],
|
||||
kwargs_create = {
|
||||
'organization': api_request_permissions['tenancy']['different']
|
||||
}
|
||||
)
|
||||
|
||||
request.cls.global_item = model_instance(
|
||||
user = api_request_permissions['user']['view'],
|
||||
kwargs_create = {
|
||||
'organization': api_request_permissions['tenancy']['global']
|
||||
}
|
||||
)
|
||||
|
||||
request.cls.view_item = model_instance(
|
||||
user = api_request_permissions['user']['view'],
|
||||
kwargs_create = {
|
||||
'organization': api_request_permissions['tenancy']['user']
|
||||
}
|
||||
|
@ -36,24 +36,12 @@ class ModelTestCases:
|
||||
|
||||
with django_db_blocker.unblock():
|
||||
|
||||
default_val = model.context['user']
|
||||
|
||||
model.context['user'] = user
|
||||
|
||||
model_object = model.objects.create(
|
||||
**request.cls.kwargs_create_item
|
||||
)
|
||||
|
||||
model.context['user'] = default_val
|
||||
|
||||
model_object.context['user'] = user
|
||||
|
||||
yield model_object
|
||||
|
||||
model_object.context['user'] = default_val
|
||||
|
||||
model_object.delete()
|
||||
|
||||
|
||||
|
||||
@property
|
||||
|
@ -1,21 +1,24 @@
|
||||
from django.apps import apps
|
||||
from django.contrib.auth.models import ContentType
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db.models.signals import (
|
||||
# post_delete,
|
||||
post_save
|
||||
)
|
||||
from django.dispatch import receiver
|
||||
|
||||
|
||||
|
||||
# @receiver(post_delete, dispatch_uid="audit_history_delete")
|
||||
@receiver(post_save, dispatch_uid="audit_history_save")
|
||||
def audit_history(sender, instance, **kwargs):
|
||||
|
||||
if getattr(instance, '_audit_enabled', False):
|
||||
|
||||
audit_model = apps.get_model( instance._meta.app_label, instance._meta.object_name + 'AuditHistory')
|
||||
if instance.context.get('user', None) is None:
|
||||
return
|
||||
|
||||
audit_model = apps.get_model(
|
||||
instance._meta.app_label,
|
||||
instance._meta.object_name + 'AuditHistory'
|
||||
)
|
||||
|
||||
audit_action = audit_model.Actions.UPDATE
|
||||
|
||||
@ -27,14 +30,6 @@ def audit_history(sender, instance, **kwargs):
|
||||
|
||||
audit_action = audit_model.Actions.DELETE
|
||||
|
||||
if instance.context.get('user', None) is None:
|
||||
|
||||
raise ValidationError(
|
||||
code = 'model_missing_user_context',
|
||||
message = f'Model {instance._meta.model_name}, is missing user context. ' \
|
||||
'No audit history can be saved'
|
||||
)
|
||||
|
||||
|
||||
history = audit_model.objects.create(
|
||||
organization = instance.organization,
|
||||
|
@ -38,13 +38,6 @@ class CenturionAbstractModelTestCases(
|
||||
'type': bool,
|
||||
'value': True,
|
||||
},
|
||||
'context': {
|
||||
'type': dict,
|
||||
'value': {
|
||||
'logger': None,
|
||||
'user': None,
|
||||
}
|
||||
},
|
||||
'model_tag': {
|
||||
'type': str,
|
||||
},
|
||||
@ -277,16 +270,10 @@ class CenturionAbstractModelInheritedCases(
|
||||
})
|
||||
|
||||
|
||||
default_val = model.context['user']
|
||||
|
||||
model.context['user'] = user
|
||||
|
||||
model_object = model.objects.create(
|
||||
**kwargs
|
||||
)
|
||||
|
||||
model.context['user'] = default_val
|
||||
|
||||
for field, values in many_field.items():
|
||||
|
||||
for value in values:
|
||||
|
@ -164,8 +164,6 @@ class ViewSetBase:
|
||||
enabled = True
|
||||
)
|
||||
|
||||
self.model.context['user'] = self.view_user
|
||||
|
||||
self.global_org_item = self.model.objects.create(
|
||||
organization = self.global_organization,
|
||||
name = 'global_item',
|
||||
@ -187,8 +185,6 @@ class ViewSetBase:
|
||||
software = software,
|
||||
)
|
||||
|
||||
self.model.context['user'] = None
|
||||
|
||||
|
||||
self.url_view_kwargs = {'pk': self.item.id}
|
||||
|
||||
|
@ -42,8 +42,6 @@ class API(
|
||||
|
||||
self.view_user = User.objects.create_user(username="test_user_view", password="password")
|
||||
|
||||
self.model.context['user'] = self.view_user
|
||||
|
||||
self.item = self.model.objects.create(
|
||||
organization = self.organization,
|
||||
name = 'one',
|
||||
@ -56,8 +54,6 @@ class API(
|
||||
enabled = True
|
||||
)
|
||||
|
||||
self.model.context['user'] = None
|
||||
|
||||
self.url_view_kwargs = {'pk': self.item.id}
|
||||
|
||||
view_permissions = Permission.objects.get(
|
||||
|
17
app/tests/fixtures/model_instance.py
vendored
17
app/tests/fixtures/model_instance.py
vendored
@ -15,12 +15,10 @@ def model_instance(django_db_blocker, model_user, model, model_kwargs):
|
||||
with django_db_blocker.unblock():
|
||||
|
||||
|
||||
def instance( user = None, random_field:str = '', kwargs_create: dict = {} ):
|
||||
def instance( random_field:str = '', kwargs_create: dict = {} ):
|
||||
"""Create a model instance
|
||||
|
||||
Args:
|
||||
user (User, optional): The User to create and add to model.context['user'].
|
||||
Defaults to None.
|
||||
random_field (str, optional): The unique field that needs to be randomized.
|
||||
Defaults to ''.
|
||||
kwargs_create (dict, optional): object create kwargs. overwrites default.
|
||||
@ -88,19 +86,10 @@ def model_instance(django_db_blocker, model_user, model, model_kwargs):
|
||||
})
|
||||
|
||||
|
||||
model_context_user_default = model.context['user']
|
||||
|
||||
if user:
|
||||
model.context['user'] = user
|
||||
|
||||
|
||||
obj = model.objects.create(
|
||||
**kwargs
|
||||
)
|
||||
|
||||
model.context['user'] = model_context_user_default
|
||||
|
||||
|
||||
for field, values in many_field.items():
|
||||
|
||||
for value in values:
|
||||
@ -120,15 +109,11 @@ def model_instance(django_db_blocker, model_user, model, model_kwargs):
|
||||
|
||||
if model_obj._meta.abstract:
|
||||
|
||||
model_obj.context['user'] = None
|
||||
|
||||
del model_obj
|
||||
|
||||
else:
|
||||
|
||||
try:
|
||||
model_obj.context['user'] = None
|
||||
|
||||
model_obj.delete()
|
||||
except:
|
||||
pass
|
||||
|
6
app/tests/fixtures/model_knowledgebase.py
vendored
6
app/tests/fixtures/model_knowledgebase.py
vendored
@ -31,17 +31,11 @@ def kwargs_knowledgebase(django_db_blocker,
|
||||
password = 'apassword'
|
||||
)
|
||||
|
||||
default_context_user = model_knowledgebasecategory.context['user']
|
||||
model_knowledgebasecategory.context['user'] = user
|
||||
|
||||
category = model_knowledgebasecategory.objects.create(
|
||||
organization = kwargs_centurionmodel['organization'],
|
||||
name = 'kb cat for kb art' + random_str
|
||||
)
|
||||
|
||||
category.context['user'] = default_context_user
|
||||
model_knowledgebasecategory.context['user'] = default_context_user
|
||||
|
||||
kwargs = {
|
||||
**kwargs_centurionmodel.copy(),
|
||||
'title': 'title' + random_str,
|
||||
|
Reference in New Issue
Block a user