Files
cleveragents-core/features/plan_generation_uncovered_lines.feature
hurui200320 d25a060c58
CI / lint (pull_request) Successful in 50s
CI / quality (pull_request) Successful in 1m2s
CI / push-validation (pull_request) Successful in 39s
CI / helm (pull_request) Successful in 43s
CI / typecheck (pull_request) Successful in 1m31s
CI / security (pull_request) Successful in 1m32s
CI / build (pull_request) Successful in 1m3s
CI / integration_tests (pull_request) Successful in 3m42s
CI / unit_tests (pull_request) Successful in 6m13s
CI / docker (pull_request) Successful in 2m2s
CI / coverage (pull_request) Successful in 11m15s
CI / status-check (pull_request) Successful in 3s
CI / build (push) Successful in 53s
CI / lint (push) Successful in 1m1s
CI / helm (push) Successful in 26s
CI / quality (push) Successful in 1m16s
CI / typecheck (push) Successful in 1m20s
CI / security (push) Successful in 1m37s
CI / benchmark-regression (push) Failing after 40s
CI / push-validation (push) Successful in 21s
CI / integration_tests (push) Successful in 3m17s
CI / unit_tests (push) Successful in 4m28s
CI / e2e_tests (push) Successful in 3m22s
CI / docker (push) Successful in 1m52s
CI / coverage (push) Successful in 12m50s
CI / status-check (push) Successful in 3s
CI / benchmark-publish (push) Successful in 1h20m0s
Revert "feat(ci): implement TDD bug tag quality gate for bug fix PRs"
This reverts commit e8d2f76466.
2026-05-12 08:30:24 +00:00

170 lines
9.4 KiB
Gherkin

Feature: Plan Generation Graph Uncovered Lines Coverage
As a developer
I want comprehensive test coverage for edge cases in PlanGenerationGraph
So that I can ensure all code paths are exercised
Background:
Given the langgraph plan generation module is importable
# Testing line 90: else branch when LLM is provided
Scenario: PlanGenerationGraph can be instantiated with custom LLM
Given I have a mock custom LLM instance
When I create a langgraph PlanGenerationGraph with the custom LLM
Then the langgraph graph should use the custom LLM
And the langgraph graph should not use FakeListLLM
# Testing lines 250-254: Exception handling in analyze_requirements
Scenario: Analyze requirements handles LLM exceptions gracefully
Given I have a langgraph PlanGenerationGraph instance with failing LLM
And I have a langgraph PlanGenerationState with prompt and contexts
When I execute the langgraph analyze_requirements node with the failing state
Then the uncovered analyzed_requirements should be empty
And the langgraph error should contain "Requirements analysis failed"
# Testing lines 297-305: Create operation with different prompt keywords
Scenario: Generate plan creates test file when prompt contains test
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with prompt "create test cases for validation"
When I execute the langgraph generate_plan node with test prompt
Then the langgraph generated file path should be "test_generated.py"
And the langgraph operation type should be CREATE
# Testing lines 298-301: Create operation for error handling file
Scenario: Generate plan creates error handler when prompt mentions error
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with prompt "add error handling"
When I execute the langgraph generate_plan node with error prompt
Then the langgraph generated file path should be "error_handler.py"
And the langgraph operation type should be CREATE
# Testing lines 298-301: Create operation for exception handling file
Scenario: Generate plan creates error handler when prompt mentions exception
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with prompt "implement exception handling"
When I execute the langgraph generate_plan node with exception prompt
Then the langgraph generated file path should be "error_handler.py"
And the langgraph operation type should be CREATE
# Testing line 303: Default file path for create operation
Scenario: Generate plan creates default file when prompt has no keywords
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with prompt "add new feature"
When I execute the langgraph generate_plan node with generic prompt
Then the langgraph generated file path should be "generated.py"
And the langgraph operation type should be CREATE
# Testing lines 329-333: Exception handling in generate_plan
Scenario: Generate plan handles LLM exceptions gracefully
Given I have a langgraph PlanGenerationGraph instance with failing LLM
And I have a langgraph state with valid requirements
When I execute the langgraph generate_plan node with failing LLM
Then the langgraph generated_changes should be empty
And the langgraph error should contain "Code generation failed"
# Testing lines 380-386: Exception handling in validate
Scenario: Validate node handles LLM exceptions gracefully
Given I have a langgraph PlanGenerationGraph instance with failing LLM
And I have a langgraph state with generated changes
When I execute the langgraph validate node with failing LLM
Then the langgraph validation status should be "FAIL"
And the langgraph validation message should contain "Validation failed"
# Testing lines 483-498: Async invoke method
Scenario: Workflow ainvoke method returns complete state asynchronously
Given I have a langgraph PlanGenerationGraph instance
And I have langgraph workflow inputs with project plan and contexts
When I invoke the langgraph workflow asynchronously
Then the langgraph async workflow result should contain all expected fields
And the langgraph async result should have generated_changes
And the langgraph async result should have validation_result
# _should_retry is a read-only conditional-edge function; retry_count is
# incremented inside _validate (a node) so LangGraph persists the new value.
Scenario: Should retry does not mutate state and returns retry when retries remain
Given I have a langgraph PlanGenerationGraph instance with max_retries 3
And I have a langgraph state with retry_count 1
When I check uncovered langgraph should_retry with FAIL validation and retry_count 1
Then the uncovered langgraph state retry_count should not be mutated and remain 1
And the langgraph retry decision should be "retry"
# Testing full workflow with retry logic
Scenario: Workflow retries on validation failure up to max attempts
Given I have a langgraph PlanGenerationGraph instance with max_retries 2
And I have langgraph workflow inputs that will fail validation initially
When I invoke the langgraph workflow with retry scenario
Then the langgraph workflow should have performed at least one retry
# Testing validation with short content that fails length check
Scenario: Validate node fails when generated code is too short
Given I have a langgraph PlanGenerationGraph instance with strict validation
And I have a langgraph state with minimal generated changes
When I execute the langgraph validate node with short content
Then the langgraph validation might fail based on content and LLM response
And the langgraph validation result should have a status field
# Testing stream method with multiple events
Scenario: Workflow stream yields events from all nodes
Given I have a langgraph PlanGenerationGraph instance
And I have langgraph workflow inputs with project plan and contexts
When I stream the langgraph workflow execution
Then the langgraph stream should yield events from load_context
And the langgraph stream should yield events from analyze_requirements
And the langgraph stream should yield events from generate_plan
And the langgraph stream should yield events from validate
# Testing format_context_summary edge cases
Scenario: Format context summary handles contexts with no content
Given I have a langgraph PlanGenerationGraph instance
When I format the langgraph context summary with empty content contexts
Then the langgraph summary should handle None content gracefully
And the langgraph summary should include file paths
# Testing modify operation path
Scenario: Generate plan modifies existing file when contexts provided
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with existing context file
When I execute the langgraph generate_plan node for modification
Then the langgraph operation type should be MODIFY
And the langgraph generated file path should match context path
And the langgraph change should have original_content from context
# Testing lines 260-262: chain passthrough when no retry support
Scenario: Chain without retry support is returned unchanged
Given I have a langgraph PlanGenerationGraph instance
When I wrap a langgraph chain without retry support
Then the langgraph chain wrapper should return the original chain
# Testing lines 413-431: explicit file path handling
Scenario: Generate plan honors explicit existing file path
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with explicit path to an existing file
When I execute the langgraph generate_plan node with explicit path
Then the langgraph generated file path should match the explicit file
And the langgraph operation type should be MODIFY
And the langgraph change should include original file content
# Testing lines 420-425: explicit directory path handling
Scenario: Generate plan writes to generated file under explicit directory
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with explicit directory path
When I execute the langgraph generate_plan node with explicit path
Then the langgraph generated file path should be under the explicit directory
And the langgraph operation type should be CREATE
# Testing lines 432-435: unsuffixed explicit path handling
Scenario: Generate plan appends generated file name to unsuffixed path
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with explicit path without a suffix
When I execute the langgraph generate_plan node with explicit path
Then the langgraph generated file path should append generated.py
And the langgraph operation type should be CREATE
# Testing lines 486-493: matching explicit path to context
Scenario: Generate plan selects matching context for explicit path hint
Given I have a langgraph PlanGenerationGraph instance
And I have a langgraph state with contexts and an explicit path hint
When I execute the langgraph generate_plan node with explicit path
Then the langgraph generated change should use the matching context path
And the langgraph operation type should be MODIFY
And the langgraph change should have original_content from context