Мой блюдо — это традиционный борщ (украинский)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Тесты для функции sanitize_slug() из oknardia/web/add_func.py Проверяет: 1. Очистку от HTML-разметки 2. Транслитерацию русского текста 3. Замену пробелов и недопустимых символов на дефисы 4. Удаление множественных дефисов 5. Обрезку по максимальной длине """ import sys import os # Добавим путь к проекту для импорта (подъём на одну папку выше, т.к. тесты в папке tests/) sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'oknardia')) from web.add_func import sanitize_slug def test_russian_text_simple(): """Тест 1: Простой русский текст""" result = sanitize_slug('Привет мир') assert result == 'privet-mir', f"Ожидается 'privet-mir', получено: {result}" print("✓ Тест 1 (простой русский текст): пройден") def test_russian_text_with_special_chars(): """Тест 2: Русский текст со спецсимволами""" result = sanitize_slug('Тест!!! @#$%% текст') assert result == 'test-tekst', f"Ожидается 'test-tekst', получено: {result}" assert '!' not in result and '@' not in result and '#' not in result, \ f"Спецсимволы не удалены: {result}" print("✓ Тест 2 (русский текст со спецсимволами): пройден") def test_html_tags_removal(): """Тест 3: Удаление HTML-тегов""" text = '
Русский текст в тегах
' result = sanitize_slug(text) assert '<' not in result and '>' not in result, f"HTML-теги не удалены: {result}" # pytils транслитирует по-своему (может быть 'russkij' вместо 'russkii', 'tegah' вместо 'tagah') assert 'russ' in result and 'tekst' in result and 'teg' in result, f"Текст потеряился: {result}" print("✓ Тест 3 (удаление HTML-тегов): пройден") def test_html_entities(): """Тест 4: Обработка HTML-мнемоник""" text = 'Цена: 100 рублей — отличный © 2024' result = sanitize_slug(text) # Проверяем основной смысл: есть слова, есть цифры, нет пробелов и HTML assert 'tsena' in result and '100' in result and '2024' in result, \ f"Мнемоники не обработаны правильно: {result}" assert ' ' not in result and '&' not in result and '<' not in result, \ f"Остались проблемные символы: {result}" print("✓ Тест 4 (HTML-мнемоники): пройден") def test_multiple_spaces(): """Тест 5: Множественные пробелы и табуляция""" text = 'Текст с множественными пробелами\n\tи табуляцией' result = sanitize_slug(text) assert '--' not in result, f"Множественные дефисы не удалены: {result}" # Проверяем что результат - это слаг (только буквы, цифры и дефисы) assert all(c.isalnum() or c == '-' for c in result), f"Недопустимые символы в результате: {result}" print("✓ Тест 5 (множественные пробелы): пройден") def test_leading_trailing_dashes(): """Тест 6: Дефисы в начале и конце""" text = ' - - - Текст - - - ' result = sanitize_slug(text) assert not result.startswith('-'), f"Дефис в начале не удалён: {result}" assert not result.endswith('-'), f"Дефис в конце не удалён: {result}" print("✓ Тест 6 (дефисы в начале/конце): пройден") def test_complex_html_and_text(): """Тест 7: Комплексный тест с HTML и текстом""" text = 'Мой блюдо — это традиционный борщ (украинский)