check
This commit is contained in:
commit
40d9f2f2ed
|
|
@ -138,6 +138,9 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
public_mark__isnull=False)
|
public_mark__isnull=False)
|
||||||
if establishment_qs.exists():
|
if establishment_qs.exists():
|
||||||
establishment = establishment_qs.first()
|
establishment = establishment_qs.first()
|
||||||
|
|
||||||
|
# TODO fix error:
|
||||||
|
# AttributeError: 'NoneType' object has no attribute 'coordinates'
|
||||||
return self.exclude(slug=establishment_slug) \
|
return self.exclude(slug=establishment_slug) \
|
||||||
.filter(is_publish=True,
|
.filter(is_publish=True,
|
||||||
image_url__isnull=False,
|
image_url__isnull=False,
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ from establishment.serializers import (
|
||||||
EstablishmentBaseSerializer, PlateSerializer, ContactEmailsSerializer,
|
EstablishmentBaseSerializer, PlateSerializer, ContactEmailsSerializer,
|
||||||
ContactPhonesSerializer, SocialNetworkRelatedSerializers, EstablishmentDetailSerializer
|
ContactPhonesSerializer, SocialNetworkRelatedSerializers, EstablishmentDetailSerializer
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from utils.decorators import with_base_attributes
|
||||||
|
|
||||||
from main.models import Currency
|
from main.models import Currency
|
||||||
from utils.serializers import TJSONSerializer
|
from utils.serializers import TJSONSerializer
|
||||||
|
|
||||||
|
|
@ -124,7 +127,10 @@ class ContactEmailBackSerializers(PlateSerializer):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: test decorator
|
||||||
|
@with_base_attributes
|
||||||
class EmployeeBackSerializers(serializers.ModelSerializer):
|
class EmployeeBackSerializers(serializers.ModelSerializer):
|
||||||
|
|
||||||
"""Social network serializers."""
|
"""Social network serializers."""
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Employee
|
model = models.Employee
|
||||||
|
|
@ -132,4 +138,5 @@ class EmployeeBackSerializers(serializers.ModelSerializer):
|
||||||
'id',
|
'id',
|
||||||
'user',
|
'user',
|
||||||
'name'
|
'name'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -315,20 +315,22 @@ class EstablishmentFavoritesCreateSerializer(serializers.ModelSerializer):
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
"""Override validate method"""
|
"""Override validate method"""
|
||||||
# Check establishment object
|
# Check establishment object
|
||||||
establishment_id = self.context.get('request').parser_context.get('kwargs').get('pk')
|
establishment_slug = self.context.get('request').parser_context.get('kwargs').get('slug')
|
||||||
establishment_qs = models.Establishment.objects.filter(id=establishment_id)
|
establishment_qs = models.Establishment.objects.filter(slug=establishment_slug)
|
||||||
|
|
||||||
# Check establishment obj by pk from lookup_kwarg
|
# Check establishment obj by slug from lookup_kwarg
|
||||||
if not establishment_qs.exists():
|
if not establishment_qs.exists():
|
||||||
raise serializers.ValidationError({'detail': _('Object not found.')})
|
raise serializers.ValidationError({'detail': _('Object not found.')})
|
||||||
|
else:
|
||||||
|
establishment = establishment_qs.first()
|
||||||
|
|
||||||
# Check existence in favorites
|
# Check existence in favorites
|
||||||
if self.get_user().favorites.by_content_type(app_label='establishment',
|
if self.get_user().favorites.by_content_type(app_label='establishment',
|
||||||
model='establishment')\
|
model='establishment')\
|
||||||
.by_object_id(object_id=establishment_id).exists():
|
.by_object_id(object_id=establishment.id).exists():
|
||||||
raise utils_exceptions.FavoritesError()
|
raise utils_exceptions.FavoritesError()
|
||||||
|
|
||||||
attrs['establishment'] = establishment_qs.first()
|
attrs['establishment'] = establishment
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
def create(self, validated_data, *args, **kwargs):
|
def create(self, validated_data, *args, **kwargs):
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ class BaseTestCase(APITestCase):
|
||||||
self.establishment_type = EstablishmentType.objects.create(name="Test establishment type")
|
self.establishment_type = EstablishmentType.objects.create(name="Test establishment type")
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentTests(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')
|
||||||
|
|
@ -92,7 +92,8 @@ class ChildTestCase(BaseTestCase):
|
||||||
self.establishment = Establishment.objects.create(
|
self.establishment = Establishment.objects.create(
|
||||||
name="Test establishment",
|
name="Test establishment",
|
||||||
establishment_type_id=self.establishment_type.id,
|
establishment_type_id=self.establishment_type.id,
|
||||||
is_publish=True
|
is_publish=True,
|
||||||
|
slug="test"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -262,3 +263,89 @@ class EstablishmentShedulerTests(ChildTestCase):
|
||||||
|
|
||||||
response = self.client.delete(f'/api/back/establishments/{self.establishment.id}/schedule/1/')
|
response = self.client.delete(f'/api/back/establishments/{self.establishment.id}/schedule/1/')
|
||||||
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
|
# Web tests
|
||||||
|
class EstablishmentWebTests(BaseTestCase):
|
||||||
|
|
||||||
|
def test_establishment_Read(self):
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentWebTagTests(BaseTestCase):
|
||||||
|
|
||||||
|
def test_tag_Read(self):
|
||||||
|
response = self.client.get('/api/web/establishments/tags/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentWebSlugTests(ChildTestCase):
|
||||||
|
|
||||||
|
def test_slug_Read(self):
|
||||||
|
response = self.client.get(f'/api/web/establishments/slug/{self.establishment.slug}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentWebSimilarTests(ChildTestCase):
|
||||||
|
|
||||||
|
def test_similar_Read(self):
|
||||||
|
response = self.client.get(f'/api/web/establishments/slug/{self.establishment.slug}/similar/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'text': 'test',
|
||||||
|
'user': self.user.id,
|
||||||
|
'mark': 4
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.post(f'/api/web/establishments/slug/{self.establishment.slug}/comments/create/',
|
||||||
|
data=data)
|
||||||
|
|
||||||
|
comment = response.json()
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
response = self.client.get(f'/api/web/establishments/slug/{self.establishment.slug}/comments/{comment["id"]}/',
|
||||||
|
format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
update_data = {
|
||||||
|
'text': 'Test new establishment'
|
||||||
|
}
|
||||||
|
|
||||||
|
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(
|
||||||
|
f'/api/web/establishments/slug/{self.establishment.slug}/comments/{comment["id"]}/',
|
||||||
|
format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentWebFavoriteTests(ChildTestCase):
|
||||||
|
|
||||||
|
def test_favorite_CR(self):
|
||||||
|
data = {
|
||||||
|
"user": self.user.id,
|
||||||
|
"object_id": self.establishment.id
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.post(f'/api/web/establishments/slug/{self.establishment.slug}/favorites/',
|
||||||
|
data=data)
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
response = self.client.delete(
|
||||||
|
f'/api/web/establishments/slug/{self.establishment.slug}/favorites/',
|
||||||
|
format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,13 @@ app_name = 'establishment'
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.EstablishmentListView.as_view(), name='list'),
|
path('', views.EstablishmentListView.as_view(), name='list'),
|
||||||
path('tags/', views.EstablishmentTagListView.as_view(), name='tags'),
|
path('tags/', views.EstablishmentTagListView.as_view(), name='tags'),
|
||||||
path('<slug:slug>/', views.EstablishmentRetrieveView.as_view(), name='detail'),
|
path('slug/<slug:slug>/', views.EstablishmentRetrieveView.as_view(), name='detail'),
|
||||||
path('<slug:slug>/similar/', views.EstablishmentSimilarListView.as_view(), name='similar'),
|
path('slug/<slug:slug>/similar/', views.EstablishmentSimilarListView.as_view(), name='similar'),
|
||||||
path('<slug:slug>/comments/', views.EstablishmentCommentListView.as_view(), name='list-comments'),
|
path('slug/<slug:slug>/comments/', views.EstablishmentCommentListView.as_view(), name='list-comments'),
|
||||||
path('<slug:slug>/comments/create/', views.EstablishmentCommentCreateView.as_view(),
|
path('slug/<slug:slug>/comments/create/', views.EstablishmentCommentCreateView.as_view(),
|
||||||
name='create-comment'),
|
name='create-comment'),
|
||||||
path('<slug:slug>/comments/<int:comment_id>/', views.EstablishmentCommentRUDView.as_view(),
|
path('slug/<slug:slug>/comments/<int:comment_id>/', views.EstablishmentCommentRUDView.as_view(),
|
||||||
name='rud-comment'),
|
name='rud-comment'),
|
||||||
path('<slug:slug>/favorites/', views.EstablishmentFavoritesCreateDestroyView.as_view(),
|
path('slug/<slug:slug>/favorites/', views.EstablishmentFavoritesCreateDestroyView.as_view(),
|
||||||
name='add-to-favorites')
|
name='add-to-favorites')
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,193 @@
|
||||||
from django.test import TestCase
|
import json
|
||||||
|
|
||||||
# Create your tests here.
|
from rest_framework.test import APITestCase
|
||||||
|
from account.models import User
|
||||||
|
from rest_framework import status
|
||||||
|
from http.cookies import SimpleCookie
|
||||||
|
|
||||||
|
from location.models import City, Region, Country
|
||||||
|
|
||||||
|
|
||||||
|
class BaseTestCase(APITestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.username = 'sedragurda'
|
||||||
|
self.password = 'sedragurdaredips19'
|
||||||
|
self.email = 'sedragurda@desoz.com'
|
||||||
|
self.newsletter = True
|
||||||
|
self.user = User.objects.create_user(
|
||||||
|
username=self.username, email=self.email, password=self.password)
|
||||||
|
|
||||||
|
# get tokens
|
||||||
|
|
||||||
|
tokkens = User.create_jwt_tokens(self.user)
|
||||||
|
self.client.cookies = SimpleCookie(
|
||||||
|
{'access_token': tokkens.get('access_token'),
|
||||||
|
'refresh_token': tokkens.get('refresh_token')})
|
||||||
|
|
||||||
|
|
||||||
|
class CountryTests(BaseTestCase):
|
||||||
|
|
||||||
|
def test_country_CRUD(self):
|
||||||
|
response = self.client.get('/api/back/location/countries/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'name': 'Test country',
|
||||||
|
'code': 'test'
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.post('/api/back/location/countries/', data=data, format='json')
|
||||||
|
response_data = response.json()
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
response = self.client.get(f'/api/back/location/countries/{response_data["id"]}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
update_data = {
|
||||||
|
'name': json.dumps({"en-GB": "Test new country"})
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.patch(f'/api/back/location/countries/{response_data["id"]}/', data=update_data)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
response = self.client.delete(f'/api/back/location/countries/{response_data["id"]}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
|
class RegionTests(BaseTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
self.country = Country.objects.create(
|
||||||
|
name=json.dumps({"en-GB": "Test country"}),
|
||||||
|
code="test"
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_region_CRUD(self):
|
||||||
|
response = self.client.get('/api/back/location/regions/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'name': 'Test country',
|
||||||
|
'code': 'test',
|
||||||
|
'country_id': self.country.id
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.post('/api/back/location/regions/', data=data, format='json')
|
||||||
|
response_data = response.json()
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
response = self.client.get(f'/api/back/location/regions/{response_data["id"]}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
update_data = {
|
||||||
|
'name': json.dumps({"en-GB": "Test new country"})
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.patch(f'/api/back/location/regions/{response_data["id"]}/', data=update_data)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
response = self.client.delete(f'/api/back/location/regions/{response_data["id"]}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
|
class CityTests(BaseTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.country = Country.objects.create(
|
||||||
|
name=json.dumps({"en-GB": "Test country"}),
|
||||||
|
code="test"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.region = Region.objects.create(
|
||||||
|
name="Test region",
|
||||||
|
code="812",
|
||||||
|
country=self.country
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_city_CRUD(self):
|
||||||
|
response = self.client.get('/api/back/location/cities/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'name': 'Test country',
|
||||||
|
'code': 'test',
|
||||||
|
'country_id': self.country.id,
|
||||||
|
'region_id': self.region.id
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.post('/api/back/location/cities/', data=data, format='json')
|
||||||
|
response_data = response.json()
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
response = self.client.get(f'/api/back/location/cities/{response_data["id"]}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
update_data = {
|
||||||
|
'name': json.dumps({"en-GB": "Test new country"})
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.patch(f'/api/back/location/cities/{response_data["id"]}/', data=update_data)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
response = self.client.delete(f'/api/back/location/cities/{response_data["id"]}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
|
class AddressTests(BaseTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.country = Country.objects.create(
|
||||||
|
name=json.dumps({"en-GB": "Test country"}),
|
||||||
|
code="test"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.region = Region.objects.create(
|
||||||
|
name="Test region",
|
||||||
|
code="812",
|
||||||
|
country=self.country
|
||||||
|
)
|
||||||
|
|
||||||
|
self.city = City.objects.create(
|
||||||
|
name="Test region",
|
||||||
|
code="812",
|
||||||
|
region=self.region,
|
||||||
|
country=self.country
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_address_CRUD(self):
|
||||||
|
response = self.client.get('/api/back/location/addresses/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'city_id': self.city.id,
|
||||||
|
'number': '+79999999',
|
||||||
|
"coordinates": {
|
||||||
|
"latitude": 37.0625,
|
||||||
|
"longitude": -95.677068
|
||||||
|
},
|
||||||
|
"geo_lon": -95.677068,
|
||||||
|
"geo_lat": 37.0625
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.post('/api/back/location/addresses/', data=data, format='json')
|
||||||
|
response_data = response.json()
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
response = self.client.get(f'/api/back/location/addresses/{response_data["id"]}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
update_data = {
|
||||||
|
'number': '+79999991'
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.patch(f'/api/back/location/addresses/{response_data["id"]}/', data=update_data)
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
response = self.client.delete(f'/api/back/location/addresses/{response_data["id"]}/', format='json')
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
|
||||||
|
|
|
||||||
|
|
@ -136,8 +136,8 @@ class CarouselListSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer for retrieving list of carousel items."""
|
"""Serializer for retrieving list of carousel items."""
|
||||||
model_name = serializers.CharField()
|
model_name = serializers.CharField()
|
||||||
name = serializers.CharField()
|
name = serializers.CharField()
|
||||||
toque_number = serializers.CharField()
|
toque_number = serializers.IntegerField()
|
||||||
public_mark = serializers.CharField()
|
public_mark = serializers.IntegerField()
|
||||||
image = serializers.URLField(source='image_url')
|
image = serializers.URLField(source='image_url')
|
||||||
awards = AwardBaseSerializer(many=True)
|
awards = AwardBaseSerializer(many=True)
|
||||||
vintage_year = serializers.IntegerField()
|
vintage_year = serializers.IntegerField()
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,18 @@ class NewsTestCase(BaseTestCase):
|
||||||
response = self.client.get("/api/web/news/")
|
response = self.client.get("/api/web/news/")
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
def test_news_detail(self):
|
def test_news_web_detail(self):
|
||||||
response = self.client.get(f"/api/web/news/{self.test_news.slug}/")
|
response = self.client.get(f"/api/web/news/slug/{self.test_news.slug}/")
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
def test_news_back_detail(self):
|
||||||
|
response = self.client.get(f"/api/back/news/{self.test_news.id}/")
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
def test_news_list_back(self):
|
||||||
|
response = self.client.get("/api/back/news/")
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
def test_news_type_list(self):
|
def test_news_type_list(self):
|
||||||
response = self.client.get("/api/web/news/types/")
|
response = self.client.get("/api/web/news/types/")
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,5 +7,5 @@ app_name = 'news'
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.NewsListView.as_view(), name='list'),
|
path('', views.NewsListView.as_view(), name='list'),
|
||||||
path('types/', views.NewsTypeListView.as_view(), name='type'),
|
path('types/', views.NewsTypeListView.as_view(), name='type'),
|
||||||
path('<slug:slug>/', views.NewsDetailView.as_view(), name='rud'),
|
path('slug/<slug:slug>/', views.NewsDetailView.as_view(), name='rud'),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
116
apps/notification/tests.py
Normal file
116
apps/notification/tests.py
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
from http.cookies import SimpleCookie
|
||||||
|
|
||||||
|
from django.test import TestCase
|
||||||
|
from rest_framework.test import APITestCase
|
||||||
|
from rest_framework import status
|
||||||
|
|
||||||
|
from account.models import User
|
||||||
|
from notification.models import Subscriber
|
||||||
|
|
||||||
|
|
||||||
|
class BaseTestCase(APITestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.username = 'sedragurda'
|
||||||
|
self.password = 'sedragurdaredips19'
|
||||||
|
self.email = 'sedragurda@desoz.com'
|
||||||
|
self.user = User.objects.create_user(username=self.username, email=self.email, password=self.password)
|
||||||
|
# get tokkens
|
||||||
|
tokkens = User.create_jwt_tokens(self.user)
|
||||||
|
self.client.cookies = SimpleCookie({'access_token': tokkens.get('access_token'),
|
||||||
|
'refresh_token': tokkens.get('refresh_token')})
|
||||||
|
|
||||||
|
|
||||||
|
class NotificationAnonSubscribeTestCase(APITestCase):
|
||||||
|
|
||||||
|
def test_subscribe(self):
|
||||||
|
|
||||||
|
test_data = {
|
||||||
|
"email": "test@email.com",
|
||||||
|
"state": 1
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.post("/api/web/notifications/subscribe/", data=test_data, format="json")
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(response.json()["email"], test_data["email"])
|
||||||
|
self.assertEqual(response.json()["state"], test_data["state"])
|
||||||
|
|
||||||
|
|
||||||
|
class NotificationSubscribeTestCase(BaseTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.test_data = {
|
||||||
|
"email": self.email,
|
||||||
|
"state": 1
|
||||||
|
}
|
||||||
|
|
||||||
|
def test_subscribe(self):
|
||||||
|
|
||||||
|
response = self.client.post("/api/web/notifications/subscribe/", data=self.test_data, format="json")
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertEqual(response.json()["email"], self.email)
|
||||||
|
self.assertEqual(response.json()["state"], self.test_data["state"])
|
||||||
|
|
||||||
|
def test_subscribe_info_auth_user(self):
|
||||||
|
|
||||||
|
Subscriber.objects.create(user=self.user, email=self.email, state=1)
|
||||||
|
|
||||||
|
response = self.client.get("/api/web/notifications/subscribe-info/", data=self.test_data, format="json")
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
class NotificationSubscribeInfoTestCase(APITestCase):
|
||||||
|
|
||||||
|
def test_subscribe_info(self):
|
||||||
|
|
||||||
|
self.username = 'sedragurda'
|
||||||
|
self.password = 'sedragurdaredips19'
|
||||||
|
self.email = 'sedragurda@desoz.com'
|
||||||
|
self.user = User.objects.create_user(username=self.username, email=self.email, password=self.password)
|
||||||
|
|
||||||
|
test_subscriber = Subscriber.objects.create(user=self.user, email=self.email, state=1)
|
||||||
|
|
||||||
|
response = self.client.get(f"/api/web/notifications/subscribe-info/{test_subscriber.update_code}/")
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
class NotificationUnsubscribeAuthUserTestCase(BaseTestCase):
|
||||||
|
|
||||||
|
def test_unsubscribe_auth_user(self):
|
||||||
|
|
||||||
|
Subscriber.objects.create(user=self.user, email=self.email, state=1)
|
||||||
|
|
||||||
|
self.test_data = {
|
||||||
|
"email": self.email,
|
||||||
|
"state": 1
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.client.patch("/api/web/notifications/unsubscribe/", data=self.test_data, format="json")
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
class NotificationUnsubscribeTestCase(APITestCase):
|
||||||
|
|
||||||
|
def test_unsubscribe(self):
|
||||||
|
self.username = 'sedragurda'
|
||||||
|
self.password = 'sedragurdaredips19'
|
||||||
|
self.email = 'sedragurda@desoz.com'
|
||||||
|
self.user = User.objects.create_user(username=self.username, email=self.email, password=self.password)
|
||||||
|
|
||||||
|
self.test_data = {
|
||||||
|
"email": self.email,
|
||||||
|
"state": 1
|
||||||
|
}
|
||||||
|
|
||||||
|
test_subscriber = Subscriber.objects.create(user=self.user, email=self.email, state=1)
|
||||||
|
|
||||||
|
response = self.client.patch(f"/api/web/notifications/unsubscribe/{test_subscriber.update_code}/",
|
||||||
|
data=self.test_data, format="json")
|
||||||
|
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
@ -84,6 +84,8 @@ class EstablishmentDocument(Document):
|
||||||
'name',
|
'name',
|
||||||
'toque_number',
|
'toque_number',
|
||||||
'price_level',
|
'price_level',
|
||||||
|
'preview_image_url',
|
||||||
|
'slug',
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@ class EstablishmentDocumentSerializer(DocumentSerializer):
|
||||||
'collections',
|
'collections',
|
||||||
'establishment_type',
|
'establishment_type',
|
||||||
'establishment_subtypes',
|
'establishment_subtypes',
|
||||||
|
'preview_image_url',
|
||||||
|
'slug',
|
||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,16 @@ from http.cookies import SimpleCookie
|
||||||
from account.models import User
|
from account.models import User
|
||||||
from news.models import News, NewsType
|
from news.models import News, NewsType
|
||||||
|
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from translation.models import Language
|
from translation.models import Language
|
||||||
from django.core import exceptions
|
from django.core import exceptions
|
||||||
|
|
||||||
from .serializers import validate_tjson
|
from .serializers import validate_tjson
|
||||||
|
|
||||||
|
from establishment.models import Establishment, EstablishmentType, Employee
|
||||||
|
|
||||||
|
|
||||||
class BaseTestCase(APITestCase):
|
class BaseTestCase(APITestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
@ -33,6 +37,12 @@ class BaseTestCase(APITestCase):
|
||||||
'locale': "en"
|
'locale': "en"
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
class TranslateFieldTests(BaseTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
self.news_type = NewsType.objects.create(name="Test news type")
|
self.news_type = NewsType.objects.create(name="Test news type")
|
||||||
|
|
||||||
self.news_item = News.objects.create(
|
self.news_item = News.objects.create(
|
||||||
|
|
@ -50,15 +60,9 @@ class BaseTestCase(APITestCase):
|
||||||
news_type=self.news_type
|
news_type=self.news_type
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TranslateFieldModel(BaseTestCase):
|
|
||||||
|
|
||||||
def test_model_field(self):
|
def test_model_field(self):
|
||||||
self.assertIsNotNone(getattr(self.news_item, "title_translated", None))
|
self.assertIsNotNone(getattr(self.news_item, "title_translated", None))
|
||||||
|
|
||||||
|
|
||||||
class TranslateFieldReview(BaseTestCase):
|
|
||||||
|
|
||||||
def test_read_locale(self):
|
def test_read_locale(self):
|
||||||
response = self.client.get(f"/api/web/news/{self.news_item.id}/", format='json')
|
response = self.client.get(f"/api/web/news/{self.news_item.id}/", format='json')
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|
@ -69,6 +73,59 @@ class TranslateFieldReview(BaseTestCase):
|
||||||
self.assertEqual(news_data['title_translated'], "Test news item")
|
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)
|
||||||
|
|
||||||
class ValidJSONTest(TestCase):
|
class ValidJSONTest(TestCase):
|
||||||
|
|
||||||
def test_valid_json(self):
|
def test_valid_json(self):
|
||||||
|
|
@ -99,4 +156,4 @@ class ValidJSONTest(TestCase):
|
||||||
validate_tjson(data)
|
validate_tjson(data)
|
||||||
self.assertTrue(True)
|
self.assertTrue(True)
|
||||||
except exceptions.ValidationError:
|
except exceptions.ValidationError:
|
||||||
self.assert_(False, "Test json translated FAILED")
|
self.assert_(False, "Test json translated FAILED")
|
||||||
21
apps/utils/decorators.py
Normal file
21
apps/utils/decorators.py
Normal file
|
|
@ -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
|
||||||
Loading…
Reference in New Issue
Block a user