import pytest
from pydantic import ValidationError

from jarvis_gateway.contracts import ApprovalItem, ActionDescriptor, ActionMode, ReportKind, ReportLink, Sensitivity, DisplayPolicy


def test_report_link_requires_kind() -> None:
    link = ReportLink(
        id="report_demo",
        module_id="system",
        title="Synthetic report",
        kind=ReportKind.JSON,
        href=None,
        sensitivity="internal",
        display_policy="summary",
    )
    assert link.kind == "json"


def test_approval_status_rejects_unknown_value() -> None:
    action = ActionDescriptor(label="Blocked", href=None, mode=ActionMode.BLOCKED_IN_MVP, sensitivity=Sensitivity.INTERNAL, blocked_reason="blocked", preview_required=False, confirm_required=False, audit_required=False)
    with pytest.raises(ValidationError):
        ApprovalItem(id="a", module_id="autoshorts", title="Bad", status="maybe", severity="warning", sensitivity="internal", requested_at="2026-06-13T15:00:00Z", preview_action=action, confirm_action=action)


def test_confirm_actions_in_mock_approvals_remain_blocked() -> None:
    from jarvis_gateway.adapters.mock_autoshorts import MockAutoShortsAdapter

    snapshot = MockAutoShortsAdapter().get_snapshot()
    assert {item.status for item in snapshot.approval_items} == {"pending", "blocked"}
    assert all(item.confirm_action.mode == "blocked_in_mvp" for item in snapshot.approval_items)
