Switch to decorator
Add update test
This commit is contained in:
parent
82d29d2795
commit
a55695b120
|
|
@ -7,6 +7,9 @@ from establishment.serializers import (
|
|||
EstablishmentBaseSerializer, PlateSerializer, ContactEmailsSerializer,
|
||||
ContactPhonesSerializer, SocialNetworkRelatedSerializers, EstablishmentDetailSerializer
|
||||
)
|
||||
|
||||
from utils.decorators import with_base_attributes
|
||||
|
||||
from main.models import Currency
|
||||
|
||||
|
||||
|
|
@ -121,7 +124,10 @@ class ContactEmailBackSerializers(PlateSerializer):
|
|||
]
|
||||
|
||||
|
||||
# TODO: test decorator
|
||||
@with_base_attributes
|
||||
class EmployeeBackSerializers(serializers.ModelSerializer):
|
||||
|
||||
"""Social network serializers."""
|
||||
class Meta:
|
||||
model = models.Employee
|
||||
|
|
@ -129,4 +135,5 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
|
|||
'id',
|
||||
'user',
|
||||
'name'
|
||||
]
|
||||
]
|
||||
|
||||
|
|
|
|||
35
apps/utils/decorators.py
Normal file
35
apps/utils/decorators.py
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
from functools import wraps
|
||||
|
||||
def with_base_attributes(cls):
|
||||
|
||||
def create(self, validated_data):
|
||||
user = None
|
||||
request = self.context.get("request")
|
||||
|
||||
if request and hasattr(request, "user"):
|
||||
user = request.user
|
||||
|
||||
if user is not None:
|
||||
validated_data['created_by'] = user
|
||||
validated_data['modified_by'] = user
|
||||
|
||||
obj = self.Meta.model.objects.create(**validated_data)
|
||||
return obj
|
||||
|
||||
def update(self, validated_data):
|
||||
user = None
|
||||
request = self.context.get("request")
|
||||
|
||||
if request and hasattr(request, "user"):
|
||||
user = request.user
|
||||
|
||||
if user is not None:
|
||||
validated_data['modified_by'] = user
|
||||
|
||||
obj = self.Meta.model.objects.create(**validated_data)
|
||||
return obj
|
||||
|
||||
setattr(cls, "create", create)
|
||||
setattr(cls, "update", update)
|
||||
|
||||
return cls
|
||||
|
|
@ -11,9 +11,6 @@ from easy_thumbnails.fields import ThumbnailerImageField
|
|||
from utils.methods import image_path, svg_image_path
|
||||
from utils.validators import svg_image_validator
|
||||
|
||||
from django.db.models.signals import pre_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
|
||||
class ProjectBaseMixin(models.Model):
|
||||
"""Base mixin model."""
|
||||
|
|
@ -126,23 +123,6 @@ class BaseAttributes(ProjectBaseMixin):
|
|||
null=True, related_name='%(class)s_records_modified'
|
||||
)
|
||||
|
||||
@receiver(pre_save)
|
||||
def _pre_save(sender, instance, **kwargs):
|
||||
if not issubclass(sender, BaseAttributes):
|
||||
return
|
||||
|
||||
# debug
|
||||
from establishment.models import Employee
|
||||
if not isinstance(instance, Employee):
|
||||
return
|
||||
|
||||
user = False
|
||||
|
||||
instance.modified_by = user
|
||||
|
||||
if instance._state.adding:
|
||||
instance.created_by = user
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
||||
|
|
|
|||
|
|
@ -91,5 +91,28 @@ class BaseAttributeTests(BaseTestCase):
|
|||
self.assertIn("id", response_data)
|
||||
|
||||
employee = Employee.objects.get(id=response_data['id'])
|
||||
|
||||
self.assertEqual(self.user, employee.created_by)
|
||||
self.assertEqual(self.user, employee.modified_by)
|
||||
|
||||
modify_user = User.objects.create_user(
|
||||
username='sedragurda',
|
||||
password='sedragurdaredips19',
|
||||
email='sedragurda@desoz.com',
|
||||
)
|
||||
|
||||
modify_tokkens = User.create_jwt_tokens(modify_user)
|
||||
self.client.cookies = SimpleCookie(
|
||||
{'access_token': modify_tokkens.get('access_token'),
|
||||
'refresh_token': modify_tokkens.get('refresh_token'),
|
||||
'locale': "en"
|
||||
})
|
||||
|
||||
update_data = {
|
||||
'name': 'Test new name'
|
||||
}
|
||||
|
||||
response = self.client.patch('/api/back/establishments/employees/1/', data=update_data)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
self.assertEqual(modify_user, employee.modified_by)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user