from __future__ import annotations

from scripts.verify_nutricoach_v150_candidate import verify_capabilities
from scripts.verify_nutricoach_v140_candidate_core import (
    CandidateContractError,
    JsonValue,
)


def test_capabilities_accept_compiled_default_off_contract() -> None:
    verify_capabilities({
        "capabilities": {
            "nutricoach_channel_inbox_v1": {
                "compiled": True,
                "configured": False,
                "authorized": False,
            },
            "nutricoach_multi_customer_v1": {
                "compiled": True,
                "configured": False,
                "authorized": False,
                "authorized_capacity": 0,
                "post_migration_capacity": 5,
            },
        }
    })


def test_capabilities_reject_premature_enablement() -> None:
    manifest: dict[str, JsonValue] = {
        "capabilities": {
            "nutricoach_channel_inbox_v1": {
                "compiled": True,
                "configured": True,
                "authorized": False,
            },
            "nutricoach_multi_customer_v1": {
                "compiled": True,
                "configured": False,
                "authorized": False,
                "authorized_capacity": 0,
                "post_migration_capacity": 5,
            },
        }
    }
    try:
        verify_capabilities(manifest)
    except CandidateContractError as error:
        assert "default-OFF" in str(error)
    else:
        raise AssertionError("premature capability enablement was accepted")
