from datetime import datetime, timedelta from app.utils.formatters import ( build_help_text, format_bytes, format_datetime, format_datetime_with_days_left, format_issued_access, format_payment_plan, format_traffic_limit, ) def test_format_bytes_for_megabytes() -> None: assert format_bytes(1024 * 1024) == "1.00 MB" def test_format_traffic_limit_without_limit() -> None: assert format_traffic_limit(0) == "без лимита" def test_format_datetime_value() -> None: assert format_datetime(datetime(2026, 4, 21, 12, 30)) == "21.04.2026 12:30" def test_build_help_text_contains_only_start_command() -> None: text = build_help_text(is_admin=False) assert "/start - открыть главное меню" in text assert "Дальше используйте кнопки внутри интерфейса бота." in text assert "/menu - " not in text assert "/buy - " not in text assert "/paysupport - " not in text assert "/sync - " not in text assert "/link " not in text assert "/help - " not in text def test_format_datetime_with_days_left() -> None: value = datetime.now().replace(microsecond=0) + timedelta(days=3, hours=2) text = format_datetime_with_days_left(value) assert value.strftime("%d.%m.%Y %H:%M") in text assert "(4 " in text def test_format_payment_plan_uses_rubles() -> None: text = format_payment_plan( title="OREOL VPN на 30 дней", description="Доступ к VPN на 30 дней", price_stars=250, duration_days=30, traffic_limit_bytes=0, ) assert "OREOL VPN на 30 дней" in text assert "Цена: 250 ₽" in text assert "Трафик: без лимита" in text def test_format_issued_access_contains_subscription_data() -> None: text = format_issued_access( subscription_url="https://example.com/sub", expire_at=datetime(2026, 5, 21, 18, 0), traffic_limit_bytes=0, brand_name="OREOL VPN", ) assert "OREOL VPN" in text assert "https://example.com/sub" in text assert "21.05.2026 18:00" in text assert "Подписка активирована" in text assert "Что делать дальше" in text assert "/me" not in text def test_format_issued_access_for_renewal_mentions_extension() -> None: text = format_issued_access( subscription_url="https://example.com/sub", expire_at=datetime(2026, 5, 21, 18, 0), traffic_limit_bytes=0, brand_name="OREOL VPN", is_renewal=True, ) assert "подписка продлена" in text.lower() assert "Подписка продлена." in text