"""Проверяем, что PaymentService собирается из mixin-классов.""" import sys from pathlib import Path import pytest ROOT_DIR = Path(__file__).resolve().parents[2] if str(ROOT_DIR) not in sys.path: sys.path.insert(0, str(ROOT_DIR)) from app.services.payment import ( CryptoBotPaymentMixin, HeleketPaymentMixin, MulenPayPaymentMixin, Pal24PaymentMixin, PaymentCommonMixin, TelegramStarsMixin, TributePaymentMixin, WataPaymentMixin, YooKassaPaymentMixin, ) from app.services.payment_service import PaymentService def test_payment_service_mro_contains_all_mixins() -> None: """Убеждаемся, что сервис действительно включает все mixin-классы.""" mixins = { PaymentCommonMixin, TelegramStarsMixin, YooKassaPaymentMixin, TributePaymentMixin, CryptoBotPaymentMixin, HeleketPaymentMixin, MulenPayPaymentMixin, Pal24PaymentMixin, WataPaymentMixin, } service_mro = set(PaymentService.__mro__) assert mixins.issubset(service_mro), 'PaymentService должен содержать все mixin-классы' @pytest.mark.parametrize( 'attribute', [ 'build_topup_success_keyboard', 'create_stars_invoice', 'create_yookassa_payment', 'create_tribute_payment', 'create_cryptobot_payment', 'create_heleket_payment', 'create_mulenpay_payment', 'create_pal24_payment', 'create_wata_payment', ], ) def test_payment_service_exposes_provider_methods(attribute: str) -> None: """Каждый mixin обязан добавить публичный метод в PaymentService.""" assert hasattr(PaymentService, attribute), f'Отсутствует метод {attribute}'