@@ -13,7 +13,7 @@ from app.adapters.delivery_providers.cdek.client import (
|
||||
)
|
||||
from app.cities import cities_map
|
||||
from app import config as config_module
|
||||
from app.config import AdapterConfig, Settings
|
||||
from app.config import CDEKDeliveryProviderConfig, Settings
|
||||
from app.schemas.request import DeliveryCalculationRequest, DeliveryEntity
|
||||
|
||||
|
||||
@@ -287,14 +287,17 @@ repository:
|
||||
redis_dsn: "redis://localhost:6379/0"
|
||||
price_cache_ttl_seconds: 900
|
||||
|
||||
adapter:
|
||||
cdek_base_url: "https://api.cdek.test/v2"
|
||||
cdek_client_id: "yaml-id"
|
||||
cdek_client_secret: "yaml-secret"
|
||||
cdek_retry_attempts: 0
|
||||
cdek_retry_backoff_seconds: 0.1
|
||||
cdek_timeout_seconds: 7.5
|
||||
cdek_cache_ttl_seconds: 777
|
||||
delivery_providers:
|
||||
cdek:
|
||||
base_url: "https://api.cdek.test/v2"
|
||||
client_id: "yaml-id"
|
||||
client_secret: "yaml-secret"
|
||||
retry_attempts: 0
|
||||
retry_backoff_seconds: 0.1
|
||||
timeout_seconds: 7.5
|
||||
cache_ttl_seconds: 777
|
||||
cse:
|
||||
enabled: false
|
||||
|
||||
tbank_payment:
|
||||
init_url: "https://securepay.tinkoff.ru/v2/Init"
|
||||
@@ -323,9 +326,9 @@ email:
|
||||
monkeypatch.setattr(config_module, "_resolve_runtime_config_file", lambda: str(config_file))
|
||||
settings = Settings()
|
||||
http_client = RecordingHTTPClient()
|
||||
provider = CDEKProvider.from_adapter_config(
|
||||
provider = CDEKProvider.from_config(
|
||||
http_client=http_client, # type: ignore[arg-type]
|
||||
adapter_config=settings.adapter,
|
||||
config=settings.delivery_providers.cdek,
|
||||
)
|
||||
|
||||
result = asyncio.run(provider.get_prices(_make_request()))
|
||||
@@ -349,14 +352,14 @@ email:
|
||||
|
||||
|
||||
def test_provider_uses_default_adapter_timeout_and_cache_ttl() -> None:
|
||||
adapter_config = AdapterConfig(
|
||||
cdek_client_id="default-id",
|
||||
cdek_client_secret="default-secret",
|
||||
config = CDEKDeliveryProviderConfig(
|
||||
client_id="default-id",
|
||||
client_secret="default-secret",
|
||||
)
|
||||
http_client = RecordingHTTPClient()
|
||||
provider = CDEKProvider.from_adapter_config(
|
||||
provider = CDEKProvider.from_config(
|
||||
http_client=http_client, # type: ignore[arg-type]
|
||||
adapter_config=adapter_config,
|
||||
config=config,
|
||||
)
|
||||
|
||||
result = asyncio.run(provider.get_prices(_make_request()))
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
import asyncio
|
||||
|
||||
import httpx
|
||||
|
||||
from app.adapters.delivery_providers.registry import (
|
||||
build_delivery_provider_registry,
|
||||
resolve_delivery_provider_timeout_seconds,
|
||||
)
|
||||
from app.config import (
|
||||
CDEKDeliveryProviderConfig,
|
||||
CSEDeliveryProviderConfig,
|
||||
DeliveryProvidersConfig,
|
||||
)
|
||||
|
||||
|
||||
def test_registry_builds_enabled_provider_capability_maps() -> None:
|
||||
config = DeliveryProvidersConfig(
|
||||
cdek=CDEKDeliveryProviderConfig(
|
||||
base_url="https://cdek.test/v2",
|
||||
client_id="id",
|
||||
client_secret="secret",
|
||||
cache_ttl_seconds=111,
|
||||
),
|
||||
cse=CSEDeliveryProviderConfig(
|
||||
enabled=False,
|
||||
),
|
||||
)
|
||||
|
||||
http_client = httpx.AsyncClient()
|
||||
try:
|
||||
registry = build_delivery_provider_registry(
|
||||
http_client=http_client,
|
||||
config=config,
|
||||
)
|
||||
finally:
|
||||
asyncio.run(http_client.aclose())
|
||||
|
||||
assert [provider.name for provider in registry.providers] == ["cdek"]
|
||||
assert sorted(registry.payment_price_validation_adapters) == ["cdek"]
|
||||
assert sorted(registry.order_registration_adapters) == ["cdek"]
|
||||
assert registry.providers[0].cache_ttl_seconds == 111
|
||||
|
||||
|
||||
def test_resolve_delivery_provider_timeout_uses_max_enabled_timeout() -> None:
|
||||
config = DeliveryProvidersConfig(
|
||||
cdek=CDEKDeliveryProviderConfig(timeout_seconds=3.0),
|
||||
cse=CSEDeliveryProviderConfig(timeout_seconds=7.5),
|
||||
)
|
||||
|
||||
assert resolve_delivery_provider_timeout_seconds(config) == 7.5
|
||||
Reference in New Issue
Block a user