Merge remote-tracking branch 'origin/origin/migration_fix' into migration_fix

This commit is contained in:
alex 2019-10-29 16:43:27 +03:00
commit 59371fae9a
17 changed files with 115 additions and 65 deletions

View File

@ -1,10 +1,13 @@
from rest_framework.test import APITestCase
from rest_framework import status
from authorization.tests.tests_authorization import get_tokens_for_user
from django.urls import reverse
from http.cookies import SimpleCookie from http.cookies import SimpleCookie
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from account.models import Role, User
from authorization.tests.tests_authorization import get_tokens_for_user
from location.models import Country from location.models import Country
from account.models import Role, User, UserRole
class RoleTests(APITestCase): class RoleTests(APITestCase):
def setUp(self): def setUp(self):
@ -65,9 +68,11 @@ class UserRoleTests(APITestCase):
) )
self.role.save() self.role.save()
self.user_test = User.objects.create_user(username='test', self.user_test = User.objects.create_user(
email='testemail@mail.com', username='test',
password='passwordtest') email='testemail@mail.com',
password='passwordtest'
)
def test_user_role_post(self): def test_user_role_post(self):
url = reverse('back:account:user-role-list-create') url = reverse('back:account:user-role-list-create')

View File

@ -1,9 +1,11 @@
from rest_framework.test import APITestCase
from rest_framework import status
from authorization.tests.tests_authorization import get_tokens_for_user
from http.cookies import SimpleCookie from http.cookies import SimpleCookie
from account.models import User
from django.urls import reverse from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from account.models import User
from authorization.tests.tests_authorization import get_tokens_for_user
class AccountUserTests(APITestCase): class AccountUserTests(APITestCase):
@ -62,7 +64,7 @@ class AccountChangePasswordTests(APITestCase):
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
class AccountChangePasswordTests(APITestCase): class AccountConfirmEmail(APITestCase):
def setUp(self): def setUp(self):
self.data = get_tokens_for_user() self.data = get_tokens_for_user()

View File

@ -8,8 +8,12 @@ def transfer_user():
# queryset = Profiles.objects.all() # queryset = Profiles.objects.all()
# queryset = queryset.annotate(nickname=F("account__nickname")) # queryset = queryset.annotate(nickname=F("account__nickname"))
# queryset = queryset.annotate(email=F("account__email")) # queryset = queryset.annotate(email=F("account__email"))
stop_list = ['cyril@tomatic.net',
queryset = Accounts.objects.filter(confirmed_at__isnull=False) 'cyril2@tomatic.net',
'd.sadykova@id-east.ru',
'd.sadykova@octopod.ru',
'n.yurchenko@id-east.ru']
queryset = Accounts.objects.filter(confirmed_at__isnull=False).exclude(email__in=stop_list)
serialized_data = UserSerializer(data=list(queryset.values()), many=True) serialized_data = UserSerializer(data=list(queryset.values()), many=True)

View File

@ -1,7 +1,7 @@
from rest_framework.test import APITestCase
from account.models import User
from django.urls import reverse from django.urls import reverse
# Create your tests here. from rest_framework.test import APITestCase
from account.models import User
def get_tokens_for_user( def get_tokens_for_user(
@ -28,7 +28,7 @@ class AuthorizationTests(APITestCase):
self.password = data["password"] self.password = data["password"]
def LoginTests(self): def LoginTests(self):
data ={ data = {
'username_or_email': self.username, 'username_or_email': self.username,
'password': self.password, 'password': self.password,
'remember': True 'remember': True

View File

@ -1,11 +1,13 @@
from utils.tests.tests_permissions import BasePermissionTests
from rest_framework import status
from authorization.tests.tests_authorization import get_tokens_for_user
from django.urls import reverse
from django.contrib.contenttypes.models import ContentType
from http.cookies import SimpleCookie from http.cookies import SimpleCookie
from django.contrib.contenttypes.models import ContentType
from django.urls import reverse
from rest_framework import status
from account.models import Role, User, UserRole from account.models import Role, User, UserRole
from authorization.tests.tests_authorization import get_tokens_for_user
from comment.models import Comment from comment.models import Comment
from utils.tests.tests_permissions import BasePermissionTests
class CommentModeratorPermissionTests(BasePermissionTests): class CommentModeratorPermissionTests(BasePermissionTests):
@ -40,7 +42,6 @@ class CommentModeratorPermissionTests(BasePermissionTests):
self.comment.save() self.comment.save()
self.url = reverse('back:comment:comment-crud', kwargs={"id": self.comment.id}) self.url = reverse('back:comment:comment-crud', kwargs={"id": self.comment.id})
def test_put_moderator(self): def test_put_moderator(self):
tokens = User.create_jwt_tokens(self.moderator) tokens = User.create_jwt_tokens(self.moderator)
self.client.cookies = SimpleCookie( self.client.cookies = SimpleCookie(

View File

@ -4,18 +4,19 @@ from django.contrib.contenttypes.admin import GenericTabularInline
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from comment.models import Comment from comment.models import Comment
from utils.admin import BaseModelAdminMixin
from establishment import models from establishment import models
from main.models import Award from main.models import Award
from review import models as review_models from review import models as review_models
@admin.register(models.EstablishmentType) @admin.register(models.EstablishmentType)
class EstablishmentTypeAdmin(admin.ModelAdmin): class EstablishmentTypeAdmin(BaseModelAdminMixin):
"""EstablishmentType admin.""" """EstablishmentType admin."""
@admin.register(models.EstablishmentSubType) @admin.register(models.EstablishmentSubType)
class EstablishmentSubTypeAdmin(admin.ModelAdmin): class EstablishmentSubTypeAdmin(BaseModelAdminMixin):
"""EstablishmentSubType admin.""" """EstablishmentSubType admin."""
@ -47,17 +48,18 @@ class CommentInline(GenericTabularInline):
@admin.register(models.Establishment) @admin.register(models.Establishment)
class EstablishmentAdmin(admin.ModelAdmin): class EstablishmentAdmin(BaseModelAdminMixin):
"""Establishment admin.""" """Establishment admin."""
list_display = ['id', '__str__', 'image_tag', ] list_display = ['id', '__str__', 'image_tag', ]
inlines = [ inlines = [
AwardInline, ContactPhoneInline, ContactEmailInline, AwardInline, ContactPhoneInline, ContactEmailInline,
ReviewInline, CommentInline] ReviewInline, CommentInline]
raw_id_fields = ('address',) raw_id_fields = ('address',)
fields = ['old_id', 'name']
@admin.register(models.Position) @admin.register(models.Position)
class PositionAdmin(admin.ModelAdmin): class PositionAdmin(BaseModelAdminMixin):
"""Position admin.""" """Position admin."""
@ -68,7 +70,7 @@ class PlateInline(admin.TabularInline):
@admin.register(models.Menu) @admin.register(models.Menu)
class MenuAdmin(admin.ModelAdmin): class MenuAdmin(BaseModelAdminMixin):
"""Menu admin.""" """Menu admin."""
list_display = ['id', 'category_translated'] list_display = ['id', 'category_translated']
inlines = [ inlines = [

View File

@ -20,13 +20,14 @@ class BaseTestCase(APITestCase):
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)
#get tokkens # get tokens
tokkens = User.create_jwt_tokens(self.user) tokens = User.create_jwt_tokens(self.user)
self.client.cookies = SimpleCookie( self.client.cookies = SimpleCookie(
{'access_token': tokkens.get('access_token'), {'access_token': tokens.get('access_token'),
'refresh_token': tokkens.get('refresh_token')}) 'refresh_token': tokens.get('refresh_token')})
self.establishment_type = EstablishmentType.objects.create(name="Test establishment type") self.establishment_type = EstablishmentType.objects.create(
name="Test establishment type")
# Create lang object # Create lang object
self.lang = Language.objects.get( self.lang = Language.objects.get(
@ -42,12 +43,15 @@ class BaseTestCase(APITestCase):
country=self.country_ru) country=self.country_ru)
self.region.save() self.region.save()
self.city = City.objects.create(name='Mosocow', code='01', self.city = City.objects.create(
region=self.region, country=self.country_ru) name='Mosocow', code='01',
region=self.region,
country=self.country_ru)
self.city.save() self.city.save()
self.address = Address.objects.create(city=self.city, street_name_1='Krasnaya', self.address = Address.objects.create(
number=2, postal_code='010100') city=self.city, street_name_1='Krasnaya',
number=2, postal_code='010100')
self.address.save() self.address.save()
self.role = Role.objects.create(role=Role.ESTABLISHMENT_MANAGER) self.role = Role.objects.create(role=Role.ESTABLISHMENT_MANAGER)
@ -63,8 +67,9 @@ class BaseTestCase(APITestCase):
self.establishment.save() self.establishment.save()
self.user_role = UserRole.objects.create(user=self.user, role=self.role, self.user_role = UserRole.objects.create(
establishment=self.establishment) user=self.user, role=self.role,
establishment=self.establishment)
self.user_role.save() self.user_role.save()
@ -128,12 +133,11 @@ class EmployeeTests(BaseTestCase):
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
# Class to test childs
class ChildTestCase(BaseTestCase): class ChildTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
# Test childs
class EmailTests(ChildTestCase): class EmailTests(ChildTestCase):
def setUp(self): def setUp(self):
super().setUp() super().setUp()

View File

@ -61,9 +61,6 @@ class BaseTestCase(APITestCase):
description={"en-GB": "description of test establishment"}, description={"en-GB": "description of test establishment"},
establishment_type=self.test_establishment_type, establishment_type=self.test_establishment_type,
is_publish=True) is_publish=True)
# value for GenericRelation(reverse side) field must be iterable
# value for GenericRelation(reverse side) field must be assigned through
# "set" method of field
self.test_establishment.favorites.set([self.test_favorites]) self.test_establishment.favorites.set([self.test_favorites])

View File

@ -19,15 +19,10 @@ class BaseTestCase(APITestCase):
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)
# get tokens tokens = User.create_jwt_tokens(self.user)
# self.user.is_superuser = True
# self.user.save()
tokkens = User.create_jwt_tokens(self.user)
self.client.cookies = SimpleCookie( self.client.cookies = SimpleCookie(
{'access_token': tokkens.get('access_token'), {'access_token': tokens.get('access_token'),
'refresh_token': tokkens.get('refresh_token')}) 'refresh_token': tokens.get('refresh_token')})
self.lang = Language.objects.get( self.lang = Language.objects.get(
title='Russia', title='Russia',
@ -102,7 +97,6 @@ class RegionTests(BaseTestCase):
user_role.save() user_role.save()
def test_region_CRUD(self): def test_region_CRUD(self):
response = self.client.get('/api/back/location/regions/', format='json') response = self.client.get('/api/back/location/regions/', format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)

View File

@ -63,6 +63,8 @@ class SiteSettingsSerializer(serializers.ModelSerializer):
# todo: remove this # todo: remove this
country_code = serializers.CharField(source='subdomain', read_only=True) country_code = serializers.CharField(source='subdomain', read_only=True)
country_name = serializers.CharField(source='country.name_translated', read_only=True)
class Meta: class Meta:
"""Meta class.""" """Meta class."""
@ -78,7 +80,8 @@ class SiteSettingsSerializer(serializers.ModelSerializer):
'config', 'config',
'ad_config', 'ad_config',
'published_features', 'published_features',
'currency' 'currency',
'country_name'
) )

View File

@ -3,6 +3,7 @@ from django.conf import settings
from news import models from news import models
from .tasks import send_email_with_news from .tasks import send_email_with_news
from utils.admin import BaseModelAdminMixin
@admin.register(models.NewsType) @admin.register(models.NewsType)
@ -24,7 +25,7 @@ send_email_action.short_description = "Send the selected news by email"
@admin.register(models.News) @admin.register(models.News)
class NewsAdmin(admin.ModelAdmin): class NewsAdmin(BaseModelAdminMixin):
"""News admin.""" """News admin."""
raw_id_fields = ('address',) raw_id_fields = ('address',)
actions = [send_email_action] actions = [send_email_action]

View File

@ -15,10 +15,10 @@ class BaseTestCase(APITestCase):
self.password = 'sedragurdaredips19' self.password = 'sedragurdaredips19'
self.email = 'sedragurda@desoz.com' self.email = 'sedragurda@desoz.com'
self.user = User.objects.create_user(username=self.username, email=self.email, password=self.password) self.user = User.objects.create_user(username=self.username, email=self.email, password=self.password)
# get tokkens # get tokens
tokkens = User.create_jwt_tokens(self.user) tokens = User.create_jwt_tokens(self.user)
self.client.cookies = SimpleCookie({'access_token': tokkens.get('access_token'), self.client.cookies = SimpleCookie({'access_token': tokens.get('access_token'),
'refresh_token': tokkens.get('refresh_token')}) 'refresh_token': tokens.get('refresh_token')})
class NotificationAnonSubscribeTestCase(APITestCase): class NotificationAnonSubscribeTestCase(APITestCase):

View File

@ -27,7 +27,5 @@ class BaseTestCase(APITestCase):
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_recipe_detail(self): def test_recipe_detail(self):
print(self.test_recipe.id)
response = self.client.get(f"/api/web/recipes/{self.test_recipe.id}/") response = self.client.get(f"/api/web/recipes/{self.test_recipe.id}/")
print(response.json())
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)

View File

@ -1,8 +1,9 @@
"""Admin page for app Review""" """Admin page for app Review"""
from . import models from . import models
from django.contrib import admin from django.contrib import admin
from utils.admin import BaseModelAdminMixin
@admin.register(models.Review) @admin.register(models.Review)
class ReviewAdminModel(admin.ModelAdmin): class ReviewAdminModel(BaseModelAdminMixin):
"""Admin model for model Review.""" """Admin model for model Review."""

36
apps/utils/admin.py Normal file
View File

@ -0,0 +1,36 @@
"""Mixins for admin models."""
from django.contrib import admin
from django.db.models import ForeignKey
class BaseModelAdminMixin(admin.ModelAdmin):
"""
Class that overridden ModelAdmin and adds to readonly_fields attr
persisted fields like created_by, modified_by.
"""
_PERSISTENT_READ_ONLY_FIELDS = ['created_by', 'modified_by']
def _get_fk_field_names(self, fields: iter):
"""
Return an iterable object which contains FK model fields.
:param fields: iterable
:return: iterable
"""
foreign_key_fields = []
for field in fields:
if isinstance(field, ForeignKey):
foreign_key_fields.append(field.name)
return foreign_key_fields
def get_readonly_fields(self, request, obj=None):
"""
Hook for specifying custom readonly fields.
"""
_readonly_fields = list(self.readonly_fields)
fk_field_names = self._get_fk_field_names(self.model._meta.fields)
for field_name in fk_field_names:
if field_name in self._PERSISTENT_READ_ONLY_FIELDS:
_readonly_fields.append(field_name)
return tuple(_readonly_fields)

View File

@ -331,3 +331,6 @@ class GMTokenGenerator(PasswordResetTokenGenerator):
used. used.
""" """
return self.get_fields(user, timestamp) return self.get_fields(user, timestamp)
timezone.datetime.now().date().isoformat()

View File

@ -62,7 +62,6 @@ class TranslateFieldTests(BaseTestCase):
response = self.client.get(f"/api/web/news/slug/{self.news_item.slug}/", format='json') response = self.client.get(f"/api/web/news/slug/{self.news_item.slug}/", format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
news_data = response.json() news_data = response.json()
print(news_data)
self.assertIn("title_translated", news_data) self.assertIn("title_translated", news_data)
self.assertIn("Test news item", news_data['title_translated']) self.assertIn("Test news item", news_data['title_translated'])