diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index 36b3df99..5957cb16 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -84,20 +84,29 @@ class EstablishmentRUDSerializer(EstablishmentBaseSerializer): ] +class SocialChoiceSerializers(serializers.ModelSerializer): + """SocialChoice serializers.""" + + class Meta: + model = models.SocialChoice + fields = '__all__' + + class SocialNetworkSerializers(serializers.ModelSerializer): """Social network serializers.""" + class Meta: model = models.SocialNetwork fields = [ 'id', 'establishment', - 'title', + 'network', 'url', ] class PlatesSerializers(PlateSerializer): - """Social network serializers.""" + """Plates serializers.""" currency_id = serializers.PrimaryKeyRelatedField( source='currency', @@ -116,7 +125,8 @@ class PlatesSerializers(PlateSerializer): class ContactPhoneBackSerializers(PlateSerializer): - """Social network serializers.""" + """ContactPhone serializers.""" + class Meta: model = models.ContactPhone fields = [ @@ -127,7 +137,8 @@ class ContactPhoneBackSerializers(PlateSerializer): class ContactEmailBackSerializers(PlateSerializer): - """Social network serializers.""" + """ContactEmail serializers.""" + class Meta: model = models.ContactEmail fields = [ @@ -140,8 +151,8 @@ class ContactEmailBackSerializers(PlateSerializer): # TODO: test decorator @with_base_attributes class EmployeeBackSerializers(serializers.ModelSerializer): + """Employee serializers.""" - """Social network serializers.""" class Meta: model = models.Employee fields = [ diff --git a/apps/establishment/serializers/common.py b/apps/establishment/serializers/common.py index 8784638a..6e140125 100644 --- a/apps/establishment/serializers/common.py +++ b/apps/establishment/serializers/common.py @@ -39,7 +39,7 @@ class SocialNetworkRelatedSerializers(serializers.ModelSerializer): model = models.SocialNetwork fields = [ 'id', - 'title', + 'network', 'url', ] diff --git a/apps/establishment/tests.py b/apps/establishment/tests.py index cc9ed152..3534608c 100644 --- a/apps/establishment/tests.py +++ b/apps/establishment/tests.py @@ -4,7 +4,7 @@ from account.models import User from rest_framework import status from http.cookies import SimpleCookie from main.models import Currency -from establishment.models import Establishment, EstablishmentType, Menu +from establishment.models import Establishment, EstablishmentType, Menu, SocialChoice, SocialNetwork # Create your tests here. from translation.models import Language from account.models import Role, UserRole @@ -19,7 +19,11 @@ class BaseTestCase(APITestCase): self.email = 'sedragurda@desoz.com' self.newsletter = True self.user = User.objects.create_user( - username=self.username, email=self.email, password=self.password) + username=self.username, + email=self.email, + password=self.password, + is_staff=True, + ) # get tokens tokens = User.create_jwt_tokens(self.user) self.client.cookies = SimpleCookie( @@ -30,13 +34,14 @@ class BaseTestCase(APITestCase): name="Test establishment type") # Create lang object - self.lang = Language.objects.get( + self.lang = Language.objects.create( title='Russia', locale='ru-RU' ) - self.country_ru = Country.objects.get( - name={"en-GB": "Russian"} + self.country_ru = Country.objects.create( + name={'en-GB': 'Russian'}, + code='RU', ) self.region = Region.objects.create(name='Moscow area', code='01', @@ -72,10 +77,17 @@ class BaseTestCase(APITestCase): establishment=self.establishment) self.user_role.save() + self.social_choice = SocialChoice.objects.create(title='facebook') + self.social_network = SocialNetwork.objects.create( + network=self.social_choice, + url='https://testsocial.de', + establishment=self.establishment, + ) + class EstablishmentBTests(BaseTestCase): def test_establishment_CRUD(self): - params = {'page': 1, 'page_size': 1,} + params = {'page': 1, 'page_size': 1, } response = self.client.get('/api/back/establishments/', params, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -108,7 +120,7 @@ class EstablishmentBTests(BaseTestCase): class EmployeeTests(BaseTestCase): def test_employee_CRUD(self): - response = self.client.get('/api/back/establishments/employees/', format='json') + response = self.client.get('/api/back/establishments/employees/', format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) data = { @@ -205,13 +217,40 @@ class PhoneTests(ChildTestCase): self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) +class SocialChoicesTests(ChildTestCase): + def test_social_choices_CRUD(self): + response = self.client.get('/api/back/establishments/social_choice/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = { + 'title': 'twitter', + } + + response = self.client.post('/api/back/establishments/social_choice/', data=data) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + response = self.client.get(f'/api/back/establishments/social_choice/{self.social_choice.id}/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + update_data = { + 'title': 'vk' + } + + response = self.client.patch(f'/api/back/establishments/social_choice/{self.social_choice.id}/', + data=update_data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + response = self.client.delete(f'/api/back/establishments/social_choice/{self.social_choice.id}/') + 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", + 'network': self.social_choice.id, 'url': 'https://testsocial.com', 'establishment': self.establishment.id } @@ -219,17 +258,17 @@ class SocialTests(ChildTestCase): 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') + response = self.client.get(f'/api/back/establishments/socials/{self.social_network.id}/', format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) update_data = { - 'title': 'Test new social' + 'url': 'https://newtestsocial.com' } - response = self.client.patch('/api/back/establishments/socials/1/', data=update_data) + response = self.client.patch(f'/api/back/establishments/socials/{self.social_network.id}/', data=update_data) self.assertEqual(response.status_code, status.HTTP_200_OK) - response = self.client.delete('/api/back/establishments/socials/1/') + response = self.client.delete(f'/api/back/establishments/socials/{self.social_network.id}/') self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) @@ -322,7 +361,7 @@ class EstablishmentShedulerTests(ChildTestCase): class EstablishmentWebTests(BaseTestCase): def test_establishment_Read(self): - params = {'page': 1, 'page_size': 1,} + params = {'page': 1, 'page_size': 1, } response = self.client.get('/api/web/establishments/', params, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -351,7 +390,6 @@ class EstablishmentWebSimilarTests(ChildTestCase): class EstablishmentWebCommentsTests(ChildTestCase): def test_comments_CRUD(self): - response = self.client.get(f'/api/web/establishments/slug/{self.establishment.slug}/comments/', format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -375,8 +413,9 @@ class EstablishmentWebCommentsTests(ChildTestCase): 'text': 'Test new establishment' } - response = self.client.patch(f'/api/web/establishments/slug/{self.establishment.slug}/comments/{comment["id"]}/', - data=update_data) + response = self.client.patch( + f'/api/web/establishments/slug/{self.establishment.slug}/comments/{comment["id"]}/', + data=update_data) self.assertEqual(response.status_code, status.HTTP_200_OK) response = self.client.delete( diff --git a/apps/establishment/urls/back.py b/apps/establishment/urls/back.py index 6a12e792..14575c46 100644 --- a/apps/establishment/urls/back.py +++ b/apps/establishment/urls/back.py @@ -6,7 +6,6 @@ from establishment import views app_name = 'establishment' - urlpatterns = [ path('', views.EstablishmentListCreateView.as_view(), name='list'), path('/', views.EstablishmentRUDView.as_view(), name='detail'), @@ -18,6 +17,8 @@ urlpatterns = [ path('menus//', views.MenuRUDView.as_view(), name='menu-rud'), path('plates/', views.PlateListCreateView.as_view(), name='plates'), path('plates//', views.PlateRUDView.as_view(), name='plate-rud'), + path('social_choice/', views.SocialChoiceListCreateView.as_view(), name='socials_choice'), + path('social_choice//', views.SocialChoiceRUDView.as_view(), name='socials_choice-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 f6d4d63a..1a547032 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -1,6 +1,6 @@ """Establishment app views.""" from django.shortcuts import get_object_or_404 -from rest_framework import generics +from rest_framework import generics, permissions from utils.permissions import IsCountryAdmin, IsEstablishmentManager from establishment import filters, models, serializers @@ -27,7 +27,7 @@ class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAP class EstablishmentRUDView(generics.RetrieveUpdateDestroyAPIView): queryset = models.Establishment.objects.all() serializer_class = serializers.EstablishmentRUDSerializer - permission_classes = [IsCountryAdmin|IsEstablishmentManager] + permission_classes = [IsCountryAdmin | IsEstablishmentManager] class EstablishmentScheduleRUDView(generics.RetrieveUpdateDestroyAPIView): @@ -72,12 +72,27 @@ class MenuRUDView(generics.RetrieveUpdateDestroyAPIView): permission_classes = [IsEstablishmentManager] +class SocialChoiceListCreateView(generics.ListCreateAPIView): + """SocialChoice list create view.""" + serializer_class = serializers.SocialChoiceSerializers + queryset = models.SocialChoice.objects.all() + pagination_class = None + permission_classes = [permissions.IsAdminUser] + + +class SocialChoiceRUDView(generics.RetrieveUpdateDestroyAPIView): + """SocialChoice RUD view.""" + serializer_class = serializers.SocialChoiceSerializers + queryset = models.SocialChoice.objects.all() + permission_classes = [permissions.IsAdminUser] + + class SocialListCreateView(generics.ListCreateAPIView): """Social list create view.""" serializer_class = serializers.SocialNetworkSerializers queryset = models.SocialNetwork.objects.all() pagination_class = None - permission_classes = [IsEstablishmentManager] + permission_classes = [permissions.IsAdminUser] class SocialRUDView(generics.RetrieveUpdateDestroyAPIView): @@ -96,14 +111,14 @@ class PlateListCreateView(generics.ListCreateAPIView): class PlateRUDView(generics.RetrieveUpdateDestroyAPIView): - """Social RUD view.""" + """Plate RUD view.""" serializer_class = serializers.PlatesSerializers queryset = models.Plate.objects.all() permission_classes = [IsEstablishmentManager] class PhonesListCreateView(generics.ListCreateAPIView): - """Plate list create view.""" + """Phones list create view.""" serializer_class = serializers.ContactPhoneBackSerializers queryset = models.ContactPhone.objects.all() pagination_class = None @@ -111,14 +126,14 @@ class PhonesListCreateView(generics.ListCreateAPIView): class PhonesRUDView(generics.RetrieveUpdateDestroyAPIView): - """Social RUD view.""" + """Phones RUD view.""" serializer_class = serializers.ContactPhoneBackSerializers queryset = models.ContactPhone.objects.all() permission_classes = [IsEstablishmentManager] class EmailListCreateView(generics.ListCreateAPIView): - """Plate list create view.""" + """Email list create view.""" serializer_class = serializers.ContactEmailBackSerializers queryset = models.ContactEmail.objects.all() pagination_class = None @@ -126,7 +141,7 @@ class EmailListCreateView(generics.ListCreateAPIView): class EmailRUDView(generics.RetrieveUpdateDestroyAPIView): - """Social RUD view.""" + """Email RUD view.""" serializer_class = serializers.ContactEmailBackSerializers queryset = models.ContactEmail.objects.all() permission_classes = [IsEstablishmentManager] @@ -140,7 +155,7 @@ class EmployeeListCreateView(generics.ListCreateAPIView): class EmployeeRUDView(generics.RetrieveUpdateDestroyAPIView): - """Social RUD view.""" + """Employee RUD view.""" serializer_class = serializers.EmployeeBackSerializers queryset = models.Employee.objects.all()