Switch to decorator

Add update test
This commit is contained in:
littlewolf 2019-09-24 20:12:09 +03:00
parent 82d29d2795
commit a55695b120
4 changed files with 66 additions and 21 deletions

View File

@ -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
View 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

View File

@ -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."""

View File

@ -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)