social choice api and test

This commit is contained in:
alex 2019-11-14 09:53:36 +03:00
parent b94a6dfd62
commit e49d62de5d
5 changed files with 98 additions and 32 deletions

View File

@ -84,20 +84,29 @@ class EstablishmentRUDSerializer(EstablishmentBaseSerializer):
] ]
class SocialChoiceSerializers(serializers.ModelSerializer):
"""SocialChoice serializers."""
class Meta:
model = models.SocialChoice
fields = '__all__'
class SocialNetworkSerializers(serializers.ModelSerializer): class SocialNetworkSerializers(serializers.ModelSerializer):
"""Social network serializers.""" """Social network serializers."""
class Meta: class Meta:
model = models.SocialNetwork model = models.SocialNetwork
fields = [ fields = [
'id', 'id',
'establishment', 'establishment',
'title', 'network',
'url', 'url',
] ]
class PlatesSerializers(PlateSerializer): class PlatesSerializers(PlateSerializer):
"""Social network serializers.""" """Plates serializers."""
currency_id = serializers.PrimaryKeyRelatedField( currency_id = serializers.PrimaryKeyRelatedField(
source='currency', source='currency',
@ -116,7 +125,8 @@ class PlatesSerializers(PlateSerializer):
class ContactPhoneBackSerializers(PlateSerializer): class ContactPhoneBackSerializers(PlateSerializer):
"""Social network serializers.""" """ContactPhone serializers."""
class Meta: class Meta:
model = models.ContactPhone model = models.ContactPhone
fields = [ fields = [
@ -127,7 +137,8 @@ class ContactPhoneBackSerializers(PlateSerializer):
class ContactEmailBackSerializers(PlateSerializer): class ContactEmailBackSerializers(PlateSerializer):
"""Social network serializers.""" """ContactEmail serializers."""
class Meta: class Meta:
model = models.ContactEmail model = models.ContactEmail
fields = [ fields = [
@ -140,8 +151,8 @@ class ContactEmailBackSerializers(PlateSerializer):
# TODO: test decorator # TODO: test decorator
@with_base_attributes @with_base_attributes
class EmployeeBackSerializers(serializers.ModelSerializer): class EmployeeBackSerializers(serializers.ModelSerializer):
"""Employee serializers."""
"""Social network serializers."""
class Meta: class Meta:
model = models.Employee model = models.Employee
fields = [ fields = [

View File

@ -39,7 +39,7 @@ class SocialNetworkRelatedSerializers(serializers.ModelSerializer):
model = models.SocialNetwork model = models.SocialNetwork
fields = [ fields = [
'id', 'id',
'title', 'network',
'url', 'url',
] ]

View File

@ -4,7 +4,7 @@ from account.models import User
from rest_framework import status from rest_framework import status
from http.cookies import SimpleCookie from http.cookies import SimpleCookie
from main.models import Currency 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. # Create your tests here.
from translation.models import Language from translation.models import Language
from account.models import Role, UserRole from account.models import Role, UserRole
@ -19,7 +19,11 @@ class BaseTestCase(APITestCase):
self.email = 'sedragurda@desoz.com' self.email = 'sedragurda@desoz.com'
self.newsletter = True self.newsletter = True
self.user = User.objects.create_user( 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 # get tokens
tokens = User.create_jwt_tokens(self.user) tokens = User.create_jwt_tokens(self.user)
self.client.cookies = SimpleCookie( self.client.cookies = SimpleCookie(
@ -30,13 +34,14 @@ class BaseTestCase(APITestCase):
name="Test establishment type") name="Test establishment type")
# Create lang object # Create lang object
self.lang = Language.objects.get( self.lang = Language.objects.create(
title='Russia', title='Russia',
locale='ru-RU' locale='ru-RU'
) )
self.country_ru = Country.objects.get( self.country_ru = Country.objects.create(
name={"en-GB": "Russian"} name={'en-GB': 'Russian'},
code='RU',
) )
self.region = Region.objects.create(name='Moscow area', code='01', self.region = Region.objects.create(name='Moscow area', code='01',
@ -72,10 +77,17 @@ class BaseTestCase(APITestCase):
establishment=self.establishment) establishment=self.establishment)
self.user_role.save() 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): class EstablishmentBTests(BaseTestCase):
def test_establishment_CRUD(self): 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') response = self.client.get('/api/back/establishments/', params, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
@ -108,7 +120,7 @@ class EstablishmentBTests(BaseTestCase):
class EmployeeTests(BaseTestCase): class EmployeeTests(BaseTestCase):
def test_employee_CRUD(self): 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) self.assertEqual(response.status_code, status.HTTP_200_OK)
data = { data = {
@ -205,13 +217,40 @@ class PhoneTests(ChildTestCase):
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) 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): class SocialTests(ChildTestCase):
def test_social_CRUD(self): def test_social_CRUD(self):
response = self.client.get('/api/back/establishments/socials/', format='json') response = self.client.get('/api/back/establishments/socials/', format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
data = { data = {
'title': "Test social", 'network': self.social_choice.id,
'url': 'https://testsocial.com', 'url': 'https://testsocial.com',
'establishment': self.establishment.id 'establishment': self.establishment.id
} }
@ -219,17 +258,17 @@ class SocialTests(ChildTestCase):
response = self.client.post('/api/back/establishments/socials/', data=data) response = self.client.post('/api/back/establishments/socials/', data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED) 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) self.assertEqual(response.status_code, status.HTTP_200_OK)
update_data = { 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) 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) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
@ -322,7 +361,7 @@ class EstablishmentShedulerTests(ChildTestCase):
class EstablishmentWebTests(BaseTestCase): class EstablishmentWebTests(BaseTestCase):
def test_establishment_Read(self): 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') response = self.client.get('/api/web/establishments/', params, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
@ -351,7 +390,6 @@ class EstablishmentWebSimilarTests(ChildTestCase):
class EstablishmentWebCommentsTests(ChildTestCase): class EstablishmentWebCommentsTests(ChildTestCase):
def test_comments_CRUD(self): def test_comments_CRUD(self):
response = self.client.get(f'/api/web/establishments/slug/{self.establishment.slug}/comments/', format='json') response = self.client.get(f'/api/web/establishments/slug/{self.establishment.slug}/comments/', format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
@ -375,8 +413,9 @@ class EstablishmentWebCommentsTests(ChildTestCase):
'text': 'Test new establishment' 'text': 'Test new establishment'
} }
response = self.client.patch(f'/api/web/establishments/slug/{self.establishment.slug}/comments/{comment["id"]}/', response = self.client.patch(
data=update_data) f'/api/web/establishments/slug/{self.establishment.slug}/comments/{comment["id"]}/',
data=update_data)
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
response = self.client.delete( response = self.client.delete(

View File

@ -6,7 +6,6 @@ from establishment import views
app_name = 'establishment' app_name = 'establishment'
urlpatterns = [ urlpatterns = [
path('', views.EstablishmentListCreateView.as_view(), name='list'), path('', views.EstablishmentListCreateView.as_view(), name='list'),
path('<int:pk>/', views.EstablishmentRUDView.as_view(), name='detail'), path('<int:pk>/', views.EstablishmentRUDView.as_view(), name='detail'),
@ -18,6 +17,8 @@ urlpatterns = [
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'), path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
path('plates/', views.PlateListCreateView.as_view(), name='plates'), path('plates/', views.PlateListCreateView.as_view(), name='plates'),
path('plates/<int:pk>/', views.PlateRUDView.as_view(), name='plate-rud'), path('plates/<int:pk>/', views.PlateRUDView.as_view(), name='plate-rud'),
path('social_choice/', views.SocialChoiceListCreateView.as_view(), name='socials_choice'),
path('social_choice/<int:pk>/', views.SocialChoiceRUDView.as_view(), name='socials_choice-rud'),
path('socials/', views.SocialListCreateView.as_view(), name='socials'), path('socials/', views.SocialListCreateView.as_view(), name='socials'),
path('socials/<int:pk>/', views.SocialRUDView.as_view(), name='social-rud'), path('socials/<int:pk>/', views.SocialRUDView.as_view(), name='social-rud'),
path('phones/', views.PhonesListCreateView.as_view(), name='phones'), path('phones/', views.PhonesListCreateView.as_view(), name='phones'),

View File

@ -1,6 +1,6 @@
"""Establishment app views.""" """Establishment app views."""
from django.shortcuts import get_object_or_404 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 utils.permissions import IsCountryAdmin, IsEstablishmentManager
from establishment import filters, models, serializers from establishment import filters, models, serializers
@ -27,7 +27,7 @@ class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAP
class EstablishmentRUDView(generics.RetrieveUpdateDestroyAPIView): class EstablishmentRUDView(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Establishment.objects.all() queryset = models.Establishment.objects.all()
serializer_class = serializers.EstablishmentRUDSerializer serializer_class = serializers.EstablishmentRUDSerializer
permission_classes = [IsCountryAdmin|IsEstablishmentManager] permission_classes = [IsCountryAdmin | IsEstablishmentManager]
class EstablishmentScheduleRUDView(generics.RetrieveUpdateDestroyAPIView): class EstablishmentScheduleRUDView(generics.RetrieveUpdateDestroyAPIView):
@ -72,12 +72,27 @@ class MenuRUDView(generics.RetrieveUpdateDestroyAPIView):
permission_classes = [IsEstablishmentManager] 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): class SocialListCreateView(generics.ListCreateAPIView):
"""Social list create view.""" """Social list create view."""
serializer_class = serializers.SocialNetworkSerializers serializer_class = serializers.SocialNetworkSerializers
queryset = models.SocialNetwork.objects.all() queryset = models.SocialNetwork.objects.all()
pagination_class = None pagination_class = None
permission_classes = [IsEstablishmentManager] permission_classes = [permissions.IsAdminUser]
class SocialRUDView(generics.RetrieveUpdateDestroyAPIView): class SocialRUDView(generics.RetrieveUpdateDestroyAPIView):
@ -96,14 +111,14 @@ class PlateListCreateView(generics.ListCreateAPIView):
class PlateRUDView(generics.RetrieveUpdateDestroyAPIView): class PlateRUDView(generics.RetrieveUpdateDestroyAPIView):
"""Social RUD view.""" """Plate RUD view."""
serializer_class = serializers.PlatesSerializers serializer_class = serializers.PlatesSerializers
queryset = models.Plate.objects.all() queryset = models.Plate.objects.all()
permission_classes = [IsEstablishmentManager] permission_classes = [IsEstablishmentManager]
class PhonesListCreateView(generics.ListCreateAPIView): class PhonesListCreateView(generics.ListCreateAPIView):
"""Plate list create view.""" """Phones list create view."""
serializer_class = serializers.ContactPhoneBackSerializers serializer_class = serializers.ContactPhoneBackSerializers
queryset = models.ContactPhone.objects.all() queryset = models.ContactPhone.objects.all()
pagination_class = None pagination_class = None
@ -111,14 +126,14 @@ class PhonesListCreateView(generics.ListCreateAPIView):
class PhonesRUDView(generics.RetrieveUpdateDestroyAPIView): class PhonesRUDView(generics.RetrieveUpdateDestroyAPIView):
"""Social RUD view.""" """Phones RUD view."""
serializer_class = serializers.ContactPhoneBackSerializers serializer_class = serializers.ContactPhoneBackSerializers
queryset = models.ContactPhone.objects.all() queryset = models.ContactPhone.objects.all()
permission_classes = [IsEstablishmentManager] permission_classes = [IsEstablishmentManager]
class EmailListCreateView(generics.ListCreateAPIView): class EmailListCreateView(generics.ListCreateAPIView):
"""Plate list create view.""" """Email list create view."""
serializer_class = serializers.ContactEmailBackSerializers serializer_class = serializers.ContactEmailBackSerializers
queryset = models.ContactEmail.objects.all() queryset = models.ContactEmail.objects.all()
pagination_class = None pagination_class = None
@ -126,7 +141,7 @@ class EmailListCreateView(generics.ListCreateAPIView):
class EmailRUDView(generics.RetrieveUpdateDestroyAPIView): class EmailRUDView(generics.RetrieveUpdateDestroyAPIView):
"""Social RUD view.""" """Email RUD view."""
serializer_class = serializers.ContactEmailBackSerializers serializer_class = serializers.ContactEmailBackSerializers
queryset = models.ContactEmail.objects.all() queryset = models.ContactEmail.objects.all()
permission_classes = [IsEstablishmentManager] permission_classes = [IsEstablishmentManager]
@ -140,7 +155,7 @@ class EmployeeListCreateView(generics.ListCreateAPIView):
class EmployeeRUDView(generics.RetrieveUpdateDestroyAPIView): class EmployeeRUDView(generics.RetrieveUpdateDestroyAPIView):
"""Social RUD view.""" """Employee RUD view."""
serializer_class = serializers.EmployeeBackSerializers serializer_class = serializers.EmployeeBackSerializers
queryset = models.Employee.objects.all() queryset = models.Employee.objects.all()