refactor: move yookassa env-config into module

This commit is contained in:
3252a8
2026-05-18 20:46:54 +03:00
parent e0269bbf86
commit 7be5510208
7 changed files with 230 additions and 243 deletions
+10 -1
View File
@@ -393,12 +393,21 @@ class AdminSettingsSecurityTests(unittest.IsolatedAsyncioTestCase):
async def __aexit__(self, exc_type, exc, tb):
return False
from bot.payment_providers import (
build_provider_configs,
get_provider_bundle,
)
build_provider_configs()
bundle = get_provider_bundle("yookassa_service")
if bundle and bundle.config is not None:
bundle.config.SECRET_KEY = "super-secret"
settings = Settings(
_env_file=None,
BOT_TOKEN="token",
POSTGRES_USER="app_user",
POSTGRES_PASSWORD="app_password",
YOOKASSA_SECRET_KEY="super-secret",
SHOP_NAME="Visible shop",
)
request = SimpleNamespace(
+31 -18
View File
@@ -153,25 +153,38 @@ class SettingsTests(unittest.TestCase):
self.assertEqual(settings.TRIAL_TRAFFIC_STRATEGY, "WEEK")
def test_payment_button_presentation_env_values_are_available(self):
settings = Settings(
_env_file=None,
BOT_TOKEN="token",
POSTGRES_USER="app_user",
POSTGRES_PASSWORD="app_password",
PAYMENT_YOOKASSA_WEBAPP_LABEL_RU="Карта",
PAYMENT_YOOKASSA_WEBAPP_LABEL_EN="Card",
PAYMENT_YOOKASSA_WEBAPP_ICON="CreditCard",
PAYMENT_YOOKASSA_TELEGRAM_LABEL_RU="Банковская карта",
PAYMENT_YOOKASSA_TELEGRAM_LABEL_EN="Bank card",
PAYMENT_YOOKASSA_TELEGRAM_EMOJI="💳",
)
"""Presentation overrides now live on each provider's BaseSettings
model instead of the central Settings — verify they're loaded from
env and exposed via the provider bundle."""
import os
from bot.payment_providers import build_provider_configs, get_spec_presentation
self.assertEqual(settings.PAYMENT_YOOKASSA_WEBAPP_LABEL_RU, "Карта")
self.assertEqual(settings.PAYMENT_YOOKASSA_WEBAPP_LABEL_EN, "Card")
self.assertEqual(settings.PAYMENT_YOOKASSA_WEBAPP_ICON, "CreditCard")
self.assertEqual(settings.PAYMENT_YOOKASSA_TELEGRAM_LABEL_RU, "Банковская карта")
self.assertEqual(settings.PAYMENT_YOOKASSA_TELEGRAM_LABEL_EN, "Bank card")
self.assertEqual(settings.PAYMENT_YOOKASSA_TELEGRAM_EMOJI, "💳")
os.environ["PAYMENT_YOOKASSA_WEBAPP_LABEL_RU"] = "Карта"
os.environ["PAYMENT_YOOKASSA_WEBAPP_LABEL_EN"] = "Card"
os.environ["PAYMENT_YOOKASSA_WEBAPP_ICON"] = "CreditCard"
os.environ["PAYMENT_YOOKASSA_TELEGRAM_LABEL_RU"] = "Банковская карта"
os.environ["PAYMENT_YOOKASSA_TELEGRAM_LABEL_EN"] = "Bank card"
os.environ["PAYMENT_YOOKASSA_TELEGRAM_EMOJI"] = "💳"
try:
build_provider_configs()
presentation = get_spec_presentation("yookassa")
self.assertIsNotNone(presentation)
self.assertEqual(presentation.WEBAPP_LABEL_RU, "Карта")
self.assertEqual(presentation.WEBAPP_LABEL_EN, "Card")
self.assertEqual(presentation.WEBAPP_ICON, "CreditCard")
self.assertEqual(presentation.TELEGRAM_LABEL_RU, "Банковская карта")
self.assertEqual(presentation.TELEGRAM_LABEL_EN, "Bank card")
self.assertEqual(presentation.TELEGRAM_EMOJI, "💳")
finally:
for key in (
"PAYMENT_YOOKASSA_WEBAPP_LABEL_RU",
"PAYMENT_YOOKASSA_WEBAPP_LABEL_EN",
"PAYMENT_YOOKASSA_WEBAPP_ICON",
"PAYMENT_YOOKASSA_TELEGRAM_LABEL_RU",
"PAYMENT_YOOKASSA_TELEGRAM_LABEL_EN",
"PAYMENT_YOOKASSA_TELEGRAM_EMOJI",
):
os.environ.pop(key, None)
def test_tariff_warning_levels_are_parsed(self):
settings = Settings(
+16 -4
View File
@@ -371,6 +371,22 @@ class WebAppAssetTests(unittest.IsolatedAsyncioTestCase):
self.assertEqual(methods, [])
def test_serialize_payment_methods_includes_provider_presentation(self):
from bot.payment_providers import (
build_provider_configs,
get_provider_bundle,
get_spec_presentation,
)
build_provider_configs()
bundle = get_provider_bundle("yookassa_service")
if bundle and bundle.config is not None:
bundle.config.ENABLED = True
presentation = get_spec_presentation("yookassa")
if presentation is not None:
presentation.WEBAPP_LABEL_RU = "Карта"
presentation.WEBAPP_LABEL_EN = "Bank card"
presentation.WEBAPP_ICON = "WalletCards"
settings = Settings(
_env_file=None,
BOT_TOKEN="token",
@@ -378,10 +394,6 @@ class WebAppAssetTests(unittest.IsolatedAsyncioTestCase):
POSTGRES_PASSWORD="app_password",
TARIFFS_CONFIG_PATH="missing-tariffs.json",
PAYMENT_METHODS_ORDER="yookassa",
YOOKASSA_ENABLED=True,
PAYMENT_YOOKASSA_WEBAPP_LABEL_RU="Карта",
PAYMENT_YOOKASSA_WEBAPP_LABEL_EN="Bank card",
PAYMENT_YOOKASSA_WEBAPP_ICON="WalletCards",
)
app = {"yookassa_service": SimpleNamespace(configured=True)}