Files
cleveragents-core/robot/plan_apply_json_envelope.robot
T
HAL9000 372ef09153
CI / push-validation (pull_request) Successful in 24s
CI / helm (pull_request) Successful in 51s
CI / build (pull_request) Successful in 51s
CI / lint (pull_request) Successful in 1m8s
CI / typecheck (pull_request) Successful in 1m9s
CI / quality (pull_request) Successful in 1m9s
CI / security (pull_request) Successful in 1m26s
CI / unit_tests (pull_request) Successful in 6m21s
CI / integration_tests (pull_request) Successful in 8m34s
CI / docker (pull_request) Successful in 1m38s
CI / coverage (pull_request) Successful in 9m16s
CI / status-check (pull_request) Successful in 5s
fix(cli): add _apply_output_dict and fix robot/behave tests for plan apply JSON envelope
- Add _apply_output_dict() building the spec-required JSON envelope
- Update lifecycle_apply_plan to use _apply_output_dict for --format json
- Rewrite robot file to use Run Process + helper dispatch pattern
- Rewrite robot helper to use real LifecyclePlan domain objects
- Apply ruff format to plan_apply_json_envelope_steps.py
2026-06-14 21:07:19 -04:00

115 lines
5.9 KiB
Plaintext

*** Settings ***
Documentation Integration tests for ``plan apply --format json`` JSON envelope output.
Resource ${CURDIR}/common.resource
Suite Setup Setup Test Environment With Database Isolation
Suite Teardown Cleanup Test Environment
*** Variables ***
${HELPER} ${CURDIR}/helper_plan_apply_json_envelope.py
*** Test Cases ***
Envelope Has All Required Top-Level Fields
[Documentation] Verify that the plan apply JSON envelope contains all required top-level keys.
${result}= Run Process ${PYTHON} ${HELPER} verify_top_level_fields cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Envelope Command Is Plan Apply
[Documentation] Verify command field equals "plan apply".
${result}= Run Process ${PYTHON} ${HELPER} verify_command_field cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Envelope Status Is Ok
[Documentation] Verify status field equals "ok".
${result}= Run Process ${PYTHON} ${HELPER} verify_status_field cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Envelope Exit Code Is Zero
[Documentation] Verify exit_code is 0.
${result}= Run Process ${PYTHON} ${HELPER} verify_exit_code cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Messages Is Non-Empty List
[Documentation] Verify messages field is a non-empty list.
${result}= Run Process ${PYTHON} ${HELPER} verify_messages_non_empty cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Data Contains All Required Sub-Fields
[Documentation] Verify the data field contains artifacts, changes, project, applied_at, validation, sandbox_cleanup, and lifecycle.
${result}= Run Process ${PYTHON} ${HELPER} verify_data_sub_fields cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Validation Contains Test Lint Type Check
[Documentation] Verify data.validation contains test, lint, and type_check fields.
${result}= Run Process ${PYTHON} ${HELPER} verify_validation_sub_fields cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Lifecycle Contains Required Sub-Fields
[Documentation] Verify data.lifecycle contains phase, state, total_duration, total_cost, decisions_made, child_plans.
${result}= Run Process ${PYTHON} ${HELPER} verify_lifecycle_sub_fields cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Sandbox Cleanup Contains Worktree Branch Checkpoint
[Documentation] Verify data.sandbox_cleanup contains worktree, branch, and checkpoint.
${result}= Run Process ${PYTHON} ${HELPER} verify_sandbox_cleanup_sub_fields cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Terminal Plan Sandbox Cleanup Is Removed Merged Archived
[Documentation] Verify sandbox_cleanup shows removed/merged/archived for terminal apply plans.
${result}= Run Process ${PYTHON} ${HELPER} verify_terminal_sandbox_cleanup cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
NonTerminal Plan Sandbox Cleanup Is Active Open Pending
[Documentation] Verify sandbox_cleanup shows active/open/pending for non-terminal apply plans.
${result}= Run Process ${PYTHON} ${HELPER} verify_non_terminal_sandbox_cleanup cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Legacy Plan Fallback Works
[Documentation] Verify _apply_output_dict handles non-Plan objects gracefully.
${result}= Run Process ${PYTHON} ${HELPER} verify_legacy_fallback cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Cost Metadata Reflected In Lifecycle Total Cost
[Documentation] Verify total_cost reflects plan cost_metadata when present.
${result}= Run Process ${PYTHON} ${HELPER} verify_cost_metadata cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Plan Status Does Not Use Apply Envelope
[Documentation] Verify plan status --format json does NOT emit the apply envelope command field.
${result}= Run Process ${PYTHON} ${HELPER} verify_status_no_apply_envelope cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0
Plan Cancel Does Not Use Apply Envelope
[Documentation] Verify plan cancel --format json does NOT emit the apply envelope command field.
${result}= Run Process ${PYTHON} ${HELPER} verify_cancel_no_apply_envelope cwd=${WORKSPACE} timeout=180s on_timeout=kill
Log ${result.stdout}
Log ${result.stderr}
Should Be Equal As Integers ${result.rc} 0