Files
cleveragents-core/features/plan_diff_artifacts.feature
HAL9000 70a302a368 fix(plan): remove @tdd_expected_fail tags from passing artifact tests
The _build_artifacts_dict function in plan_apply_service.py already includes
validation_summary and apply_summary in the artifacts output. These two test
scenarios were marked as @tdd_expected_fail but now pass with the current
implementation. Removing the tags to reflect the actual passing status.

Also added the missing unit-tests.yaml validation config file that the tests
require.

ISSUES CLOSED: #9084
2026-06-03 05:00:01 -04:00

143 lines
5.5 KiB
Gherkin

Feature: Plan Diff and Artifacts Output
As a developer using the plan lifecycle
I want to review diffs and artifacts before applying changes
So that I can verify what will be applied and catch issues early
Background:
Given I have a plan apply service with an in-memory changeset store
# Diff output tests
Scenario: Plan diff shows file changes in rich format
Given a plan with a changeset containing file changes
When I request the diff in rich format
Then the diff output should contain the changeset ID
And the diff output should contain file paths
And the diff output should contain operation labels
Scenario: Plan diff shows file changes in plain format
Given a plan with a changeset containing file changes
When I request the diff in plain format
Then the diff output should contain unified diff markers
And the diff output should contain the plan ID
Scenario: Plan diff shows file changes in JSON format
Given a plan with a changeset containing file changes
When I request the diff in JSON format
Then the diff output should be valid JSON
And the JSON diff should contain entries list
And the JSON diff should contain summary counts
Scenario: Plan diff shows file changes in YAML format
Given a plan with a changeset containing file changes
When I request the diff in YAML format
Then the diff output should contain YAML keys
And the diff output should contain the changeset ID
Scenario: Plan diff raises error when no changeset exists
Given a plan with no changeset
When I try to get the diff
Then a plan error about missing changeset should be raised
Scenario: Plan diff with empty changeset shows no changes
Given a plan with an empty changeset
When I request the diff in rich format
Then the diff output should indicate no changes
# Artifacts output tests
Scenario: Plan artifacts shows changeset summary
Given a plan with a changeset containing file changes
When I request the artifacts
Then the artifacts should contain the plan ID
And the artifacts should contain the changeset ID
And the artifacts should contain sandbox refs
And the artifacts should contain files changed list
@tdd_issue @tdd_issue_4253
Scenario: Plan artifacts shows validation results when available
Given a plan with a changeset and validation summary
When I request the artifacts in JSON format
Then the artifacts JSON should contain validation summary
Scenario: Plan artifacts for plan without changeset
Given a plan with no changeset
When I request the artifacts
Then the artifacts should show null changeset
# Empty ChangeSet guard tests
Scenario: Apply with empty changeset is blocked
Given a plan with an empty changeset
When I check the empty changeset guard
Then a plan error about empty changeset should be raised
Scenario: Apply with empty changeset allowed via flag
Given a plan with an empty changeset
When I check the empty changeset guard with allow_empty
Then the guard should return True
Scenario: Apply with non-empty changeset passes guard
Given a plan with a changeset containing file changes
When I check the empty changeset guard
Then the guard should return True
# Apply summary persistence tests
Scenario: Apply persists summary metadata
Given a plan in apply processing state
When I persist the apply summary with 5 files and 3 validations
Then the plan metadata should contain apply_files_changed of 5
And the plan metadata should contain apply_validations_run of 3
And the plan metadata should contain apply_completed_at timestamp
# Merge failure handling tests
Scenario: Merge failure triggers error state
Given a plan in apply processing state
When a merge failure occurs with conflict details
Then the plan should be in an errored processing state
And the plan error message should contain merge conflict info
And the plan metadata should contain merge_conflict details
And the plan metadata should contain sandbox_rollback pending
# Service initialization tests
Scenario: PlanApplyService requires lifecycle service
When I try to create PlanApplyService with None lifecycle
Then a validation error should be raised for lifecycle service
# Multiple format outputs
Scenario: Artifacts output in plain format
Given a plan with a changeset containing file changes
When I request the artifacts in plain format
Then the artifacts output should contain key-value pairs
Scenario: Artifacts output in YAML format
Given a plan with a changeset containing file changes
When I request the artifacts in YAML format
Then the artifacts output should contain YAML structure
# Coverage: _render_diff_plain with empty changeset (line 70)
Scenario: Plan diff in plain format with empty changeset
Given a plan with an empty changeset
When I request the diff in plain format
Then the diff output should indicate no changes
# Coverage: artifacts with apply summary metadata (line 181)
@tdd_issue @tdd_issue_4253
Scenario: Artifacts include apply summary from metadata
Given a plan with a changeset and apply summary metadata
When I request the artifacts in JSON format
Then the artifacts JSON should contain apply summary
# Coverage: changeset store miss fallback (line 432)
Scenario: Diff falls back to stub changeset when store misses
Given a plan with a changeset ID but store has no entry
When I request the diff in rich format
Then the diff output should indicate no changes