96 lines
3.3 KiB
Python
96 lines
3.3 KiB
Python
from agent_framework.runtime.agent_runtime import AgentRuntimeMixin
|
|
|
|
|
|
class Runtime(AgentRuntimeMixin):
|
|
pass
|
|
|
|
|
|
def _envelope(status: str, name: str = "invoice_explanation"):
|
|
return {
|
|
"result": {
|
|
"result": {
|
|
"status": status,
|
|
"execution_id": "exec-1",
|
|
"metadata": {
|
|
"workflow_name": name,
|
|
"workflow_execution_id": "exec-1",
|
|
"resume_tool": "retomar_workflow",
|
|
},
|
|
"pause": {"message": "Sanei sua dúvida?"} if status == "PAUSED" else None,
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
def test_workflow_pausado_ja_e_registrado_como_executado():
|
|
runtime = Runtime()
|
|
state = {}
|
|
runtime._capture_pending_domain_workflow(state, _envelope("PAUSED"))
|
|
assert state["business_workflows_executed"] == ["invoice_explanation"]
|
|
assert state["pending_domain_workflow"]["workflow_name"] == "invoice_explanation"
|
|
|
|
|
|
def test_workflow_completo_e_registrado_sem_pending():
|
|
runtime = Runtime()
|
|
state = {}
|
|
runtime._capture_pending_domain_workflow(state, _envelope("COMPLETED", "pro_rata"))
|
|
assert state["business_workflows_executed"] == ["pro_rata"]
|
|
assert state["pending_domain_workflow"] is None
|
|
|
|
|
|
def test_latch_nao_duplica_workflow():
|
|
runtime = Runtime()
|
|
state = {}
|
|
runtime._capture_pending_domain_workflow(state, _envelope("PAUSED"))
|
|
runtime._capture_pending_domain_workflow(state, _envelope("COMPLETED"))
|
|
assert state["business_workflows_executed"] == ["invoice_explanation"]
|
|
|
|
|
|
def test_transaction_state_patch_preserva_latch():
|
|
runtime = Runtime()
|
|
patch = runtime.transaction_state_patch({"business_workflows_executed": ["invoice_explanation"]})
|
|
assert patch["business_workflows_executed"] == ["invoice_explanation"]
|
|
|
|
|
|
def test_transaction_state_patch_preserva_boundary_de_soft_reset():
|
|
runtime = Runtime()
|
|
patch = runtime.transaction_state_patch({
|
|
"transaction_status": "COMPLETED",
|
|
"operational_context_boundary_pending": True,
|
|
})
|
|
assert patch["transaction_status"] == "COMPLETED"
|
|
assert patch["operational_context_boundary_pending"] is True
|
|
|
|
|
|
def test_workflow_response_final_fecha_latch_mesmo_se_adapter_retornar_paused():
|
|
runtime = Runtime()
|
|
state = {
|
|
"pending_domain_workflow": {
|
|
"execution_id": "exec-1",
|
|
"workflow_name": "invoice_explanation",
|
|
},
|
|
"transaction_status": "WORKFLOW_PAUSED",
|
|
}
|
|
envelope = {
|
|
"result": {
|
|
"result": {
|
|
"status": "PAUSED",
|
|
"execution_id": "exec-1",
|
|
"metadata": {
|
|
"workflow_name": "invoice_explanation",
|
|
"workflow_execution_id": "exec-1",
|
|
"resume_tool": "retomar_workflow",
|
|
},
|
|
"output": {
|
|
"workflow_response_final": True,
|
|
"mensagem": "Seu número de protocolo é 1234567890.",
|
|
},
|
|
"state": {"current_node": "registrar_protocolo_aceite"},
|
|
}
|
|
}
|
|
}
|
|
runtime._capture_pending_domain_workflow(state, envelope)
|
|
assert state["pending_domain_workflow"] is None
|
|
assert state["transaction_status"] == "COMPLETED"
|
|
assert state["operational_context_boundary_pending"] is True
|