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,
|
EstablishmentBaseSerializer, PlateSerializer, ContactEmailsSerializer,
|
||||||
ContactPhonesSerializer, SocialNetworkRelatedSerializers, EstablishmentDetailSerializer
|
ContactPhonesSerializer, SocialNetworkRelatedSerializers, EstablishmentDetailSerializer
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from utils.decorators import with_base_attributes
|
||||||
|
|
||||||
from main.models import Currency
|
from main.models import Currency
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -121,7 +124,10 @@ class ContactEmailBackSerializers(PlateSerializer):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: test decorator
|
||||||
|
@with_base_attributes
|
||||||
class EmployeeBackSerializers(serializers.ModelSerializer):
|
class EmployeeBackSerializers(serializers.ModelSerializer):
|
||||||
|
|
||||||
"""Social network serializers."""
|
"""Social network serializers."""
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Employee
|
model = models.Employee
|
||||||
|
|
@ -130,3 +136,4 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
|
||||||
'user',
|
'user',
|
||||||
'name'
|
'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.methods import image_path, svg_image_path
|
||||||
from utils.validators import svg_image_validator
|
from utils.validators import svg_image_validator
|
||||||
|
|
||||||
from django.db.models.signals import pre_save
|
|
||||||
from django.dispatch import receiver
|
|
||||||
|
|
||||||
|
|
||||||
class ProjectBaseMixin(models.Model):
|
class ProjectBaseMixin(models.Model):
|
||||||
"""Base mixin model."""
|
"""Base mixin model."""
|
||||||
|
|
@ -126,23 +123,6 @@ class BaseAttributes(ProjectBaseMixin):
|
||||||
null=True, related_name='%(class)s_records_modified'
|
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:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -91,5 +91,28 @@ class BaseAttributeTests(BaseTestCase):
|
||||||
self.assertIn("id", response_data)
|
self.assertIn("id", response_data)
|
||||||
|
|
||||||
employee = Employee.objects.get(id=response_data['id'])
|
employee = Employee.objects.get(id=response_data['id'])
|
||||||
|
|
||||||
self.assertEqual(self.user, employee.created_by)
|
self.assertEqual(self.user, employee.created_by)
|
||||||
self.assertEqual(self.user, employee.modified_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