138 lines
4.9 KiB
Python
138 lines
4.9 KiB
Python
import json
|
|
from pathlib import Path
|
|
|
|
from bot.app.web.admin_settings_manifest import manifest_payload
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
SUPPORT_RELATED_SETTINGS = (
|
|
"LOG_SUPPORT_THREAD_ID",
|
|
"SUPPORT_TICKETS_ENABLED",
|
|
"SUPPORT_ADMIN_EMAIL_NOTIFICATIONS_ENABLED",
|
|
"SUPPORT_ADMIN_NOTIFICATION_COOLDOWN_SECONDS",
|
|
"SUPPORT_ADMIN_EMAIL_COOLDOWN_SECONDS",
|
|
"SUPPORT_TICKET_MAX_BODY_LENGTH",
|
|
"SUPPORT_TICKET_MAX_SUBJECT_LENGTH",
|
|
"SUPPORT_TICKET_RATE_LIMIT_PER_HOUR",
|
|
)
|
|
|
|
SUBSCRIPTION_PURCHASE_DESCRIPTION_SETTINGS = (
|
|
"SUBSCRIPTION_PURCHASE_DESCRIPTION_ENABLED",
|
|
"SUBSCRIPTION_PURCHASE_DESCRIPTION_RU",
|
|
"SUBSCRIPTION_PURCHASE_DESCRIPTION_EN",
|
|
)
|
|
|
|
SUBSCRIPTION_GUIDE_SETTINGS = (
|
|
"SUBSCRIPTION_GUIDES_ENABLED",
|
|
"SUBSCRIPTION_GUIDES_BOT_MENU_ENABLED",
|
|
"SUBSCRIPTION_PAGE_CONFIG_PANEL_ENABLED",
|
|
"SUBSCRIPTION_PAGE_CONFIG_JSON_OVERRIDE_ENABLED",
|
|
"SUBSCRIPTION_PAGE_CONFIG_PATH",
|
|
"SUBSCRIPTION_PAGE_CONFIG_JSON",
|
|
)
|
|
|
|
|
|
def _manifest_by_key() -> dict[str, dict]:
|
|
return {item["key"]: item for item in manifest_payload()}
|
|
|
|
|
|
def _manifest_items() -> list[dict]:
|
|
return manifest_payload()
|
|
|
|
|
|
def _locale(language: str) -> dict[str, str]:
|
|
return json.loads((REPO_ROOT / "locales" / f"{language}.json").read_text(encoding="utf-8"))
|
|
|
|
|
|
def test_support_settings_manifest_uses_admin_i18n_keys():
|
|
manifest = _manifest_by_key()
|
|
|
|
assert manifest["SUPPORT_TICKETS_ENABLED"]["section"] == "support"
|
|
assert manifest["SUPPORT_TICKETS_ENABLED"]["section_order"] == 8
|
|
|
|
for setting_key in SUPPORT_RELATED_SETTINGS:
|
|
field = manifest[setting_key]
|
|
prefix = f"admin_settings_field_{setting_key.lower()}"
|
|
|
|
assert field["i18n_label_key"] == f"{prefix}_label"
|
|
assert field["i18n_description_key"] == f"{prefix}_description"
|
|
|
|
|
|
def test_support_settings_i18n_keys_exist_in_admin_locales():
|
|
manifest = _manifest_by_key()
|
|
|
|
for language in ("ru", "en"):
|
|
messages = _locale(language)
|
|
|
|
assert "admin_settings_section_support" in messages
|
|
for setting_key in SUPPORT_RELATED_SETTINGS:
|
|
field = manifest[setting_key]
|
|
assert field["i18n_label_key"] in messages
|
|
assert field["i18n_description_key"] in messages
|
|
|
|
|
|
def test_subscription_purchase_description_settings_i18n_keys_exist():
|
|
manifest = _manifest_by_key()
|
|
|
|
for language in ("ru", "en"):
|
|
messages = _locale(language)
|
|
for setting_key in SUBSCRIPTION_PURCHASE_DESCRIPTION_SETTINGS:
|
|
field = manifest[setting_key]
|
|
assert field["section"] == "payments"
|
|
assert field["subsection"] == "checkout"
|
|
assert field["i18n_label_key"] in messages
|
|
assert field["i18n_description_key"] in messages
|
|
|
|
|
|
def test_subscription_guide_settings_i18n_keys_exist():
|
|
manifest = _manifest_by_key()
|
|
|
|
assert manifest["SUBSCRIPTION_GUIDES_ENABLED"]["section"] == "subscription_guides"
|
|
assert manifest["SUBSCRIPTION_GUIDES_ENABLED"]["section_order"] == 10
|
|
assert manifest["SUBSCRIPTION_PAGE_CONFIG_JSON"]["type"] == "json"
|
|
|
|
for language in ("ru", "en"):
|
|
messages = _locale(language)
|
|
|
|
assert "admin_settings_section_subscription_guides" in messages
|
|
for setting_key in SUBSCRIPTION_GUIDE_SETTINGS:
|
|
field = manifest[setting_key]
|
|
assert field["i18n_label_key"] in messages
|
|
assert field["i18n_description_key"] in messages
|
|
|
|
|
|
def test_payment_provider_settings_include_webhook_metadata():
|
|
manifest = _manifest_by_key()
|
|
|
|
assert manifest["FREEKASSA_ENABLED"]["webhook_path"] == "/webhook/freekassa"
|
|
assert manifest["FREEKASSA_ENABLED"]["provider_id"] == "freekassa"
|
|
assert manifest["PAYMENT_PLATEGA_CRYPTO_WEBAPP_LABEL_RU"]["webhook_path"] == "/webhook/platega"
|
|
assert manifest["YOOKASSA_SHOP_ID"]["webhook_requires_base_url"] is True
|
|
assert "webhook_path" not in manifest["PAYMENT_STARS_WEBAPP_LABEL_RU"]
|
|
|
|
|
|
def test_legacy_tariff_settings_are_separated_from_payment_settings():
|
|
manifest = _manifest_by_key()
|
|
payment_method_fields = [
|
|
item for item in _manifest_items() if item["key"] == "PAYMENT_METHODS_ORDER"
|
|
]
|
|
|
|
assert len(payment_method_fields) == 1
|
|
assert payment_method_fields[0]["section"] == "payments"
|
|
assert manifest["MONTH_1_ENABLED"]["section"] == "pricing"
|
|
assert manifest["MONTH_1_ENABLED"]["section_order"] == 11
|
|
assert manifest["TRIAL_ENABLED"]["section"] == "pricing"
|
|
assert manifest["TRIAL_ENABLED"]["subsection"] == "trial"
|
|
assert manifest["TRIAL_SQUAD_UUIDS"]["section"] == "pricing"
|
|
assert manifest["TRIAL_SQUAD_UUIDS"]["subsection"] == "trial"
|
|
|
|
|
|
def test_platega_settings_share_one_admin_subsection():
|
|
manifest = _manifest_by_key()
|
|
platega_keys = [
|
|
key for key in manifest if key.startswith("PLATEGA_") or key.startswith("PAYMENT_PLATEGA_")
|
|
]
|
|
|
|
assert platega_keys
|
|
assert {manifest[key]["subsection"] for key in platega_keys} == {"Platega"}
|