diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 7013fe6a..ab28fffd 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -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 @@ -123,7 +126,10 @@ class ContactEmailBackSerializers(PlateSerializer): ] +# TODO: test decorator +@with_base_attributes class EmployeeBackSerializers(serializers.ModelSerializer): + """Social network serializers.""" class Meta: model = models.Employee @@ -131,4 +137,5 @@ class EmployeeBackSerializers(serializers.ModelSerializer): 'id', 'user', 'name' - ] \ No newline at end of file + ] + diff --git a/apps/utils/decorators.py b/apps/utils/decorators.py new file mode 100644 index 00000000..c48a26c7 --- /dev/null +++ b/apps/utils/decorators.py @@ -0,0 +1,21 @@ + +def with_base_attributes(cls): + + def validate(self, data): + user = None + request = self.context.get("request") + + if request and hasattr(request, "user"): + user = request.user + + if user is not None: + data.update({'modified_by': user}) + + if not self.instance: + data.update({'created_by': user}) + + return data + + setattr(cls, "validate", validate) + + return cls diff --git a/apps/utils/tests.py b/apps/utils/tests.py index 1c9fa71d..e9ad3c23 100644 --- a/apps/utils/tests.py +++ b/apps/utils/tests.py @@ -8,6 +8,8 @@ from http.cookies import SimpleCookie from account.models import User from news.models import News, NewsType +from establishment.models import Establishment, EstablishmentType, Employee + class BaseTestCase(APITestCase): @@ -28,6 +30,12 @@ class BaseTestCase(APITestCase): 'locale': "en" }) + +class TranslateFieldTests(BaseTestCase): + + def setUp(self): + super().setUp() + self.news_type = NewsType.objects.create(name="Test news type") self.news_item = News.objects.create( @@ -45,15 +53,9 @@ class BaseTestCase(APITestCase): news_type=self.news_type ) - -class TranslateFieldModel(BaseTestCase): - def test_model_field(self): self.assertIsNotNone(getattr(self.news_item, "title_translated", None)) - -class TranslateFieldReview(BaseTestCase): - def test_read_locale(self): response = self.client.get(f"/api/web/news/{self.news_item.id}/", format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -62,3 +64,57 @@ class TranslateFieldReview(BaseTestCase): self.assertIn("title_translated", news_data) self.assertEqual(news_data['title_translated'], "Test news item") + + +class BaseAttributeTests(BaseTestCase): + + def setUp(self): + super().setUp() + + self.establishment_type = EstablishmentType.objects.create(name="Test establishment type") + self.establishment = Establishment.objects.create( + name="Test establishment", + establishment_type_id=self.establishment_type.id, + is_publish=True + ) + + def test_base_attr_api(self): + data = { + 'user': self.user.id, + 'name': 'Test name' + } + + response = self.client.post('/api/back/establishments/employees/', data=data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response_data = response.json() + 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='sedragurda2', + password='sedragurdaredips192', + email='sedragurda2@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) + + employee.refresh_from_db() + self.assertEqual(modify_user, employee.modified_by) + self.assertEqual(self.user, employee.created_by)