discordBot/tests/test_commands_status.py
deadzilla 91f34625a8 feat: команды !status и !stats
Добавлены Discord-команды:
  - !status — пинг к gateway, uptime, статус (embed)
  - !stats — серверы, каналы, пользователи (embed)

Добавлены консольные команды:
  - status — статус бота в терминале
  - stats — статистика серверов в терминале

Тесты:
  - test_commands_status.py (6 тестов)
  - test_commands_stats.py (4 теста)
  - всего: 233 теста

Обновления:
  - README.md — новые команды в таблицах и архитектуре
  - ISSUES.md — высокий приоритет закрыт
  - admin.py — hint на !status и !stats
2026-06-12 16:19:21 +05:00

90 lines
2.7 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.

"""Тесты для команды !status."""
import time
import pytest
from unittest.mock import AsyncMock, MagicMock, patch
class TestStatusCommand:
"""Тесты Discord-команды status."""
def _make_cog(self, start_time=None):
"""Создать Status cog с моком времени."""
from commands.status import Status
cog = Status()
if start_time is not None:
cog._start_time = start_time
return cog
async def test_status_sends_embed(self):
"""Команда status отправляет embed-сообщение."""
from commands.status import Status
mock_ctx = MagicMock()
mock_ctx.bot.latency = 0.042
mock_ctx.send = AsyncMock(return_value=None)
cog = self._make_cog()
await cog.status(cog, mock_ctx)
mock_ctx.send.assert_awaited_once()
call_args = mock_ctx.send.call_args
embed = call_args[1]["embed"] if call_args[1] else call_args[0][0]
assert embed.title == "Статус бота"
assert "42.0 мс" in embed.fields[0].value
async def test_status_uptime_format(self):
"""Uptime форматируется корректно."""
from commands.status import Status
mock_ctx = MagicMock()
mock_ctx.bot.latency = 0.050
mock_ctx.send = AsyncMock(return_value=None)
start = time.time() - 90061 # 1д 1ч 1м 1с
cog = self._make_cog(start_time=start)
await cog.status(cog, mock_ctx)
call_args = mock_ctx.send.call_args
embed = call_args[1]["embed"] if call_args[1] else call_args[0][0]
uptime = embed.fields[1].value
assert "" in uptime
assert "" in uptime
assert "" in uptime
assert "1с" in uptime
class TestFormatUptime:
"""Тесты форматирования uptime."""
def test_zero_seconds(self):
from commands.status import Status
result = Status._format_uptime(0)
assert result == "0с"
def test_minutes_and_seconds(self):
from commands.status import Status
result = Status._format_uptime(125) # 2м 5с
assert "" in result
assert "5с" in result
def test_hours_minutes_seconds(self):
from commands.status import Status
result = Status._format_uptime(3661) # 1ч 1м 1с
assert "" in result
assert "" in result
assert "1с" in result
def test_full_day(self):
from commands.status import Status
result = Status._format_uptime(90061) # 1д 1ч 1м 1с
assert "" in result
assert "" in result
assert "" in result
assert "1с" in result