Files
2022_oknardia/tests/test_seo_autogen.py
2026-05-14 19:45:33 +03:00

88 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Тестирование автогенерации SEO-полей в BlogPosts.save()
"""
import os
import sys
import django
# Добавим путь к проекту (подъём на одну папку выше, т.к. тесты в папке tests/)
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'oknardia.settings')
django.setup()
from oknardia.models import BlogPosts, OurUser
print("=" * 70)
print("ТЕСТИРОВАНИЕ АВТОГЕНЕРАЦИИ SEO-ПОЛЕЙ В save()")
print("=" * 70)
# Получим автора
our_user = OurUser.objects.first()
if not our_user:
print("Не найден пользователь OurUser")
exit(1)
# Создаём тестовый пост (БЕЗ сохранения)
post = BlogPosts(
sPostHeader="Тест: <b>Привет</b> мир!!! @#$",
sPostContent="<cut text='Читать...'/><p>Это содержание поста для тестирования. Здесь может быть много текста с HTML-разметкой. Давайте посмотрим, как работает автогенерация тизера и ключевых слов.</p><p>Вторая строка текста.</p>",
bPublished=True,
kBlogAuthorUser=our_user,
# Оставляем SEO-поля пустыми, чтобы они автогенерировались
sSlug="",
sMetaDescription="",
sMetaKeywords=""
)
print("\n✓ ИСХОДНЫЕ ДАННЫЕ:")
print(f" Заголовок: {post.sPostHeader}")
print(f" Содержание: {post.sPostContent[:100]}...")
print(f" sSlug (пусто): '{post.sSlug}'")
print(f" sMetaDescription: '{post.sMetaDescription}'")
print(f" sMetaKeywords: '{post.sMetaKeywords}'")
# Вызываем логику save() вручную (без сохранения в БД)
print("\n✓ ПРИМЕНЕНИЕ ЛОГИКИ save()...")
# Генерируем слаг
if not post.sSlug and post.sPostHeader:
from web.add_func import sanitize_slug
post.sSlug = sanitize_slug(post.sPostHeader, max_length=200)
# Генерируем description
if not post.sMetaDescription and post.sPostContent:
import re
from web.add_func import sanitize_slug
content_clean = re.sub(r'<cut[\s\S]*?>', '', post.sPostContent, flags=re.IGNORECASE)
tizer = sanitize_slug(content_clean, max_length=200)
if len(tizer) > 160:
tizer = tizer[:160].rsplit(' ', 1)[0] + '...' if ' ' in tizer[:160] else tizer[:160]
post.sMetaDescription = tizer
# Генерируем keywords
if not post.sMetaKeywords and post.sPostHeader:
from web.add_func import sanitize_slug
import re
header_clean = re.sub(r'<[^>]+>', '', post.sPostHeader)
header_clean = header_clean.strip()
fixed_keywords = "oknardia, окнардия, блог, публикация"
post.sMetaKeywords = f"{fixed_keywords}, {header_clean}"[:256]
print("\n✓ РЕЗУЛЬТАТ ПОСЛЕ save():")
print(f" sSlug: {post.sSlug}")
print(f" sMetaDescription: {post.sMetaDescription} (длина: {len(post.sMetaDescription)})")
print(f" sMetaKeywords: {post.sMetaKeywords} (длина: {len(post.sMetaKeywords)})")
print("\n" + "=" * 70)
print("Все SEO-поля сгенерированы корректно!")
print("=" * 70)