Files
cleveragents-core/features/plan_service_coverage.feature
T

160 lines
7.7 KiB
Gherkin

Feature: Plan Service Coverage
As a developer maintaining the CleverAgents system
I want comprehensive tests for the plan service
So that plan management functionality works reliably
Background:
Given I have a temporary test directory for plan service
And I have a Unit of Work instance for plan testing
And I have a PlanService instance
Scenario: Create plan with unsaved project raises error
Given I have an unsaved project without ID
When I try to create a plan for the unsaved project
Then a ValidationError should be raised with message "Cannot create plan: this directory is not linked to a saved CleverAgents project."
Scenario: Build plan when no current plan exists
Given I have a saved project with no current plan
When I try to build the plan for the project
Then a PlanError should be raised with message "No current plan to build"
Scenario: Build plan when plan has no valid ID
Given I have a saved project with current plan missing ID
When I try to build the plan with invalid ID
Then a PlanError should be raised with message "No current plan to build"
Scenario: Build plan without AI provider configured
Given I have a saved project with valid current plan
And I have a plan service without AI provider
When I try to build the plan without AI provider
Then a PlanError should be raised with message "No AI provider configured"
Scenario: Get pending changes for project with no current plan
Given I have a saved project with no current plan
When I get pending changes for the project
Then the pending changes list should be empty
Scenario: Get pending changes for project with current plan
Given I have a saved project with current plan
And the current plan has applied and unapplied changes
When I get pending changes for the project
Then I should get only the unapplied changes
Scenario: Apply changes when no current plan exists
Given I have a saved project with no current plan
When I try to apply changes without current plan
Then a PlanError should be raised with message "No current plan to apply"
Scenario: Apply changes with CREATE operation
Given I have a saved project with current plan
And the plan has a pending CREATE change
When I apply the plan changes
Then the file should be created with correct content
And the change should be marked as applied in plan service
Scenario: Apply changes with MODIFY operation
Given I have a saved project with current plan
And the plan has a pending MODIFY change for existing file
When I apply the plan changes
Then the file should be modified with new content
And the change should be marked as applied in plan service
Scenario: Apply changes with DELETE operation
Given I have a saved project with current plan
And the plan has a pending DELETE change for existing file
When I apply the plan changes
Then the file should be deleted
And the change should be marked as applied in plan service
Scenario: Apply changes with MOVE operation
Given I have a saved project with current plan
And the plan has a pending MOVE change for existing file
When I apply the plan changes
Then the file should be moved to new location
And the change should be marked as applied in plan service
Scenario: Apply changes with absolute file paths
Given I have a saved project with current plan
And the plan has changes with absolute file paths
When I apply the plan changes
Then the files should be created at absolute paths
And the changes should be marked as applied
Scenario: Apply changes handles file operation errors
Given I have a saved project with current plan
And the plan has a change that will fail on apply
When I try to apply the changes
Then a PlanError should be raised with file operation details
Scenario: Create plan with minimal prompt generates name
Given I have a saved project
When I create a plan with minimal prompt
Then the plan name should be generated from prompt
Scenario: Create plan with long prompt truncates name
Given I have a saved project
When I create a plan with very long prompt
Then the plan name should be truncated to first three words
Scenario: Apply MOVE operation when source file does not exist
Given I have a saved project with current plan
And the plan has a MOVE change for non-existent file
When I apply the plan changes
Then the MOVE operation should handle missing source gracefully
Scenario: Apply DELETE operation when file does not exist
Given I have a saved project with current plan
And the plan has a DELETE change for non-existent file
When I apply the plan changes
Then the DELETE operation should handle missing file gracefully
Scenario: Build plan with progress callback
Given I have a saved project with valid current plan
And I have a plan service with mock AI provider
When I build the plan with progress callback
Then the progress callback should be called with values from 0 to 100
Scenario: Building plan fails when plan ID disappears after status update
Given I configure a stub plan service whose current plan loses its ID after the transaction
When I try to build the plan with the stubbed service
Then a PlanError should be raised with message "Plan does not have a valid ID"
Scenario: Plan without repository ID remains non-current
Given I replace the plan service repository with a stub that never assigns plan IDs
When I create a plan with stub prompt "Missing ID branch"
Then the stub-created plan should remain non-current
And the stub repository should not record a current plan
Scenario: Reusing persistent memory with unchanged limit skips reset
When I request a persistent memory service for session "reuse-session" with max messages 4
And I monitor max message updates for session "reuse-session"
And I request the same persistent memory service for session "reuse-session" with max messages 4
Then the session "reuse-session" memory should reuse the existing service without changing limits
Scenario: Get pending changes with mixed applied status
Given I have a saved project with current plan
And the plan has 3 applied and 2 unapplied changes
When I get pending changes for the project
Then I should get exactly 2 pending changes
And the pending changes should not include applied ones
Scenario: Toggle plan memory persistence and limits
When I request an in-memory memory service for session "memory-session" with max messages 2
Then the session "memory-session" memory should be in-memory with max messages 2
When I request a persistent memory service for session "memory-session" with max messages 3
Then the session "memory-session" memory should be persistent with max messages 3
When I request a persistent memory service for session "memory-session" with max messages 5
Then the session "memory-session" memory should be persistent with max messages 5
When I request an in-memory memory service for session "memory-session" without changing message limit
Then the session "memory-session" memory should be in-memory without a connection string
Scenario: Provide conversation memory adapter for session context
When I request conversation memory for session "memory-session" with custom keys
Then the conversation adapter should expose the custom keys
And the conversation adapter should share the existing memory service
Scenario: Clear session memory and forget history
Given I stored a chat message in session "memory-session"
When I clear the session "memory-session" memory with forget history
Then the session "memory-session" memory should be removed and emptied