Реализован функцоинал хранения сырых текстов поста в базе данных. Оформление поста происходит непосредственно перед его отправкой в канал.
- Реализованы методы `get_post_text_and_anonymity_by_message_id` и `get_post_text_and_anonymity_by_helper_id` в `PostRepository` для получения текста поста и флага анонимности. - Обновлена модель `TelegramPost`, добавлено поле `is_anonymous`. - Изменена схема базы данных для включения поля `is_anonymous` в таблицу `post_from_telegram_suggest`. - Обновлены функции публикации постов в `PostPublishService` для учета анонимности. - Добавлены тесты для проверки новых функций и корректности работы с анонимностью.
This commit is contained in:
@@ -6,6 +6,7 @@ import os
|
||||
from helper_bot.utils.helper_func import (
|
||||
get_first_name,
|
||||
get_text_message,
|
||||
determine_anonymity,
|
||||
check_username_and_full_name,
|
||||
safe_html_escape,
|
||||
download_file,
|
||||
@@ -64,12 +65,13 @@ class TestHelperFunctions:
|
||||
|
||||
def test_get_text_message(self, mock_message):
|
||||
"""Тест функции обработки текста сообщения"""
|
||||
# Тест с обычным текстом
|
||||
# Тест с обычным текстом (legacy - определяется по тексту)
|
||||
text = "Привет, это тестовое сообщение"
|
||||
result = get_text_message(text, "Test", "testuser")
|
||||
assert "Test" in result
|
||||
assert "testuser" in result
|
||||
assert "тестовое сообщение" in result
|
||||
assert "Автор поста" in result
|
||||
|
||||
# Тест с пустым текстом
|
||||
result = get_text_message("", "Test", "testuser")
|
||||
@@ -83,6 +85,98 @@ class TestHelperFunctions:
|
||||
assert "testuser" in result
|
||||
assert "Обычный текст без специальных слов" in result
|
||||
|
||||
def test_get_text_message_with_is_anonymous_true(self, mock_message):
|
||||
"""Тест функции get_text_message с is_anonymous=True"""
|
||||
text = "Тестовый пост"
|
||||
result = get_text_message(text, "Test", "testuser", is_anonymous=True)
|
||||
assert "Пост из ТГ:" in result
|
||||
assert "Тестовый пост" in result
|
||||
assert "Пост опубликован анонимно" in result
|
||||
assert "Автор поста" not in result
|
||||
|
||||
def test_get_text_message_with_is_anonymous_false(self, mock_message):
|
||||
"""Тест функции get_text_message с is_anonymous=False"""
|
||||
text = "Тестовый пост"
|
||||
result = get_text_message(text, "Test", "testuser", is_anonymous=False)
|
||||
assert "Пост из ТГ:" in result
|
||||
assert "Тестовый пост" in result
|
||||
assert "Автор поста" in result
|
||||
assert "Test" in result
|
||||
assert "testuser" in result
|
||||
assert "Пост опубликован анонимно" not in result
|
||||
|
||||
def test_get_text_message_with_is_anonymous_none_legacy(self, mock_message):
|
||||
"""Тест функции get_text_message с is_anonymous=None (legacy - определяется по тексту)"""
|
||||
# Тест с "анон" в тексте
|
||||
text = "Тестовый пост анон"
|
||||
result = get_text_message(text, "Test", "testuser", is_anonymous=None)
|
||||
assert "Пост из ТГ:" in result
|
||||
assert "Тестовый пост анон" in result
|
||||
assert "Пост опубликован анонимно" in result
|
||||
|
||||
# Тест с "неанон" в тексте
|
||||
text = "Тестовый пост неанон"
|
||||
result = get_text_message(text, "Test", "testuser", is_anonymous=None)
|
||||
assert "Пост из ТГ:" in result
|
||||
assert "Тестовый пост неанон" in result
|
||||
assert "Автор поста" in result
|
||||
|
||||
# Тест с "не анон" в тексте
|
||||
text = "Тестовый пост не анон"
|
||||
result = get_text_message(text, "Test", "testuser", is_anonymous=None)
|
||||
assert "Автор поста" in result
|
||||
|
||||
def test_get_text_message_with_username_none(self, mock_message):
|
||||
"""Тест функции get_text_message без username"""
|
||||
text = "Тестовый пост"
|
||||
result = get_text_message(text, "Test", None, is_anonymous=False)
|
||||
assert "Test" in result
|
||||
assert "(Ник не указан)" in result
|
||||
assert "@" not in result
|
||||
|
||||
def test_determine_anonymity_with_anon(self):
|
||||
"""Тест функции determine_anonymity с 'анон' в тексте"""
|
||||
assert determine_anonymity("Этот пост анон") is True
|
||||
assert determine_anonymity("анон") is True
|
||||
assert determine_anonymity("АНОН") is True # Проверка регистра
|
||||
assert determine_anonymity("пост анонимный анон") is True
|
||||
|
||||
def test_determine_anonymity_with_neanon(self):
|
||||
"""Тест функции determine_anonymity с 'неанон' в тексте"""
|
||||
assert determine_anonymity("Этот пост неанон") is False
|
||||
assert determine_anonymity("неанон") is False
|
||||
assert determine_anonymity("НЕАНОН") is False # Проверка регистра
|
||||
assert determine_anonymity("пост неанон") is False
|
||||
|
||||
def test_determine_anonymity_with_ne_anon(self):
|
||||
"""Тест функции determine_anonymity с 'не анон' в тексте"""
|
||||
assert determine_anonymity("Этот пост не анон") is False
|
||||
assert determine_anonymity("не анон") is False
|
||||
assert determine_anonymity("НЕ АНОН") is False # Проверка регистра
|
||||
assert determine_anonymity("пост не анон") is False
|
||||
|
||||
def test_determine_anonymity_priority_neanon_over_anon(self):
|
||||
"""Тест приоритета 'неанон' над 'анон'"""
|
||||
# Если есть и "анон" и "неанон", должен вернуть False
|
||||
assert determine_anonymity("анон неанон") is False
|
||||
assert determine_anonymity("неанон анон") is False
|
||||
assert determine_anonymity("не анон анон") is False
|
||||
|
||||
def test_determine_anonymity_without_keywords(self):
|
||||
"""Тест функции determine_anonymity без ключевых слов"""
|
||||
assert determine_anonymity("Обычный текст") is False
|
||||
assert determine_anonymity("") is False
|
||||
assert determine_anonymity("Пост без специальных слов") is False
|
||||
|
||||
def test_determine_anonymity_with_none(self):
|
||||
"""Тест функции determine_anonymity с None"""
|
||||
assert determine_anonymity(None) is False
|
||||
|
||||
def test_determine_anonymity_with_empty_string(self):
|
||||
"""Тест функции determine_anonymity с пустой строкой"""
|
||||
assert determine_anonymity("") is False
|
||||
assert determine_anonymity(" ") is False # Только пробелы
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_check_username_and_full_name(self):
|
||||
"""Тест функции проверки изменений username и full_name"""
|
||||
|
||||
Reference in New Issue
Block a user