Files
cleveragents-core/features/plan_generation_coverage_boost.feature
freemo 051ee7c290
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 21s
CI / quality (pull_request) Successful in 31s
CI / typecheck (pull_request) Successful in 47s
CI / security (pull_request) Successful in 52s
CI / build (pull_request) Successful in 56s
CI / e2e_tests (pull_request) Successful in 5m1s
CI / integration_tests (pull_request) Successful in 5m30s
CI / unit_tests (pull_request) Successful in 5m42s
CI / docker (pull_request) Successful in 58s
CI / coverage (pull_request) Successful in 7m35s
CI / build (push) Successful in 21s
CI / docker (push) Has been skipped
CI / benchmark-regression (pull_request) Failing after 49m24s
CI / lint (push) Successful in 22s
CI / quality (push) Successful in 39s
CI / security (push) Successful in 48s
CI / typecheck (push) Successful in 1m26s
CI / benchmark-regression (push) Has been skipped
CI / e2e_tests (push) Successful in 5m53s
CI / coverage (push) Successful in 9m4s
CI / benchmark-publish (push) Successful in 19m10s
CI / integration_tests (push) Failing after 19m18s
CI / unit_tests (push) Failing after 19m20s
test(coverage): add Behave BDD tests to improve coverage across 52 source files
Added 52 new .feature files and corresponding _steps.py files targeting
previously uncovered code paths in the following areas:

- TUI layer: app, commands, persona (state/schema/registry), widgets,
  input (shell_exec, reference_parser)
- Application services: plan lifecycle/service/executor, session,
  project, repo indexing, correction, checkpoint, actor, llm_actors,
  strategy coordinator, resource file watcher, service retry wiring
- CLI commands: session, resource, repl, plan, db, automation_profile
- Domain models: retry_policy, resource_type, cost_budget,
  docker_compose_analyzer, detail_level, _sql_string_aware,
  _postgresql_helpers
- Core: circuit_breaker, retry_service_patterns
- Infrastructure: repositories, transaction_sandbox, strategy_registry,
  plugins/loader, container
- Config: settings
- Agents: plan_generation, context_analysis, auto_debug
- A2A: facade

All new tests follow the Behave/Gherkin BDD standard. Resolved step
definition collisions with unique prefixes. Fixed Alembic fileConfig
logger disabling issue (disable_existing_loggers=False).

ISSUES CLOSED: #1068
2026-03-20 21:22:10 +00:00

35 lines
1.8 KiB
Gherkin

Feature: Plan Generation Coverage Boost
Scenarios that exercise previously uncovered defensive code paths
in the plan_generation module (lines 90-91, 428-429, 491, 631-635).
Background:
Given the plan generation coverage module is imported
Scenario: BoundedMemorySaver prune handles corrupt checkpoint data gracefully
Given a BoundedMemorySaver with max_checkpoints set to 1
And the saver storage contains two checkpoints with corrupt data
When the saver prunes the oldest checkpoint
Then the prune should complete without error
And the corrupt checkpoint should be removed from storage
Scenario: _generate_plan falls back to None when read_text raises an exception
Given a PlanGenerationGraph instance for coverage testing
And a generate state with an explicit path pointing to an unreadable file
When _generate_plan is called with the unreadable file state
Then a change should be generated with None as original_content
And the change operation should be MODIFY
Scenario: _find_matching_context returns None when no context path matches
Given a PlanGenerationGraph instance for coverage testing
And a list of contexts with non-matching paths
When _find_matching_context is called with a path that matches no context
Then the matching context result should be None
Scenario: _analyze_contexts falls back when agent.invoke raises an exception
Given a PlanGenerationGraph instance for coverage testing
And the ContextAnalysisAgent invoke method is mocked to raise an error
When _analyze_contexts is called with non-empty contexts
Then the result should contain the fallback summary
And the result should contain an analysis error message
And dependencies and relevance should be empty dicts