Patch Notes dev-10 #12
@@ -244,6 +244,8 @@ class PostPublishService:
|
||||
"""Отклонение медиагруппы"""
|
||||
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)
|
||||
message_ids = post_ids.copy()
|
||||
message_ids.append(call.message.message_id)
|
||||
|
||||
@@ -22,6 +22,8 @@ def mock_post_repository():
|
||||
mock_repo = Mock(spec=PostRepository)
|
||||
mock_repo._execute_query = 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()
|
||||
return mock_repo
|
||||
|
||||
@@ -198,7 +200,9 @@ def mock_sql_queries():
|
||||
"CREATE TABLE IF NOT EXISTS message_link_to_content"
|
||||
],
|
||||
'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_status': "UPDATE post_from_telegram_suggest SET status = ?",
|
||||
'add_content': "INSERT OR IGNORE INTO content_post_from_telegram",
|
||||
'add_link': "INSERT OR IGNORE INTO message_link_to_content",
|
||||
'get_content': "SELECT cpft.content_name, cpft.content_type",
|
||||
|
||||
@@ -38,7 +38,8 @@ class TestPostRepository:
|
||||
text="Тестовый пост без даты",
|
||||
author_id=67890,
|
||||
helper_text_message_id=None,
|
||||
created_at=None
|
||||
created_at=None,
|
||||
status="suggest",
|
||||
)
|
||||
|
||||
@pytest.fixture
|
||||
@@ -75,6 +76,7 @@ class TestPostRepository:
|
||||
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 "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
|
||||
|
||||
# Проверяем создание таблицы контента
|
||||
@@ -101,12 +103,14 @@ class TestPostRepository:
|
||||
params = call_args[0][1]
|
||||
|
||||
assert "INSERT INTO post_from_telegram_suggest" in query
|
||||
assert "VALUES (?, ?, ?, ?)" in query
|
||||
assert "status" in query
|
||||
assert "VALUES (?, ?, ?, ?, ?)" in query
|
||||
assert params == (
|
||||
sample_post.message_id,
|
||||
sample_post.text,
|
||||
sample_post.author_id,
|
||||
sample_post.created_at
|
||||
sample_post.created_at,
|
||||
sample_post.status,
|
||||
)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -126,7 +130,8 @@ class TestPostRepository:
|
||||
call_args = post_repository._execute_query.call_args
|
||||
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
|
||||
async def test_add_post_logs_correctly(self, post_repository, sample_post):
|
||||
@@ -160,6 +165,51 @@ class TestPostRepository:
|
||||
assert "UPDATE post_from_telegram_suggest SET helper_text_message_id = ? WHERE message_id = ?" in query
|
||||
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
|
||||
async def test_add_post_content_success(self, post_repository):
|
||||
"""Тест успешного добавления контента поста."""
|
||||
|
||||
@@ -495,3 +495,52 @@ class TestPostRepositoryIntegration:
|
||||
expected_message_ids = [11111, 22222, 33333, 44444]
|
||||
for expected_id in expected_message_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