Files
cleveragents-core/features/plan_repository.feature
T
Jeffrey Phillips Freeman 5691858d46
CI / lint (pull_request) Successful in 15s
CI / typecheck (pull_request) Successful in 27s
CI / security (pull_request) Successful in 23s
CI / quality (pull_request) Successful in 15s
CI / integration_tests (pull_request) Successful in 4m37s
CI / build (pull_request) Successful in 16s
CI / unit_tests (pull_request) Successful in 10m41s
CI / coverage (pull_request) Successful in 7m23s
CI / docker (pull_request) Successful in 39s
feat(repo): add lifecycle plan repository
2026-02-15 08:29:31 +00:00

126 lines
5.9 KiB
Gherkin

@phase1 @domain @repository @plan_repository
Feature: Lifecycle Plan Repository Persistence
As a system operator managing lifecycle plans
I want the plan repository to reliably persist and retrieve plans
So that plan state survives process restarts and supports CLI list/filter commands
Background:
Given a clean in-memory database for plan repository tests
And a lifecycle plan repository backed by the database
# ---------------------------------------------------------------------------
# Create and retrieve
# ---------------------------------------------------------------------------
@plan_create @plan_get
Scenario: Create a plan and retrieve it by ID
Given a valid plan domain object with id "01HGZ6FE0AQDYTR4BX00000001"
When the plan is saved through the plan repository
Then the plan repository should not raise an error
And the plan retrieved by id "01HGZ6FE0AQDYTR4BX00000001" should exist
And the retrieved plan description should be "Test plan description"
@plan_create @plan_get_by_name
Scenario: Create a plan and retrieve it by name
Given a valid plan domain object with id "01HGZ6FE0AQDYTR4BX00000002"
When the plan is saved through the plan repository
Then the plan retrieved by name "local/test-plan" should exist
# ---------------------------------------------------------------------------
# Update
# ---------------------------------------------------------------------------
@plan_update
Scenario: Update plan phase and processing state
Given a valid plan domain object with id "01HGZ6FE0AQDYTR4BX00000003"
And the plan is saved through the plan repository
When the plan phase is updated to "strategize" with state "processing"
Then the retrieved plan should have phase "strategize"
And the retrieved plan should have processing state "processing"
# ---------------------------------------------------------------------------
# List filters
# ---------------------------------------------------------------------------
@plan_list @plan_filter_phase
Scenario: List plans filtered by phase
Given 3 plans exist in phase "action" and 2 plans in phase "strategize"
When plans are listed with phase filter "action"
Then the plan list should contain 3 plans
@plan_list @plan_filter_state
Scenario: List plans filtered by processing state
Given 2 plans exist in state "queued" and 1 plan in state "processing"
When plans are listed with processing state filter "queued"
Then the plan list should contain 2 plans
@plan_list @plan_filter_action
Scenario: List plans filtered by action name
Given 2 plans referencing action "local/deploy" and 1 plan referencing "local/review"
When plans are listed with action name filter "local/deploy"
Then the plan list should contain 2 plans
@plan_list @plan_filter_project
Scenario: List plans filtered by project name
Given a plan linked to project "local/api-service" and another with no project link
When plans are listed with project name filter "local/api-service"
Then the plan list should contain 1 plan
# ---------------------------------------------------------------------------
# Delete
# ---------------------------------------------------------------------------
@plan_delete
Scenario: Delete plan cascades to child tables
Given a valid plan domain object with id "01HGZ6FE0AQDYTR4BX00000010" and child rows
And the plan is saved through the plan repository
When the plan with id "01HGZ6FE0AQDYTR4BX00000010" is deleted
Then the plan retrieved by id "01HGZ6FE0AQDYTR4BX00000010" should not exist
And the child rows for plan "01HGZ6FE0AQDYTR4BX00000010" should be gone
# ---------------------------------------------------------------------------
# Error handling
# ---------------------------------------------------------------------------
@plan_create @error_handling
Scenario: Creating duplicate plan raises error
Given a valid plan domain object with id "01HGZ6FE0AQDYTR4BX00000011"
And the plan is saved through the plan repository
When a duplicate plan with id "01HGZ6FE0AQDYTR4BX00000011" is saved
Then a DuplicatePlanError should be raised mentioning "01HGZ6FE0AQDYTR4BX00000011"
@plan_get @error_handling
Scenario: Getting non-existent plan returns None
When the plan is retrieved by id "01HGZ6FE0AQDYTR4BXZZZZZZZZ"
Then the plan retrieve result should be None
# ---------------------------------------------------------------------------
# Phase and state persistence
# ---------------------------------------------------------------------------
@plan_phase @action_phase
Scenario: Plan with Action phase persists correctly
Given a plan domain object in phase "action" with state "queued" and id "01HGZ6FE0AQDYTR4BX00000012"
When the plan is saved through the plan repository
Then the retrieved plan should have phase "action"
And the retrieved plan should have processing state "queued"
@plan_phase @apply_terminal
Scenario: Plan with Apply terminal state persists correctly
Given a plan domain object in phase "apply" with state "applied" and id "01HGZ6FE0AQDYTR4BX00000013"
When the plan is saved through the plan repository
Then the retrieved plan should have phase "apply"
And the retrieved plan should have processing state "applied"
# ---------------------------------------------------------------------------
# Child row ordering
# ---------------------------------------------------------------------------
@plan_children @ordering
Scenario: Child rows (projects, arguments, invariants) persist in order
Given a plan with ordered children and id "01HGZ6FE0AQDYTR4BX00000014"
When the plan is saved through the plan repository
Then the retrieved plan should have arguments in order "alpha,beta,gamma"
And the retrieved plan should have invariants in order "first,second,third"
And the retrieved plan should have project links including "local/proj-a"