diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index caa13742..7199eb54 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -34,7 +34,39 @@ class EstablishmentListCreateSerializer(EstablishmentBaseSerializer): 'type_id', 'type', 'socials', - 'image_url' + 'image_url', + # TODO: check in admin filters + 'is_publish' + ] + + +class EstablishmentRUDSerializer(EstablishmentBaseSerializer): + """Establishment create serializer""" + + type_id = serializers.PrimaryKeyRelatedField( + source='establishment_type', + queryset=models.EstablishmentType.objects.all(), write_only=True + ) + phones = ContactPhonesSerializer(read_only=False, many=True, ) + emails = ContactEmailsSerializer(read_only=False, many=True, ) + socials = SocialNetworkRelatedSerializers(read_only=False, many=True, ) + + class Meta: + model = models.Establishment + fields = [ + 'id', + 'name', + 'website', + 'phones', + 'emails', + 'price_level', + 'toque_number', + 'type_id', + 'type', + 'socials', + 'image_url', + # TODO: check in admin filters + 'is_publish' ] diff --git a/apps/establishment/tests.py b/apps/establishment/tests.py index 0aa44a0f..5de7d779 100644 --- a/apps/establishment/tests.py +++ b/apps/establishment/tests.py @@ -1,8 +1,11 @@ +import json from rest_framework.test import APITestCase from account.models import User from rest_framework import status from http.cookies import SimpleCookie -from establishment.models import Employee +from main.models import Currency +from establishment.models import Establishment, EstablishmentType, Menu + # Create your tests here. @@ -21,9 +24,41 @@ class BaseTestCase(APITestCase): {'access_token': tokkens.get('access_token'), 'refresh_token': tokkens.get('refresh_token')}) + self.establishment_type = EstablishmentType.objects.create(name="Test establishment type") + + +class EstablishmentTests(BaseTestCase): + def test_establishment_CRUD(self): + response = self.client.get('/api/back/establishments/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = { + 'name': 'Test establishment', + 'type_id': self.establishment_type.id, + 'is_publish': True + } + + response = self.client.post('/api/back/establishments/', data=data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + establishment = response.json() + + response = self.client.get(f'/api/back/establishments/{establishment["id"]}/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + update_data = { + 'name': 'Test new establishment' + } + + response = self.client.patch(f'/api/back/establishments/{establishment["id"]}/', data=update_data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + response = self.client.delete(f'/api/back/establishments/{establishment["id"]}/', format='json') + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + class EmployeeTests(BaseTestCase): - def test_employee_CRD(self): + def test_employee_CRUD(self): response = self.client.get('/api/back/establishments/employees/', format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -38,9 +73,191 @@ class EmployeeTests(BaseTestCase): response = self.client.get('/api/back/establishments/employees/1/', format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) + 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) + response = self.client.delete('/api/back/establishments/employees/1/', format='json') self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) +# Class to test childs +class ChildTestCase(BaseTestCase): + def setUp(self): + super().setUp() + self.establishment = Establishment.objects.create( + name="Test establishment", + establishment_type_id=self.establishment_type.id, + is_publish=True + ) +# Test childs +class EmailTests(ChildTestCase): + def test_email_CRUD(self): + response = self.client.get('/api/back/establishments/emails/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = { + 'email': "test@test.com", + 'establishment': self.establishment.id + } + + response = self.client.post('/api/back/establishments/emails/', data=data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response = self.client.get('/api/back/establishments/emails/1/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + update_data = { + 'email': 'testnew@test.com' + } + + response = self.client.patch('/api/back/establishments/emails/1/', data=update_data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + response = self.client.delete('/api/back/establishments/emails/1/') + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + +class PhoneTests(ChildTestCase): + def test_phone_CRUD(self): + response = self.client.get('/api/back/establishments/phones/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = { + 'phone': "+79999999999", + 'establishment': self.establishment.id + } + + response = self.client.post('/api/back/establishments/phones/', data=data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response = self.client.get('/api/back/establishments/phones/1/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + update_data = { + 'phone': '+79999999998' + } + + response = self.client.patch('/api/back/establishments/phones/1/', data=update_data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + response = self.client.delete('/api/back/establishments/phones/1/') + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + +class SocialTests(ChildTestCase): + def test_social_CRUD(self): + response = self.client.get('/api/back/establishments/socials/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = { + 'title': "Test social", + 'url': 'https://testsocial.com', + 'establishment': self.establishment.id + } + + response = self.client.post('/api/back/establishments/socials/', data=data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response = self.client.get('/api/back/establishments/socials/1/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + update_data = { + 'title': 'Test new social' + } + + response = self.client.patch('/api/back/establishments/socials/1/', data=update_data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + response = self.client.delete('/api/back/establishments/socials/1/') + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + +class PlateTests(ChildTestCase): + def test_plate_CRUD(self): + response = self.client.get('/api/back/establishments/plates/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + menu = Menu.objects.create( + category=json.dumps({"en-GB": "Test category"}), + establishment=self.establishment + ) + currency = Currency.objects.create(name="Test currency") + + data = { + 'name': json.dumps({"en-GB": "Test plate"}), + 'establishment': self.establishment.id, + 'price': 10, + 'menu': menu.id, + 'currency_id': currency.id + } + + response = self.client.post('/api/back/establishments/plates/', data=data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response = self.client.get('/api/back/establishments/plates/1/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + update_data = { + 'name': json.dumps({"en-GB": "Test new plate"}) + } + + response = self.client.patch('/api/back/establishments/plates/1/', data=update_data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + response = self.client.delete('/api/back/establishments/plates/1/') + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + +class MenuTests(ChildTestCase): + def test_menu_CRUD(self): + response = self.client.get('/api/back/establishments/menus/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = { + 'category': json.dumps({"en-GB": "Test category"}), + 'establishment': self.establishment.id + } + + response = self.client.post('/api/back/establishments/menus/', data=data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response = self.client.get('/api/back/establishments/menus/1/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + update_data = { + 'category': json.dumps({"en-GB": "Test new category"}) + } + + response = self.client.patch('/api/back/establishments/menus/1/', data=update_data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + response = self.client.delete('/api/back/establishments/menus/1/') + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + +class EstablishmentShedulerTests(ChildTestCase): + def test_shedule_CRUD(self): + data = { + 'weekday': 1 + } + response = self.client.post(f'/api/back/establishments/{self.establishment.id}/schedule/', data=data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response = self.client.get(f'/api/back/establishments/{self.establishment.id}/schedule/1/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + update_data = { + 'weekday': 2 + } + + response = self.client.patch(f'/api/back/establishments/{self.establishment.id}/schedule/1/', data=update_data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + response = self.client.delete(f'/api/back/establishments/{self.establishment.id}/schedule/1/') + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) diff --git a/apps/establishment/urls/back.py b/apps/establishment/urls/back.py index 9c0aac73..dca5fb55 100644 --- a/apps/establishment/urls/back.py +++ b/apps/establishment/urls/back.py @@ -9,7 +9,7 @@ app_name = 'establishment' urlpatterns = [ path('', views.EstablishmentListCreateView.as_view(), name='list'), - path('/', views.EstablishmentRetrieveView.as_view(), name='detail'), + path('/', views.EstablishmentRUDView.as_view(), name='detail'), path('/schedule//', views.EstablishmentScheduleRUDView.as_view(), name='schedule-rud'), path('/schedule/', views.EstablishmentScheduleCreateView.as_view(), @@ -17,7 +17,7 @@ urlpatterns = [ path('menus/', views.MenuListCreateView.as_view(), name='menu-list'), path('menus//', views.MenuRUDView.as_view(), name='menu-rud'), path('plates/', views.PlateListCreateView.as_view(), name='plates'), - path('plates//', views.PlateListCreateView.as_view(), name='plate-rud'), + path('plates//', views.PlateRUDView.as_view(), name='plate-rud'), path('socials/', views.SocialListCreateView.as_view(), name='socials'), path('socials//', views.SocialRUDView.as_view(), name='social-rud'), path('phones/', views.PhonesListCreateView.as_view(), name='phones'), diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index aa52caec..974fca8a 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -13,6 +13,11 @@ class EstablishmentListCreateView(EstablishmentMixin, generics.ListCreateAPIView serializer_class = serializers.EstablishmentListCreateSerializer +class EstablishmentRUDView(generics.RetrieveUpdateDestroyAPIView): + queryset = models.Establishment.objects.all() + serializer_class = serializers.EstablishmentRUDSerializer + + class MenuListCreateView(generics.ListCreateAPIView): """Menu list create view.""" serializer_class = serializers.MenuSerializers @@ -83,7 +88,8 @@ class EmployeeListCreateView(generics.ListCreateAPIView): queryset = models.Employee.objects.all() pagination_class = None -class EmployeeRUDView(generics.RetrieveDestroyAPIView): + +class EmployeeRUDView(generics.RetrieveUpdateDestroyAPIView): """Social RUD view.""" serializer_class = serializers.EmployeeBackSerializers - queryset = models.Employee.objects.all() \ No newline at end of file + queryset = models.Employee.objects.all() diff --git a/apps/establishment/views/web.py b/apps/establishment/views/web.py index 78aa3a5f..441f89c4 100644 --- a/apps/establishment/views/web.py +++ b/apps/establishment/views/web.py @@ -33,7 +33,6 @@ class EstablishmentSimilarListView(EstablishmentListView): return super().get_queryset().similar(establishment_pk=self.kwargs.get('pk'))\ .order_by('-total_mark')[:13] - class EstablishmentRetrieveView(EstablishmentMixin, generics.RetrieveAPIView): """Resource for getting a establishment.""" serializer_class = serializers.EstablishmentDetailSerializer