from app.policy import ActionRequest, AutonomyLevel, Decision, Risk, evaluate_action


def test_missing_permission_is_denied():
    assert evaluate_action(ActionRequest("email.send", Risk.MEDIUM, True),
                           AutonomyLevel.AUTONOMOUS, set()) == Decision.DENY


def test_draft_agent_cannot_send():
    assert evaluate_action(ActionRequest("whatsapp.send", Risk.MEDIUM, True),
                           AutonomyLevel.DRAFT, {"whatsapp.send"}) == Decision.DRAFT_ONLY


def test_high_risk_never_bypasses_approval():
    assert evaluate_action(ActionRequest("files.share", Risk.HIGH, True),
                           AutonomyLevel.AUTONOMOUS,
                           {"files.share"}) == Decision.REQUIRE_APPROVAL


def test_controlled_autonomy_allows_permitted_medium_action():
    assert evaluate_action(ActionRequest("calendar.modify", Risk.MEDIUM, True),
                           AutonomyLevel.CONTROLLED_AUTONOMOUS,
                           {"calendar.modify"}) == Decision.ALLOW
