from __future__ import annotations

import importlib.util
import sys
from pathlib import Path

HERE = Path(__file__).parent
SPEC = importlib.util.spec_from_file_location(
    "observer_v64_binding", HERE / "observer_v64.py"
)
assert SPEC and SPEC.loader
m = importlib.util.module_from_spec(SPEC)
sys.modules[SPEC.name] = m
SPEC.loader.exec_module(m)


def test_candidate_manifests_wheels_service_state_and_installed_module_parity() -> None:
    m.verify_binding()
    assert m.verify_profile_wheel_parity() == 44
    assert m.digest(m.DEPLOYMENT_RECEIPT) == m.DEPLOYMENT_RECEIPT_SHA256
    assert m.CANDIDATE_INVENTORY_DIGEST == "0119beeb46a15ab25a78550da4c432b4cc52e0dc816822d2688dc9009df89d90"
    assert m.digest(m.SERVICE_STATE) == m.SERVICE_STATE_SHA256
    assert m.SERVICE_STATE.stat().st_mode & 0o777 == 0o600


def test_wrapper_binds_v64_to_deployed_candidate_and_recovery() -> None:
    observer = m.load_observer()
    assert observer.SUCCESSOR == m.SUCCESSOR
    assert observer.CORE == m.CORE
    assert observer.WHEEL == m.HERMES_WHEEL
    assert observer.PROFILE_WHEEL == m.PROFILE_WHEEL
    assert observer.SITE == m.INSTALLED
