160 lines
4.9 KiB
Python
160 lines
4.9 KiB
Python
import pytz
|
|
from datetime import datetime, timedelta
|
|
|
|
from rest_framework.test import APITestCase
|
|
from rest_framework import status
|
|
from http.cookies import SimpleCookie
|
|
|
|
from account.models import User
|
|
from news.models import News, NewsType
|
|
|
|
from django.test import TestCase
|
|
from translation.models import Language
|
|
from django.core import exceptions
|
|
from .serializers import validate_tjson
|
|
|
|
from establishment.models import Establishment, EstablishmentType, Employee
|
|
|
|
|
|
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 tokkens
|
|
tokkens = User.create_jwt_tokens(self.user)
|
|
self.client.cookies = SimpleCookie(
|
|
{'access_token': tokkens.get('access_token'),
|
|
'refresh_token': tokkens.get('refresh_token'),
|
|
'locale': "en"
|
|
})
|
|
|
|
|
|
class TranslateFieldTests(BaseTestCase):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
|
|
self.news_type = NewsType.objects.create(name="Test news type")
|
|
|
|
self.news_item = News.objects.create(
|
|
created_by=self.user,
|
|
modified_by=self.user,
|
|
title={
|
|
"en-GB": "Test news item",
|
|
"ru-RU": "Тестовая новость"
|
|
},
|
|
description={"en-GB": "Test description"},
|
|
playlist=1,
|
|
start=datetime.now(pytz.utc) + timedelta(hours=-13),
|
|
end=datetime.now(pytz.utc) + timedelta(hours=13),
|
|
news_type=self.news_type,
|
|
slug='test',
|
|
state=News.PUBLISHED,
|
|
)
|
|
|
|
def test_model_field(self):
|
|
self.assertIsNotNone(getattr(self.news_item, "title_translated", None))
|
|
|
|
def test_read_locale(self):
|
|
response = self.client.get(f"/api/web/news/slug/{self.news_item.slug}/", format='json')
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
news_data = response.json()
|
|
|
|
self.assertIn("title_translated", news_data)
|
|
|
|
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)
|
|
self.assertIsInstance(response_data['id'], int)
|
|
|
|
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(f'/api/back/establishments/employees/{employee.pk}/', 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):
|
|
|
|
def test_valid_json(self):
|
|
lang = Language.objects.create(title='English', locale='en-GB')
|
|
lang.save()
|
|
|
|
data = 'str'
|
|
|
|
with self.assertRaises(exceptions.ValidationError) as err:
|
|
validate_tjson(data)
|
|
|
|
self.assertEqual(err.exception.code, 'invalid_json')
|
|
|
|
data = {
|
|
"string": "value"
|
|
}
|
|
|
|
with self.assertRaises(exceptions.ValidationError) as err:
|
|
validate_tjson(data)
|
|
|
|
self.assertEqual(err.exception.code, 'invalid_translated_keys')
|
|
|
|
data = {
|
|
"en-GB": "English"
|
|
}
|
|
|
|
try:
|
|
validate_tjson(data)
|
|
self.assertTrue(True)
|
|
except exceptions.ValidationError:
|
|
self.assert_(False, "Test json translated FAILED") |