Files
cleveragents-core/features/action_persistence.feature
brent.edwards f912a136b7
CI / lint (pull_request) Successful in 25s
CI / typecheck (pull_request) Successful in 59s
CI / security (pull_request) Successful in 49s
CI / quality (pull_request) Successful in 33s
CI / unit_tests (pull_request) Failing after 8m26s
CI / docker (pull_request) Has been skipped
CI / build (pull_request) Successful in 15s
CI / integration_tests (pull_request) Successful in 10m5s
CI / coverage (pull_request) Failing after 53s
test(persistence): add plan/action persistence suites
2026-02-17 20:25:12 +00:00

102 lines
5.2 KiB
Gherkin

Feature: Action persistence via ActionRepository
As a developer
I want actions to persist correctly through the ActionRepository
So that action definitions are durable across operations
Background:
Given a fresh in-memory action persistence database
# Create scenarios
Scenario: Create an action and retrieve it by name
Given a new action with namespaced name "local/persist-test"
When I persist the action via the action repository
Then I can retrieve the action by name "local/persist-test"
And the retrieved action description should be "Persistence test action"
Scenario: Create an action preserves all core fields
Given a fully-populated action "local/full-persist"
When I persist the action via the action repository
Then I can retrieve the action by name "local/full-persist"
And the action strategy_actor should be "local/strategist"
And the action execution_actor should be "local/executor"
And the persisted action state should be "available"
And the action reusable flag should be true
# List and archive scenarios
Scenario: List actions returns all available actions
Given 3 persisted actions in available state
When I list available actions from the action repository
Then I should get 3 actions in the action list
Scenario: List actions filters by namespace
Given a persisted action "local/ns-one" in available state
And a persisted action "myorg/ns-two" in available state
When I list actions in namespace "local" from the action repository
Then I should get 1 action in the action list
Scenario: Archive action changes state to archived
Given a persisted action "local/to-archive" in available state
When I archive the action "local/to-archive" via the action repository
Then the action "local/to-archive" should have state "archived"
Scenario: Delete action removes it from the database
Given a persisted action "local/to-delete" in available state
When I delete the action "local/to-delete" via the action repository
Then the action "local/to-delete" should not exist
# Arguments ordering scenarios
Scenario: Action arguments preserve position ordering
Given an action "local/ordered-args" with arguments "alpha" at position 0 and "beta" at position 1 and "gamma" at position 2
When I persist the action via the action repository
And I retrieve the action "local/ordered-args" from the action repository
Then the persisted action should have 3 arguments
And the persisted argument at position 0 should be "alpha"
And the persisted argument at position 1 should be "beta"
And the persisted argument at position 2 should be "gamma"
# Invariants ordering scenarios
Scenario: Action invariants preserve position ordering
Given an action "local/ordered-invs" with invariants "No deletion" and "Read only access" and "Log all changes"
When I persist the action via the action repository
And I retrieve the action "local/ordered-invs" from the action repository
Then the persisted action should have 3 invariants
And the persisted invariant at position 0 should be "No deletion"
And the persisted invariant at position 1 should be "Read only access"
And the persisted invariant at position 2 should be "Log all changes"
# Action phase persistence / terminal state storage
Scenario: Action persists in available state by default
Given a new action with namespaced name "local/default-state"
When I persist the action via the action repository
Then the action "local/default-state" should have state "available"
Scenario: Action persists archived state
Given a new action "local/archived-action" in archived state
When I persist the action via the action repository
Then the action "local/archived-action" should have state "archived"
# Apply terminal state storage for plans created from this action
Scenario: Plan from action records applied terminal state
Given a persisted action "local/term-action" in available state
And a plan from action "local/term-action" in apply phase with state "applied"
When I retrieve the terminal plan from the persistence database
Then the terminal plan processing_state should be "applied"
Scenario: Plan from action records constrained terminal state
Given a persisted action "local/constr-action" in available state
And a plan from action "local/constr-action" in apply phase with state "constrained"
When I retrieve the terminal plan from the persistence database
Then the terminal plan processing_state should be "constrained"
Scenario: Plan from action records errored terminal state
Given a persisted action "local/err-action" in available state
And a plan from action "local/err-action" in apply phase with state "errored"
When I retrieve the terminal plan from the persistence database
Then the terminal plan processing_state should be "errored"
Scenario: Plan from action records cancelled terminal state
Given a persisted action "local/cancel-action" in available state
And a plan from action "local/cancel-action" in apply phase with state "cancelled"
When I retrieve the terminal plan from the persistence database
Then the terminal plan processing_state should be "cancelled"