Patch Notes dev-10 #12
@@ -243,15 +243,17 @@ class PostPublishService:
|
|||||||
async def _decline_media_group(self, call: CallbackQuery) -> None:
|
async def _decline_media_group(self, call: CallbackQuery) -> None:
|
||||||
"""Отклонение медиагруппы"""
|
"""Отклонение медиагруппы"""
|
||||||
logger.debug(f"Отклоняю медиагруппу. Helper message ID: {call.message.message_id}")
|
logger.debug(f"Отклоняю медиагруппу. Helper message ID: {call.message.message_id}")
|
||||||
|
|
||||||
|
await self.db.update_status_for_media_group_by_helper_id(call.message.message_id, "declined")
|
||||||
|
|
||||||
post_ids = await self.db.get_post_ids_from_telegram_by_last_id(call.message.message_id)
|
post_ids = await self.db.get_post_ids_from_telegram_by_last_id(call.message.message_id)
|
||||||
message_ids = post_ids.copy()
|
message_ids = post_ids.copy()
|
||||||
message_ids.append(call.message.message_id)
|
message_ids.append(call.message.message_id)
|
||||||
logger.debug(f"Получены ID сообщений для удаления: {message_ids}")
|
logger.debug(f"Получены ID сообщений для удаления: {message_ids}")
|
||||||
|
|
||||||
author_id = await self._get_author_id_for_media_group(call.message.message_id)
|
author_id = await self._get_author_id_for_media_group(call.message.message_id)
|
||||||
logger.debug(f"ID автора медиагруппы получен: {author_id}")
|
logger.debug(f"ID автора медиагруппы получен: {author_id}")
|
||||||
|
|
||||||
logger.debug(f"Удаляю {len(message_ids)} сообщений из группы {self.group_for_posts}")
|
logger.debug(f"Удаляю {len(message_ids)} сообщений из группы {self.group_for_posts}")
|
||||||
await self._get_bot(call.message).delete_messages(chat_id=self.group_for_posts, message_ids=message_ids)
|
await self._get_bot(call.message).delete_messages(chat_id=self.group_for_posts, message_ids=message_ids)
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ def mock_post_repository():
|
|||||||
mock_repo = Mock(spec=PostRepository)
|
mock_repo = Mock(spec=PostRepository)
|
||||||
mock_repo._execute_query = AsyncMock()
|
mock_repo._execute_query = AsyncMock()
|
||||||
mock_repo._execute_query_with_result = AsyncMock()
|
mock_repo._execute_query_with_result = AsyncMock()
|
||||||
|
mock_repo.update_status_by_message_id = AsyncMock()
|
||||||
|
mock_repo.update_status_for_media_group_by_helper_id = AsyncMock()
|
||||||
mock_repo.logger = Mock()
|
mock_repo.logger = Mock()
|
||||||
return mock_repo
|
return mock_repo
|
||||||
|
|
||||||
@@ -198,7 +200,9 @@ def mock_sql_queries():
|
|||||||
"CREATE TABLE IF NOT EXISTS message_link_to_content"
|
"CREATE TABLE IF NOT EXISTS message_link_to_content"
|
||||||
],
|
],
|
||||||
'add_post': "INSERT INTO post_from_telegram_suggest",
|
'add_post': "INSERT INTO post_from_telegram_suggest",
|
||||||
|
'add_post_status': "status",
|
||||||
'update_helper': "UPDATE post_from_telegram_suggest SET helper_text_message_id",
|
'update_helper': "UPDATE post_from_telegram_suggest SET helper_text_message_id",
|
||||||
|
'update_status': "UPDATE post_from_telegram_suggest SET status = ?",
|
||||||
'add_content': "INSERT OR IGNORE INTO content_post_from_telegram",
|
'add_content': "INSERT OR IGNORE INTO content_post_from_telegram",
|
||||||
'add_link': "INSERT OR IGNORE INTO message_link_to_content",
|
'add_link': "INSERT OR IGNORE INTO message_link_to_content",
|
||||||
'get_content': "SELECT cpft.content_name, cpft.content_type",
|
'get_content': "SELECT cpft.content_name, cpft.content_type",
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ class TestPostRepository:
|
|||||||
text="Тестовый пост без даты",
|
text="Тестовый пост без даты",
|
||||||
author_id=67890,
|
author_id=67890,
|
||||||
helper_text_message_id=None,
|
helper_text_message_id=None,
|
||||||
created_at=None
|
created_at=None,
|
||||||
|
status="suggest",
|
||||||
)
|
)
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@@ -75,6 +76,7 @@ class TestPostRepository:
|
|||||||
assert "CREATE TABLE IF NOT EXISTS post_from_telegram_suggest" in post_table_call
|
assert "CREATE TABLE IF NOT EXISTS post_from_telegram_suggest" in post_table_call
|
||||||
assert "message_id INTEGER NOT NULL PRIMARY KEY" in post_table_call
|
assert "message_id INTEGER NOT NULL PRIMARY KEY" in post_table_call
|
||||||
assert "created_at INTEGER NOT NULL" in post_table_call
|
assert "created_at INTEGER NOT NULL" in post_table_call
|
||||||
|
assert "status TEXT NOT NULL DEFAULT 'suggest'" in post_table_call
|
||||||
assert "FOREIGN KEY (author_id) REFERENCES our_users (user_id) ON DELETE CASCADE" in post_table_call
|
assert "FOREIGN KEY (author_id) REFERENCES our_users (user_id) ON DELETE CASCADE" in post_table_call
|
||||||
|
|
||||||
# Проверяем создание таблицы контента
|
# Проверяем создание таблицы контента
|
||||||
@@ -101,12 +103,14 @@ class TestPostRepository:
|
|||||||
params = call_args[0][1]
|
params = call_args[0][1]
|
||||||
|
|
||||||
assert "INSERT INTO post_from_telegram_suggest" in query
|
assert "INSERT INTO post_from_telegram_suggest" in query
|
||||||
assert "VALUES (?, ?, ?, ?)" in query
|
assert "status" in query
|
||||||
|
assert "VALUES (?, ?, ?, ?, ?)" in query
|
||||||
assert params == (
|
assert params == (
|
||||||
sample_post.message_id,
|
sample_post.message_id,
|
||||||
sample_post.text,
|
sample_post.text,
|
||||||
sample_post.author_id,
|
sample_post.author_id,
|
||||||
sample_post.created_at
|
sample_post.created_at,
|
||||||
|
sample_post.status,
|
||||||
)
|
)
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@@ -126,7 +130,8 @@ class TestPostRepository:
|
|||||||
call_args = post_repository._execute_query.call_args
|
call_args = post_repository._execute_query.call_args
|
||||||
params = call_args[0][1]
|
params = call_args[0][1]
|
||||||
|
|
||||||
assert params[3] == sample_post_no_date.created_at # created_at field
|
assert params[3] == sample_post_no_date.created_at # created_at
|
||||||
|
assert params[4] == sample_post_no_date.status # status (default suggest)
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_add_post_logs_correctly(self, post_repository, sample_post):
|
async def test_add_post_logs_correctly(self, post_repository, sample_post):
|
||||||
@@ -159,7 +164,52 @@ class TestPostRepository:
|
|||||||
|
|
||||||
assert "UPDATE post_from_telegram_suggest SET helper_text_message_id = ? WHERE message_id = ?" in query
|
assert "UPDATE post_from_telegram_suggest SET helper_text_message_id = ? WHERE message_id = ?" in query
|
||||||
assert params == (helper_message_id, message_id)
|
assert params == (helper_message_id, message_id)
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_update_status_by_message_id(self, post_repository):
|
||||||
|
"""Тест обновления статуса поста по message_id."""
|
||||||
|
post_repository._execute_query = AsyncMock()
|
||||||
|
post_repository.logger = MagicMock()
|
||||||
|
|
||||||
|
message_id = 12345
|
||||||
|
status = "approved"
|
||||||
|
|
||||||
|
await post_repository.update_status_by_message_id(message_id, status)
|
||||||
|
|
||||||
|
post_repository._execute_query.assert_called_once()
|
||||||
|
call_args = post_repository._execute_query.call_args
|
||||||
|
query = call_args[0][0]
|
||||||
|
params = call_args[0][1]
|
||||||
|
|
||||||
|
assert "UPDATE post_from_telegram_suggest" in query
|
||||||
|
assert "SET status = ? WHERE message_id = ?" in query
|
||||||
|
assert params == (status, message_id)
|
||||||
|
post_repository.logger.info.assert_called_once()
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_update_status_for_media_group_by_helper_id(self, post_repository):
|
||||||
|
"""Тест обновления статуса медиагруппы по helper_message_id."""
|
||||||
|
post_repository._execute_query = AsyncMock()
|
||||||
|
post_repository.logger = MagicMock()
|
||||||
|
|
||||||
|
helper_message_id = 99999
|
||||||
|
status = "declined"
|
||||||
|
|
||||||
|
await post_repository.update_status_for_media_group_by_helper_id(
|
||||||
|
helper_message_id, status
|
||||||
|
)
|
||||||
|
|
||||||
|
post_repository._execute_query.assert_called_once()
|
||||||
|
call_args = post_repository._execute_query.call_args
|
||||||
|
query = call_args[0][0]
|
||||||
|
params = call_args[0][1]
|
||||||
|
|
||||||
|
assert "UPDATE post_from_telegram_suggest" in query
|
||||||
|
assert "SET status = ?" in query
|
||||||
|
assert "message_id = ? OR helper_text_message_id = ?" in query
|
||||||
|
assert params == (status, helper_message_id, helper_message_id)
|
||||||
|
post_repository.logger.info.assert_called_once()
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_add_post_content_success(self, post_repository):
|
async def test_add_post_content_success(self, post_repository):
|
||||||
"""Тест успешного добавления контента поста."""
|
"""Тест успешного добавления контента поста."""
|
||||||
|
|||||||
@@ -495,3 +495,52 @@ class TestPostRepositoryIntegration:
|
|||||||
expected_message_ids = [11111, 22222, 33333, 44444]
|
expected_message_ids = [11111, 22222, 33333, 44444]
|
||||||
for expected_id in expected_message_ids:
|
for expected_id in expected_message_ids:
|
||||||
assert expected_id in post_ids
|
assert expected_id in post_ids
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_update_status_by_message_id_integration(self, post_repository, sample_post):
|
||||||
|
"""Интеграционный тест обновления статуса одиночного поста."""
|
||||||
|
await self._setup_test_database(post_repository)
|
||||||
|
await post_repository.add_post(sample_post)
|
||||||
|
|
||||||
|
await post_repository.update_status_by_message_id(sample_post.message_id, "approved")
|
||||||
|
|
||||||
|
rows = await post_repository._execute_query_with_result(
|
||||||
|
"SELECT status FROM post_from_telegram_suggest WHERE message_id = ?",
|
||||||
|
(sample_post.message_id,),
|
||||||
|
)
|
||||||
|
assert len(rows) == 1
|
||||||
|
assert rows[0][0] == "approved"
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_update_status_for_media_group_by_helper_id_integration(
|
||||||
|
self, post_repository, sample_post_with_helper
|
||||||
|
):
|
||||||
|
"""Интеграционный тест обновления статуса медиагруппы по helper_message_id."""
|
||||||
|
await self._setup_test_database(post_repository)
|
||||||
|
await post_repository.add_post(sample_post_with_helper)
|
||||||
|
helper_message_id = 99999
|
||||||
|
helper_post = TelegramPost(
|
||||||
|
message_id=helper_message_id,
|
||||||
|
text="^",
|
||||||
|
author_id=67890,
|
||||||
|
helper_text_message_id=sample_post_with_helper.message_id,
|
||||||
|
created_at=int(datetime.now().timestamp()),
|
||||||
|
status="suggest",
|
||||||
|
)
|
||||||
|
await post_repository.add_post(helper_post)
|
||||||
|
await post_repository.update_helper_message(
|
||||||
|
sample_post_with_helper.message_id, helper_message_id
|
||||||
|
)
|
||||||
|
|
||||||
|
await post_repository.update_status_for_media_group_by_helper_id(
|
||||||
|
helper_message_id, "declined"
|
||||||
|
)
|
||||||
|
|
||||||
|
rows = await post_repository._execute_query_with_result(
|
||||||
|
"SELECT status FROM post_from_telegram_suggest "
|
||||||
|
"WHERE message_id = ? OR helper_text_message_id = ?",
|
||||||
|
(helper_message_id, helper_message_id),
|
||||||
|
)
|
||||||
|
assert len(rows) == 2
|
||||||
|
for row in rows:
|
||||||
|
assert row[0] == "declined"
|
||||||
|
|||||||
Reference in New Issue
Block a user