From b20baa5bcdf2523af36f41cb354d8ba7977d670a Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 13 Nov 2019 09:28:27 +0300 Subject: [PATCH 1/2] inquiries and grid crud --- apps/review/serializers/common.py | 39 +++++++++++++++++++++++- apps/review/urls/back.py | 6 ++++ apps/review/views/back.py | 50 +++++++++++++++++++++++++++++-- 3 files changed, 91 insertions(+), 4 deletions(-) diff --git a/apps/review/serializers/common.py b/apps/review/serializers/common.py index f4acc4f4..74ed6924 100644 --- a/apps/review/serializers/common.py +++ b/apps/review/serializers/common.py @@ -1,5 +1,6 @@ from rest_framework import serializers -from review.models import Review + +from review.models import Review, Inquiries, GridItems class ReviewBaseSerializer(serializers.ModelSerializer): @@ -27,3 +28,39 @@ class ReviewShortSerializer(ReviewBaseSerializer): fields = ( 'text_translated', ) + + +class InquiriesBaseSerializer(serializers.ModelSerializer): + class Meta: + model = Inquiries + fields = ( + 'id', + 'review', + 'comment', + 'final_comment', + 'mark', + 'attachment_file', + 'author', + 'bill_file', + 'price', + 'moment', + 'gallery', + 'decibels', + 'nomination', + 'nominee', + 'published', + ) + + +class GridItemsBaseSerializer(serializers.ModelSerializer): + class Meta: + model = GridItems + fields = ( + 'id', + 'inquiry', + 'sub_name', + 'name', + 'value', + 'desc', + 'dish_title', + ) diff --git a/apps/review/urls/back.py b/apps/review/urls/back.py index 84ca49f3..a59aafa8 100644 --- a/apps/review/urls/back.py +++ b/apps/review/urls/back.py @@ -8,4 +8,10 @@ app_name = 'review' urlpatterns = [ path('', views.ReviewLstView.as_view(), name='review-list-create'), path('/', views.ReviewRUDView.as_view(), name='review-crud'), + path('/inquiries/', views.InquiriesLstView.as_view(), name='inquiries-list'), + path('inquiries/', views.InquiriesLstView.as_view(), name='inquiries-list-create'), + path('inquiries//', views.InquiriesRUDView.as_view(), name='inquiries-crud'), + path('inquiries//grid/', views.GridItemsLstView.as_view(), name='grid-list-create'), + path('inquiries/grid/', views.GridItemsLstView.as_view(), name='grid-list-create'), + path('inquiries/grid//', views.GridItemsRUDView.as_view(), name='grid-crud'), ] diff --git a/apps/review/views/back.py b/apps/review/views/back.py index 31e8725a..c6ec6b67 100644 --- a/apps/review/views/back.py +++ b/apps/review/views/back.py @@ -1,6 +1,7 @@ from rest_framework import generics, permissions -from review import serializers + from review import models +from review import serializers from utils.permissions import IsReviewerManager, IsRestaurantReviewer @@ -8,12 +9,55 @@ class ReviewLstView(generics.ListCreateAPIView): """Comment list create view.""" serializer_class = serializers.ReviewBaseSerializer queryset = models.Review.objects.all() - permission_classes = [permissions.IsAuthenticatedOrReadOnly,] + permission_classes = [permissions.IsAuthenticatedOrReadOnly, ] class ReviewRUDView(generics.RetrieveUpdateDestroyAPIView): """Comment RUD view.""" serializer_class = serializers.ReviewBaseSerializer queryset = models.Review.objects.all() - permission_classes = [IsReviewerManager|IsRestaurantReviewer] + permission_classes = [IsReviewerManager | IsRestaurantReviewer] + lookup_field = 'id' + + +class InquiriesLstView(generics.ListCreateAPIView): + """Inquiries list create view.""" + + serializer_class = serializers.InquiriesBaseSerializer + queryset = models.Inquiries.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + def get_queryset(self): + review_id = self.kwargs.get('review_id') + if review_id: + return super().get_queryset().filter(review_id=review_id) + return super().get_queryset() + + +class InquiriesRUDView(generics.RetrieveUpdateDestroyAPIView): + """Inquiries RUD view.""" + serializer_class = serializers.InquiriesBaseSerializer + queryset = models.Inquiries.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + lookup_field = 'id' + + +class GridItemsLstView(generics.ListCreateAPIView): + """GridItems list create view.""" + serializer_class = serializers.GridItemsBaseSerializer + queryset = models.GridItems.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + def get_queryset(self): + inquiry_id = self.kwargs.get('inquiry_id') + if inquiry_id: + return super().get_queryset().filter(inquiry_id=inquiry_id) + return super().get_queryset() + + +class GridItemsRUDView(generics.RetrieveUpdateDestroyAPIView): + """GridItems RUD view.""" + serializer_class = serializers.GridItemsBaseSerializer + queryset = models.GridItems.objects.all() + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) lookup_field = 'id' From 9626a946b13b2a454a6135550c2a6a3dd378326d Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 13 Nov 2019 12:29:25 +0300 Subject: [PATCH 2/2] inquiries test --- apps/review/serializers/common.py | 2 + apps/review/tests.py | 136 +++++++++++++++++++++++++++++- 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/apps/review/serializers/common.py b/apps/review/serializers/common.py index 74ed6924..e79424f5 100644 --- a/apps/review/serializers/common.py +++ b/apps/review/serializers/common.py @@ -31,6 +31,7 @@ class ReviewShortSerializer(ReviewBaseSerializer): class InquiriesBaseSerializer(serializers.ModelSerializer): + """Serializer for model Inquiries.""" class Meta: model = Inquiries fields = ( @@ -53,6 +54,7 @@ class InquiriesBaseSerializer(serializers.ModelSerializer): class GridItemsBaseSerializer(serializers.ModelSerializer): + """Serializer for model GridItems.""" class Meta: model = GridItems fields = ( diff --git a/apps/review/tests.py b/apps/review/tests.py index 7ce503c2..2dc6d86e 100644 --- a/apps/review/tests.py +++ b/apps/review/tests.py @@ -1,3 +1,135 @@ -from django.test import TestCase +from http.cookies import SimpleCookie -# Create your tests here. +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase + +from account.models import User +from location.models import Country +from review.models import Review, Inquiries, GridItems +from translation.models import Language + + +class BaseTestCase(APITestCase): + + def setUp(self): + self.username = 'test_user' + self.password = 'test_user_password' + self.email = 'test_user@mail.com' + self.user = User.objects.create_user( + username=self.username, + email=self.email, + password=self.password, + ) + + tokens = User.create_jwt_tokens(self.user) + self.client.cookies = SimpleCookie({ + 'access_token': tokens.get('access_token'), + 'refresh_token': tokens.get('refresh_token'), + }) + + self.lang = Language.objects.create( + title='Russia', + locale='ru-RU' + ) + + self.country_ru = Country.objects.create( + name={'en-GB': 'Russian'}, + code='RU', + ) + + self.test_review = Review.objects.create( + reviewer=self.user, + status=Review.READY, + language=self.lang, + vintage=2020, + country=self.country_ru, + text={'en-GB': 'Text review'}, + created_by=self.user, + modified_by=self.user, + object_id=1, + content_type_id=1, + ) + + self.test_inquiry = Inquiries.objects.create( + review=self.test_review, + author=self.user, + comment='Test comment', + ) + + self.test_grid = GridItems.objects.create( + inquiry=self.test_inquiry, + name='Test name', + ) + + +class InquiriesTestCase(BaseTestCase): + def setUp(self): + super().setUp() + + def test_inquiry_list(self): + response = self.client.get('/api/back/review/inquiries/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_inquiry_list_by_review_id(self): + response = self.client.get(f'/api/back/review/{self.test_review.id}/inquiries/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_inquiry_post(self): + test_inquiry = { + 'review': self.test_review.pk, + 'author': self.user.pk, + 'comment': 'New test comment', + } + response = self.client.post('/api/back/review/inquiries/', data=test_inquiry) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + def test_inquiry_detail(self): + response = self.client.get(f'/api/back/review/inquiries/{self.test_inquiry.id}/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_inquiry_detail_put(self): + data = { + 'id': self.test_inquiry.id, + 'review': self.test_review.pk, + 'author': self.user.pk, + 'comment': 'New test comment 2', + } + + response = self.client.put(f'/api/back/review/inquiries/{self.test_inquiry.id}/', data=data) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + +class GridItemsTestCase(BaseTestCase): + def setUp(self): + super().setUp() + + def test_grid_list(self): + response = self.client.get('/api/back/review/inquiries/grid/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_grid_list_by_inquiry_id(self): + response = self.client.get(f'/api/back/review/inquiries/{self.test_inquiry.id}/grid/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_grid_post(self): + test_grid = { + 'inquiry': self.test_inquiry.pk, + 'name': 'New test name', + } + response = self.client.post('/api/back/review/inquiries/grid/', data=test_grid) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + def test_grid_detail(self): + response = self.client.get(f'/api/back/review/inquiries/grid/{self.test_grid.id}/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + def test_grid_detail_put(self): + data = { + 'id': self.test_grid.id, + 'inquiry': self.test_inquiry.pk, + 'name': 'New test name 2', + } + + response = self.client.put(f'/api/back/review/inquiries/grid/{self.test_inquiry.id}/', data=data) + self.assertEqual(response.status_code, status.HTTP_200_OK)