petter2025's picture
Upload folder using huggingface_hub
4853fb2 verified
Raw
History Blame
3.85 kB
"""
Tests for governance endpoints: /api/v1/intents/evaluate
"""
import pytest
from app.database.models_intents import TenantDB
@pytest.fixture(autouse=True)
def seed_tenant(db_session):
"""Ensure the tenant 'test-tenant' exists before each test."""
tenant = db_session.query(TenantDB).filter_by(id="test-tenant").first()
if not tenant:
db_session.add(TenantDB(id="test-tenant", name="Test Tenant"))
db_session.commit()
def test_evaluate_provision_intent(client):
payload = {
"intent_type": "provision_resource",
"environment": "prod",
"resource_type": "database",
"region": "eastus",
"size": "Standard",
"estimated_cost": 1200,
"policy_violations": [],
"requester": "alice",
"provenance": {},
"configuration": {}
}
response = client.post("/api/v1/intents/evaluate", json=payload,
headers={"X-Tenant-ID": "test-tenant"})
assert response.status_code == 200, response.text
data = response.json()
assert "risk_score" in data
def test_evaluate_grant_access(client):
payload = {
"intent_type": "grant_access",
"environment": "dev",
"principal": "bob",
"permission_level": "read",
"resource_scope": "/subscriptions/123",
"estimated_cost": None,
"policy_violations": [],
"requester": "alice",
"provenance": {},
"justification": "test"
}
response = client.post("/api/v1/intents/evaluate", json=payload,
headers={"X-Tenant-ID": "test-tenant"})
assert response.status_code == 200, response.text
data = response.json()
assert "risk_score" in data
def test_evaluate_deploy_config(client):
payload = {
"intent_type": "deploy_config",
"environment": "staging",
"service_name": "payments-api",
"change_scope": "canary",
"deployment_target": "staging",
"estimated_cost": 20,
"policy_violations": [],
"requester": "alice",
"provenance": {},
"configuration": {}
}
response = client.post("/api/v1/intents/evaluate", json=payload,
headers={"X-Tenant-ID": "test-tenant"})
assert response.status_code == 200, response.text
data = response.json()
assert "risk_score" in data
def test_invalid_intent_type(client):
payload = {
"intent_type": "UnknownIntent",
"environment": "prod",
"requester": "alice",
"provenance": {}
}
response = client.post("/api/v1/intents/evaluate", json=payload,
headers={"X-Tenant-ID": "test-tenant"})
assert response.status_code == 422
def test_evaluate_with_criticality(client):
"""v4.3.2: criticality is accepted and a context_hash is generated."""
payload = {
"intent_type": "provision_resource",
"environment": "prod",
"resource_type": "database",
"region": "eastus",
"size": "Standard",
"estimated_cost": 1200,
"policy_violations": [],
"requester": "alice",
"provenance": {},
"configuration": {},
"criticality": 0.85
}
response = client.post("/api/v1/intents/evaluate", json=payload,
headers={"X-Tenant-ID": "test-tenant"})
assert response.status_code == 200, response.text
data = response.json()
assert "risk_score" in data
# The healing_intent dict should contain the new fields.
healing = data.get("healing_intent", {})
# criticality is passed through
assert healing.get("criticality") == 0.85
# context_hash is computed by the governance loop (a 64‑char hex string)
ctx_hash = healing.get("context_hash")
assert isinstance(ctx_hash, str) and len(ctx_hash) == 64