discordBot/tests/test_commands_status.py
deadzilla f2844f0453 fix: uptime читается с bot._start_time вместо Cog
Проблема: _start_time хранился в Status Cog, но консольная
команда искала его на объекте bot — всегда получала fallback
time.time() и показывала 0с.

Решение: _start_time устанавливается в BotRunner.__init__ на
объекте bot. Cog и console_command читают getattr(bot, '_start_time').

Изменено: bot.py, commands/status.py, console_commands/status.py,
tests/test_commands_status.py
2026-06-12 16:32:55 +05:00

82 lines
2.5 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."""
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.bot._start_time = time.time()
mock_ctx.send = AsyncMock(return_value=None)
cog = Status()
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.bot._start_time = time.time() - 90061 # 1д 1ч 1м 1с
mock_ctx.send = AsyncMock(return_value=None)
cog = Status()
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