Files
RemnaWaveBOT/tests/test_bot_config_service.py
2026-05-06 15:41:56 +03:00

85 lines
3.0 KiB
Python

from app.config import Settings
from app.services.bot_config_service import BotConfigService
def _make_settings() -> Settings:
return Settings.model_construct(
bot_brand_name="OREOL VPN",
bot_public_username="oreol_vpn_bot",
bot_support_url="https://t.me/support_account",
bot_terms_url="https://example.com/terms",
bot_support_ticket_link="",
bot_support_ticket_chat_id_raw="",
bot_support_ticket_thread_id=0,
bot_start_image_enabled=True,
bot_start_image_path="assets/main.png",
payment_review_link="",
payment_review_chat_id_raw="",
payment_review_thread_id=0,
referral_discount_percent=5,
referral_bonus_days=7,
payment_plans_raw="30:250,180:600",
payment_product_plans_raw="",
payment_transfer_text="Реквизиты",
payment_support_text="Напишите в поддержку",
payment_plan_traffic_limit_gb=0,
payment_plan_traffic_reset_period="NO_RESET",
payment_internal_squad_uuids_raw="uuid-1",
payment_vpn_squad_uuids_raw="vpn-uuid",
payment_white_squad_uuids_raw="white-uuid",
payment_external_squad_uuid="",
payment_username_prefix="Oreol",
payment_user_tag="BOT",
)
async def test_bot_config_service_updates_runtime_snapshot(session_factory) -> None:
service = BotConfigService(
settings=_make_settings(),
session_factory=session_factory,
)
await service.update_setting(
key="bot_brand_name",
raw_value="NEW BRAND",
updated_by_telegram_id=1,
)
await service.update_setting(
key="payment_plans_raw",
raw_value="30:300,90:700",
updated_by_telegram_id=1,
)
await service.update_setting(
key="payment_product_plans_raw",
raw_value="vpn_white:30:450,white:30:250,vpn:30:200",
updated_by_telegram_id=1,
)
await service.update_setting(
key="referral_enabled",
raw_value="off",
updated_by_telegram_id=1,
)
snapshot = await service.get_snapshot()
assert snapshot.bot_brand_name == "NEW BRAND"
assert snapshot.referral_enabled is False
assert [(plan.code, plan.days, plan.amount_rub) for plan in snapshot.payment_plans] == [
("vpn_white", 30, 450),
("white", 30, 250),
("vpn", 30, 200),
]
async def test_bot_config_service_formats_values_for_admin_ui(session_factory) -> None:
service = BotConfigService(
settings=_make_settings(),
session_factory=session_factory,
)
snapshot = await service.get_snapshot()
assert BotConfigService.format_value(snapshot=snapshot, key="bot_public_username") == "@oreol_vpn_bot"
assert BotConfigService.format_value(snapshot=snapshot, key="referral_enabled") == "on"
assert BotConfigService.format_value(snapshot=snapshot, key="payment_plan_traffic_limit_gb") == "0 GB (unlimited)"
assert BotConfigService.format_value(snapshot=snapshot, key="payment_vpn_squad_uuids_raw") == "vpn-uuid"