Files
cleveragents-core/features/wf02_test_generation.feature
brent.edwards 81c141716b
CI / build (push) Successful in 22s
CI / helm (push) Successful in 22s
CI / lint (push) Successful in 3m20s
CI / quality (push) Successful in 3m46s
CI / typecheck (push) Successful in 3m56s
CI / security (push) Successful in 4m11s
CI / unit_tests (push) Successful in 8m55s
CI / docker (push) Successful in 1m35s
CI / coverage (push) Successful in 12m29s
CI / e2e_tests (push) Successful in 18m50s
CI / integration_tests (push) Successful in 24m10s
CI / status-check (push) Successful in 1s
CI / benchmark-publish (push) Has been cancelled
CI / benchmark-regression (push) Has been cancelled
test(integration): workflow example 2 — automated test generation for a module (trusted profile) (#1176)
## Summary
- Refactors WF02 integration helper into focused modules to satisfy maintainability guidelines and keep command responsibilities isolated.
- Moves WF02 artifact assertions onto lifecycle-produced change artifacts and verifies user-facing `plan artifacts` flow with mocked providers.
- Reworks WF02 coverage-gate assertions to run through validation registration/attachment/execution lifecycle and apply-gate outcomes.

## What changed in this fix round (cycle-6)
- **CI must-fix — trusted profile lifecycle integration failure:**
  - Fixed failing integration test `WF02 Trusted Profile Auto Runs Strategize And Execute` caused by legacy AutomationProfile fields that no longer exist.
  - Updated WF02 trusted-profile assertions from removed legacy fields (`auto_strategize`, `auto_execute`, `auto_apply`) to current spec-aligned fields (`decompose_task`, `create_tool`, `select_tool`).
  - Key module: `robot/wf02_test_generation_commands.py` (`wf02_trusted_lifecycle`).

## Prior fix rounds retained
- **P1 must-fix — validation payload assertions strengthened:**
  - Added explicit assertions for validation payload correctness in both failing and passing branches.
  - Assertions now verify:
    - validation identity (`local/auth-coverage` on `local/api-service-repo`)
    - required-mode semantics (`mode=required`, required pass/fail counters, `all_required_passed`)
    - `passed` boolean for each branch
    - measured-vs-target semantics (`measured_coverage` compared against `target`).
  - Key module: `robot/wf02_test_generation_validation.py`.

- **P2 should-fix — artifact membership assertions tightened:**
  - Artifact assertions now enforce exact expected membership and count instead of permissive subset checks.
  - Persisted changeset assertions were aligned to the same strict set/count checks.
  - Key module: `robot/wf02_test_generation_artifacts.py`.

- **P2 should-fix — removed unused helper:**
  - Deleted unused `_bind_changeset_to_plan` helper to eliminate dead code.
  - Key module: `robot/wf02_test_generation_artifacts.py`.

- **P2 should-fix — concrete typing:**
  - Replaced `_setup_validation_db` return type from `tuple[Any, Any]` to concrete typed return (`Callable[[], _NoCloseSession]`, `Session`).
  - Key module: `robot/wf02_test_generation_validation.py`.

## Quality gates
- `nox -e lint` 
- `nox -e typecheck` 
- `nox -e unit_tests` 
- `nox -e integration_tests` 
- `nox -e e2e_tests` 
- `nox -e coverage_report`  (coverage: **98.74%**)

## Scope / limitations
- No deferred items identified in cycle-6.

Closes #766

Reviewed-on: #1176
Reviewed-by: Jeffrey Phillips Freeman <jeffrey.freeman@cleverthis.com>
Co-authored-by: Brent Edwards <brent.edwards@cleverthis.com>
Co-committed-by: Brent Edwards <brent.edwards@cleverthis.com>
2026-04-01 03:30:00 +00:00

70 lines
3.6 KiB
Gherkin

@wf02 @test_generation @trusted
Feature: WF02 automated test generation for a module (trusted profile)
As a developer using the trusted automation profile
I want the system to generate tests for an under-covered module
So that coverage improves without modifying production source code
# --------------------------------------------------------------------------
# AC1: Trusted profile lifecycle gating (auto-run strategize + execute,
# human gate on apply)
# --------------------------------------------------------------------------
Scenario: Trusted profile auto-runs strategize and execute phases
Given a WF02 lifecycle service with mock providers
And the WF02 action "local/generate-tests" is registered
And a trusted-profile plan for module "src/auth" with coverage target 80
When I auto-run the WF02 plan
Then the plan should be in the execute phase
And the plan processing state should be complete
And the plan automation profile should be "trusted"
# --------------------------------------------------------------------------
# AC2: Action definition carries correct invariants
# --------------------------------------------------------------------------
Scenario: WF02 action carries production-code and naming invariants
Given a WF02 lifecycle service with mock providers
And the WF02 action "local/generate-tests" is registered
And a trusted-profile plan for module "src/auth" with coverage target 80
Then the plan should carry an invariant containing "Do not modify any production code"
And the plan should carry an invariant containing "test file naming convention"
And the plan should carry an invariant containing "test fixtures and conftest.py patterns"
# --------------------------------------------------------------------------
# AC3: Path safety guardrails reject unsafe output destinations
# --------------------------------------------------------------------------
Scenario: Path guardrail rejects absolute paths
Given a temporary WF02 fixture repository
When I validate the generated path "/tmp/test_abs.py"
Then the path should be rejected with reason "must be relative"
Scenario: Path guardrail rejects traversal paths
Given a temporary WF02 fixture repository
When I validate the generated path "../tests/test_escape.py"
Then the path should be rejected with reason "escapes fixture root"
Scenario: Path guardrail rejects non-test destinations
Given a temporary WF02 fixture repository
When I validate the generated path "src/test_not_allowed.py"
Then the path should be rejected with reason "must stay in tests/"
Scenario: Path guardrail accepts valid test paths
Given a temporary WF02 fixture repository
When I validate the generated path "tests/test_auth_new.py"
Then the path should be accepted
# --------------------------------------------------------------------------
# AC4: Generated artifacts follow naming and scope conventions
# --------------------------------------------------------------------------
Scenario: Generated test files follow project conventions
Given a WF02 lifecycle service with mock providers
And the WF02 action "local/generate-tests" is registered
And a trusted-profile plan for module "src/auth" with coverage target 80
When I generate tests from the mock provider with coverage suite
Then all generated file paths should start with "tests/"
And all generated file paths should end with ".py"
And all generated file names should start with "test_"
And no generated file path should start with "src/"