"""Portal and tax bindings stay off provider connector targets."""

from pathlib import Path

import pytest
import yaml
from src.domain.app_blocks.errors import InvalidAppBlockManifestError
from src.domain.app_blocks.validation import validate_manifest

MANIFESTS = Path(__file__).resolve().parents[1] / "src" / "domain" / "app_blocks" / "manifests"


def _load(name: str) -> dict:
    return yaml.safe_load((MANIFESTS / name).read_text(encoding="utf-8"))


def test_billing_portal_and_tax_have_no_provider_connector_targets():
    portal = validate_manifest(_load("billing.portal.v1.yaml"))
    tax = validate_manifest(_load("billing.tax.v1.yaml"))
    targets = {binding.target for binding in [*portal.bindings, *tax.bindings]}
    assert "pack:billing-portal" in targets
    assert "pack:tax-calculation" in targets
    assert "capability:billing.tax_calculation" in targets
    assert not any(target.startswith("connector:") for target in targets)


def test_protected_provider_connector_target_is_rejected():
    data = _load("billing.portal.v1.yaml")
    data["bindings"][0]["target"] = "connector:stripe.create_billing_portal_session"
    with pytest.raises(InvalidAppBlockManifestError, match="provider connector"):
        validate_manifest(data)
