Добавлено поле ban_author в модель BlacklistUser и соответствующие изменения в базе данных для отслеживания автора блокировки пользователя. Обновлены методы работы с черным списком в AsyncBotDB и BlacklistRepository, а также обработка блокировок в AdminService и BanService. Обновлены тесты для проверки новых функциональностей.
This commit is contained in:
@@ -37,7 +37,8 @@ class TestBlacklistRepository:
|
||||
user_id=12345,
|
||||
message_for_user="Нарушение правил",
|
||||
date_to_unban=int(time.time()) + 86400, # +1 день
|
||||
created_at=int(time.time())
|
||||
created_at=int(time.time()),
|
||||
ban_author=999,
|
||||
)
|
||||
|
||||
@pytest.fixture
|
||||
@@ -47,7 +48,8 @@ class TestBlacklistRepository:
|
||||
user_id=67890,
|
||||
message_for_user="Постоянный бан",
|
||||
date_to_unban=None,
|
||||
created_at=int(time.time())
|
||||
created_at=int(time.time()),
|
||||
ban_author=None,
|
||||
)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -82,11 +84,11 @@ class TestBlacklistRepository:
|
||||
|
||||
# Проверяем SQL запрос (учитываем форматирование)
|
||||
sql_query = call_args[0][0].replace('\n', ' ').replace(' ', ' ').replace(' ', ' ').strip()
|
||||
expected_sql = "INSERT INTO blacklist (user_id, message_for_user, date_to_unban) VALUES (?, ?, ?)"
|
||||
expected_sql = "INSERT INTO blacklist (user_id, message_for_user, date_to_unban, ban_author) VALUES (?, ?, ?, ?)"
|
||||
assert sql_query == expected_sql
|
||||
|
||||
# Проверяем параметры
|
||||
assert call_args[0][1] == (12345, "Нарушение правил", sample_blacklist_user.date_to_unban)
|
||||
assert call_args[0][1] == (12345, "Нарушение правил", sample_blacklist_user.date_to_unban, 999)
|
||||
|
||||
# Проверяем логирование
|
||||
blacklist_repository.logger.info.assert_called_once_with(
|
||||
@@ -99,7 +101,7 @@ class TestBlacklistRepository:
|
||||
await blacklist_repository.add_user(sample_blacklist_user_permanent)
|
||||
|
||||
call_args = blacklist_repository._execute_query.call_args
|
||||
assert call_args[0][1] == (67890, "Постоянный бан", None)
|
||||
assert call_args[0][1] == (67890, "Постоянный бан", None, None)
|
||||
|
||||
blacklist_repository.logger.info.assert_called_once_with(
|
||||
"Пользователь добавлен в черный список: user_id=67890"
|
||||
@@ -182,7 +184,7 @@ class TestBlacklistRepository:
|
||||
async def test_get_user_success(self, blacklist_repository):
|
||||
"""Тест успешного получения пользователя по ID"""
|
||||
# Симулируем результат запроса
|
||||
mock_row = (12345, "Нарушение правил", int(time.time()) + 86400, int(time.time()))
|
||||
mock_row = (12345, "Нарушение правил", int(time.time()) + 86400, int(time.time()), 111)
|
||||
blacklist_repository._execute_query_with_result.return_value = [mock_row]
|
||||
|
||||
result = await blacklist_repository.get_user(12345)
|
||||
@@ -193,12 +195,13 @@ class TestBlacklistRepository:
|
||||
assert result.message_for_user == "Нарушение правил"
|
||||
assert result.date_to_unban == mock_row[2]
|
||||
assert result.created_at == mock_row[3]
|
||||
assert result.ban_author == mock_row[4]
|
||||
|
||||
# Проверяем, что метод вызван с правильными параметрами
|
||||
blacklist_repository._execute_query_with_result.assert_called_once()
|
||||
call_args = blacklist_repository._execute_query_with_result.call_args
|
||||
|
||||
assert call_args[0][0] == "SELECT user_id, message_for_user, date_to_unban, created_at FROM blacklist WHERE user_id = ?"
|
||||
assert "SELECT user_id, message_for_user, date_to_unban, created_at, ban_author" in call_args[0][0]
|
||||
assert call_args[0][1] == (12345,)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
@@ -153,7 +153,7 @@ class TestAdminService:
|
||||
self.mock_db.set_user_blacklist = AsyncMock(return_value=None)
|
||||
|
||||
# Act
|
||||
await self.admin_service.ban_user(user_id, username, reason, ban_days)
|
||||
await self.admin_service.ban_user(user_id, username, reason, ban_days, ban_author_id=999)
|
||||
|
||||
# Assert
|
||||
self.mock_db.check_user_in_blacklist.assert_called_once_with(user_id)
|
||||
@@ -187,10 +187,10 @@ class TestAdminService:
|
||||
self.mock_db.set_user_blacklist = AsyncMock(return_value=None)
|
||||
|
||||
# Act
|
||||
await self.admin_service.ban_user(user_id, username, reason, ban_days)
|
||||
await self.admin_service.ban_user(user_id, username, reason, ban_days, ban_author_id=999)
|
||||
|
||||
# Assert
|
||||
self.mock_db.set_user_blacklist.assert_called_once_with(user_id, None, reason, None)
|
||||
self.mock_db.set_user_blacklist.assert_called_once_with(user_id, None, reason, None, ban_author=999)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_unban_user_success(self):
|
||||
|
||||
Reference in New Issue
Block a user