30f8e08f7e
CI / lint (push) Failing after 16s
CI / typecheck (push) Successful in 24s
CI / coverage (push) Has been skipped
CI / security (push) Successful in 16s
CI / quality (push) Successful in 14s
CI / build (push) Successful in 13s
CI / behave (3.13) (push) Failing after 4m24s
CI / docker (push) Has been skipped
257 lines
12 KiB
Gherkin
257 lines
12 KiB
Gherkin
Feature: Plan V3 Lifecycle Commands and Streaming Coverage
|
|
As a developer
|
|
I want to test V3 lifecycle commands and streaming in plan.py
|
|
So that previously uncovered lines/branches have test coverage
|
|
|
|
# ===================================================================
|
|
# V3 Lifecycle - use_action command
|
|
# ===================================================================
|
|
|
|
Scenario: Use action creates a plan from an available action with string arguments
|
|
Given I have a temporary test directory
|
|
When I invoke use_action with string argument "target_coverage=80"
|
|
Then the use_action CLI should succeed
|
|
And the lifecycle plan panel should be printed
|
|
|
|
Scenario: Use action parses integer and float argument values correctly
|
|
Given I have a temporary test directory
|
|
When I invoke use_action with args "count=42" and "ratio=3.14"
|
|
Then the use_action CLI should succeed
|
|
And the parsed arguments should contain integer 42 and float 3.14
|
|
|
|
Scenario: Use action parses boolean argument values correctly
|
|
Given I have a temporary test directory
|
|
When I invoke use_action with args "verbose=true" and "dry_run=false"
|
|
Then the use_action CLI should succeed
|
|
And the parsed arguments should contain booleans true and false
|
|
|
|
Scenario: Use action rejects invalid argument format without equals sign
|
|
Given I have a temporary test directory
|
|
When I invoke use_action with malformed argument "badarg"
|
|
Then the use_action CLI should abort
|
|
And the output should mention invalid argument format
|
|
|
|
Scenario: Use action falls back to action name lookup when ID not found
|
|
Given I have a temporary test directory
|
|
When I invoke use_action where get_action raises NotFoundError
|
|
Then the use_action CLI should succeed via name fallback
|
|
|
|
Scenario: Use action parses custom automation level
|
|
Given I have a temporary test directory
|
|
When I invoke use_action with automation level "full_automation"
|
|
Then the use_action CLI should succeed
|
|
And the lifecycle service should receive full_automation level
|
|
|
|
Scenario: Use action rejects invalid automation level
|
|
Given I have a temporary test directory
|
|
When I invoke use_action with automation level "super_auto"
|
|
Then the use_action CLI should abort
|
|
And the output should mention invalid automation level
|
|
|
|
Scenario: Use action reports error when action is not available
|
|
Given I have a temporary test directory
|
|
When I invoke use_action and ActionNotAvailableError is raised
|
|
Then the use_action CLI should abort
|
|
And the output should mention action not available
|
|
|
|
Scenario: Use action handles validation errors gracefully
|
|
Given I have a temporary test directory
|
|
When I invoke use_action and ValidationError is raised
|
|
Then the use_action CLI should abort with lifecycle validation error
|
|
|
|
Scenario: Use action handles general CleverAgents errors
|
|
Given I have a temporary test directory
|
|
When I invoke use_action and CleverAgentsError is raised
|
|
Then the use_action CLI should abort with lifecycle general error
|
|
|
|
# ===================================================================
|
|
# V3 Lifecycle - execute_plan command
|
|
# ===================================================================
|
|
|
|
Scenario: Execute plan transitions a strategize-complete plan to execute phase
|
|
Given I have a temporary test directory
|
|
When I invoke execute_plan with a valid plan ID
|
|
Then the execute_plan CLI should succeed
|
|
And the execute phase panel should be printed
|
|
|
|
Scenario: Execute plan auto-selects the only strategize-complete plan when no ID given
|
|
Given I have a temporary test directory
|
|
When I invoke execute_plan without ID and one strategize-complete plan exists
|
|
Then the execute_plan CLI should succeed
|
|
|
|
Scenario: Execute plan aborts when no plans are ready for execution
|
|
Given I have a temporary test directory
|
|
When I invoke execute_plan without ID and no strategize-complete plans exist
|
|
Then the execute_plan CLI should abort
|
|
And the output should mention no plans ready for execution
|
|
|
|
Scenario: Execute plan aborts when multiple plans are ready and no ID given
|
|
Given I have a temporary test directory
|
|
When I invoke execute_plan without ID and multiple strategize-complete plans exist
|
|
Then the execute_plan CLI should abort
|
|
And the output should mention multiple plans ready
|
|
|
|
Scenario: Execute plan reports invalid phase transition error
|
|
Given I have a temporary test directory
|
|
When I invoke execute_plan and InvalidPhaseTransitionError is raised
|
|
Then the execute_plan CLI should abort
|
|
And the output should mention invalid transition
|
|
|
|
Scenario: Execute plan reports plan not ready error
|
|
Given I have a temporary test directory
|
|
When I invoke execute_plan and PlanNotReadyError is raised
|
|
Then the execute_plan CLI should abort
|
|
And the output should mention plan not ready
|
|
|
|
# ===================================================================
|
|
# V3 Lifecycle - lifecycle_apply_plan command
|
|
# ===================================================================
|
|
|
|
Scenario: Lifecycle apply transitions an execute-complete plan to apply phase
|
|
Given I have a temporary test directory
|
|
When I invoke lifecycle-apply with a valid plan ID
|
|
Then the lifecycle-apply CLI should succeed
|
|
And the apply phase panel should be printed
|
|
|
|
Scenario: Lifecycle apply auto-selects the only execute-complete plan
|
|
Given I have a temporary test directory
|
|
When I invoke lifecycle-apply without ID and one execute-complete plan exists
|
|
Then the lifecycle-apply CLI should succeed
|
|
|
|
Scenario: Lifecycle apply aborts when no plans are ready for apply
|
|
Given I have a temporary test directory
|
|
When I invoke lifecycle-apply without ID and no execute-complete plans exist
|
|
Then the lifecycle-apply CLI should abort
|
|
And the output should mention no plans ready for apply
|
|
|
|
Scenario: Lifecycle apply aborts when multiple plans are ready and no ID given
|
|
Given I have a temporary test directory
|
|
When I invoke lifecycle-apply without ID and multiple execute-complete plans exist
|
|
Then the lifecycle-apply CLI should abort
|
|
And the output should mention multiple plans ready for apply
|
|
|
|
# ===================================================================
|
|
# V3 Lifecycle - plan_status command
|
|
# ===================================================================
|
|
|
|
Scenario: Plan status shows details for a specific plan ID
|
|
Given I have a temporary test directory
|
|
When I invoke plan status with a specific plan ID
|
|
Then the plan status CLI should succeed
|
|
And the plan status panel should be displayed
|
|
|
|
Scenario: Plan status lists all active plans when no ID given
|
|
Given I have a temporary test directory
|
|
When I invoke plan status without ID and active plans exist
|
|
Then the plan status CLI should succeed
|
|
And the active plans table should be displayed
|
|
|
|
Scenario: Plan status shows no plans message when empty
|
|
Given I have a temporary test directory
|
|
When I invoke plan status without ID and no plans exist
|
|
Then the plan status CLI should succeed with no plans message
|
|
|
|
# ===================================================================
|
|
# V3 Lifecycle - lifecycle_list_plans command
|
|
# ===================================================================
|
|
|
|
Scenario: Lifecycle list shows all plans without filters
|
|
Given I have a temporary test directory
|
|
When I invoke lifecycle-list without filters
|
|
Then the lifecycle-list CLI should succeed
|
|
And the lifecycle plans table should be displayed
|
|
|
|
Scenario: Lifecycle list filters plans by phase
|
|
Given I have a temporary test directory
|
|
When I invoke lifecycle-list with phase filter "strategize"
|
|
Then the lifecycle-list CLI should succeed
|
|
|
|
Scenario: Lifecycle list rejects invalid phase filter
|
|
Given I have a temporary test directory
|
|
When I invoke lifecycle-list with phase filter "bogus_phase"
|
|
Then the lifecycle-list CLI should abort
|
|
And the output should mention invalid phase
|
|
|
|
Scenario: Lifecycle list shows no plans message when empty
|
|
Given I have a temporary test directory
|
|
When I invoke lifecycle-list and no plans match
|
|
Then the lifecycle-list CLI should succeed with empty list message
|
|
|
|
# ===================================================================
|
|
# V3 Lifecycle - set_automation_level command
|
|
# ===================================================================
|
|
|
|
Scenario: Set automation level updates plan to full_automation
|
|
Given I have a temporary test directory
|
|
When I invoke set-automation-level with level "full_automation"
|
|
Then the set-automation-level CLI should succeed
|
|
And the output should confirm automation level change
|
|
|
|
Scenario: Set automation level rejects invalid level string
|
|
Given I have a temporary test directory
|
|
When I invoke set-automation-level with level "turbo_mode"
|
|
Then the set-automation-level CLI should abort
|
|
And the output should mention invalid automation level for set command
|
|
|
|
Scenario: Set automation level handles plan errors
|
|
Given I have a temporary test directory
|
|
When I invoke set-automation-level and PlanError is raised
|
|
Then the set-automation-level CLI should abort
|
|
And the output should mention cannot change level
|
|
|
|
# ===================================================================
|
|
# V3 Lifecycle - cancel_plan command
|
|
# ===================================================================
|
|
|
|
Scenario: Cancel plan cancels a plan with a reason
|
|
Given I have a temporary test directory
|
|
When I invoke cancel with a reason "no longer needed"
|
|
Then the cancel CLI should succeed
|
|
And the output should show cancellation with reason
|
|
|
|
Scenario: Cancel plan cancels a plan without a reason
|
|
Given I have a temporary test directory
|
|
When I invoke cancel without a reason
|
|
Then the cancel CLI should succeed
|
|
And the output should show cancellation without reason text
|
|
|
|
Scenario: Cancel plan handles plan errors
|
|
Given I have a temporary test directory
|
|
When I invoke cancel and PlanError is raised
|
|
Then the cancel CLI should abort
|
|
And the output should mention cannot cancel
|
|
|
|
# ===================================================================
|
|
# Streaming (_tell_streaming)
|
|
# ===================================================================
|
|
|
|
Scenario: Tell streaming displays real-time progress for plan generation nodes
|
|
Given I have a temporary test directory
|
|
When I run _tell_streaming with a successful async event stream
|
|
Then _tell_streaming should complete without error
|
|
And the streaming output should include completion panel
|
|
|
|
Scenario: Tell streaming handles errors during streaming generation
|
|
Given I have a temporary test directory
|
|
When I run _tell_streaming with an error during streaming
|
|
Then _tell_streaming should raise the streaming error
|
|
|
|
# ===================================================================
|
|
# _print_lifecycle_plan
|
|
# ===================================================================
|
|
|
|
Scenario: Print lifecycle plan displays details for a real LifecyclePlan
|
|
Given I have a temporary test directory
|
|
When I call _print_lifecycle_plan with a LifecyclePlan instance
|
|
Then the lifecycle plan panel should be rendered with plan details
|
|
|
|
Scenario: Print lifecycle plan falls back for a non-LifecyclePlan object
|
|
Given I have a temporary test directory
|
|
When I call _print_lifecycle_plan with a non-LifecyclePlan object
|
|
Then the fallback plan panel should be rendered
|
|
|
|
Scenario: Print lifecycle plan shows error message when present
|
|
Given I have a temporary test directory
|
|
When I call _print_lifecycle_plan with a LifecyclePlan that has an error
|
|
Then the lifecycle plan panel should include the error message
|