feat(frontend): configure vendor build scripts and fallback templates
Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
from pathlib import Path
|
||||
from django.test import TestCase, Client, override_settings
|
||||
from django.urls import reverse
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
@override_settings(SECURE_SSL_REDIRECT=False)
|
||||
class VendorAssetsAndFallbackTestCase(TestCase):
|
||||
"""
|
||||
Тестирование наличия вендорных ассетов и корректности подключения fallback в шаблоне base.html.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
|
||||
def test_vendor_static_files_exist(self):
|
||||
"""Проверяем, что все скомпилированные/скопированные локальные файлы присутствуют в статике."""
|
||||
static_dir = settings.BASE_DIR.parent / 'public' / 'static'
|
||||
|
||||
required_files = [
|
||||
'vendor/bootstrap/bootstrap.min.css',
|
||||
'vendor/bootstrap/bootstrap.bundle.min.js',
|
||||
'vendor/bootstrap-icons/bootstrap-icons.min.css',
|
||||
'vendor/bootstrap-icons/fonts/bootstrap-icons.woff2',
|
||||
'vendor/bootstrap-icons/fonts/bootstrap-icons.woff',
|
||||
'vendor/htmx/htmx.min.js',
|
||||
'vendor/alpinejs/cdn.min.js',
|
||||
'codemirror/editor.js',
|
||||
]
|
||||
|
||||
for rel_path in required_files:
|
||||
file_path = static_dir / rel_path
|
||||
self.assertTrue(
|
||||
file_path.exists(),
|
||||
f"Файл вендора не найден в статике: {rel_path} (ожидался по пути {file_path})"
|
||||
)
|
||||
self.assertGreater(
|
||||
file_path.stat().st_size,
|
||||
0,
|
||||
f"Файл вендора пуст: {rel_path}"
|
||||
)
|
||||
|
||||
def test_base_template_fallback_tags(self):
|
||||
"""Проверяем, что главная страница отдает теги с fallback-обработкой ошибок загрузки с CDN."""
|
||||
response = self.client.get(reverse('index'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
content = response.content.decode('utf-8')
|
||||
|
||||
# Проверка fallback для Bootstrap CSS
|
||||
self.assertIn('bootstrap.min.css', content)
|
||||
self.assertIn("vendor/bootstrap/bootstrap.min.css", content)
|
||||
|
||||
# Проверка fallback для Bootstrap Icons
|
||||
self.assertIn('bootstrap-icons.min.css', content)
|
||||
self.assertIn("vendor/bootstrap-icons/bootstrap-icons.min.css", content)
|
||||
|
||||
# Проверка fallback для HTMX
|
||||
self.assertIn('htmx.org', content)
|
||||
self.assertIn('window.htmx || document.write', content)
|
||||
self.assertIn('vendor/htmx/htmx.min.js', content)
|
||||
|
||||
# Проверка fallback для Alpine.js
|
||||
self.assertIn('alpinejs', content)
|
||||
self.assertIn('vendor/alpinejs/cdn.min.js', content)
|
||||
|
||||
# Проверка fallback для Bootstrap JS
|
||||
self.assertIn('bootstrap.bundle.min.js', content)
|
||||
self.assertIn('window.bootstrap || document.write', content)
|
||||
self.assertIn('vendor/bootstrap/bootstrap.bundle.min.js', content)
|
||||
|
||||
|
||||
@override_settings(SECURE_SSL_REDIRECT=False)
|
||||
class TypographViewsTestCase(TestCase):
|
||||
"""
|
||||
Базовые тесты функциональности представлений типографа.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
|
||||
def test_process_text_endpoint(self):
|
||||
"""Проверка эндпоинта типографирования текста."""
|
||||
response = self.client.post(
|
||||
reverse('process_text'),
|
||||
data={
|
||||
'text': 'Тест "кавычек" и предлога в тексте.',
|
||||
'langs': 'ru',
|
||||
'quotes': 'on',
|
||||
'unbreakables': 'on',
|
||||
}
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertIn('X-Processing-Time', response.headers)
|
||||
content = response.content.decode('utf-8')
|
||||
# Проверяем типографирование кавычек «ёлочки»
|
||||
self.assertIn('«кавычек»', content)
|
||||
|
||||
def test_stats_summary_endpoint(self):
|
||||
"""Проверка эндпоинта сводной статистики."""
|
||||
response = self.client.get(reverse('stats_summary'))
|
||||
self.assertEqual(response.status_code, 200)
|
||||
Reference in New Issue
Block a user