Files
cleveragents-core/features/project_context_policy.feature
T

149 lines
5.9 KiB
Gherkin

Feature: Project Context Policy Domain Model
As a developer
I want a project context policy model with view inheritance
So that context filtering can be configured per ACMS phase
# ---- Empty policy defaults ----
Scenario: Empty policy defaults to including everything
When I create an empty project context policy
Then the default view should include all resources
And the default view should include all paths
And the default view should have no file size limit
And the default view should have no total size limit
# ---- View inheritance ----
Scenario: Strategize inherits from default when not overridden
Given a policy with only a default view
When I resolve the view for phase "strategize"
Then the resolved view should be the default view
Scenario: Execute inherits from strategize when not overridden
Given a policy with default and strategize views
When I resolve the view for phase "execute"
Then the resolved view should be the strategize view
Scenario: Apply inherits from execute when not overridden
Given a policy with default strategize and execute views
When I resolve the view for phase "apply"
Then the resolved view should be the execute view
Scenario: Execute inherits from default when strategize is None
Given a policy with only a default view
When I resolve the view for phase "execute"
Then the resolved view should be the default view
Scenario: Apply falls through to default when all overrides are None
Given a policy with only a default view
When I resolve the view for phase "apply"
Then the resolved view should be the default view
Scenario: Resolve default phase returns default view
Given a policy with only a default view
When I resolve the view for phase "default"
Then the resolved view should be the default view
# ---- Override isolation ----
Scenario: Override at execute level does not affect strategize
Given a policy with a custom execute view
When I resolve the view for phase "strategize"
Then the resolved view should be the default view
Scenario: Override at execute returns execute view
Given a policy with a custom execute view
When I resolve the view for phase "execute"
Then the resolved view should be the execute view
# ---- Invalid phase name ----
Scenario: Invalid phase name raises error
Given a policy with only a default view
When I try to resolve the view for phase "invalid_phase"
Then a context policy error should be raised
And the context policy error should mention "Invalid phase"
Scenario: Unknown phase name raises error
Given a policy with only a default view
When I try to resolve the view for phase "plan"
Then a context policy error should be raised
And the context policy error should mention "Invalid phase"
# ---- Include/exclude resource patterns ----
Scenario: Include resources filters correctly
When I create a context view with include resources "db-*,cache-*"
Then the context view should have 2 include resources
Scenario: Exclude resources filters correctly
When I create a context view with exclude resources "temp-*"
Then the context view should have 1 exclude resource
Scenario: Combined include and exclude resources
When I create a context view with include "db-*" and exclude "db-test"
Then the context view should have 1 include resource
And the context view should have 1 exclude resource
# ---- Include/exclude path globs ----
Scenario: Include paths accepts globs
When I create a context view with include paths "src/**/*.py,tests/**"
Then the context view should have 2 include paths
Scenario: Exclude paths accepts globs
When I create a context view with exclude paths "*.pyc,__pycache__/**"
Then the context view should have 2 exclude paths
# ---- Size limit validation ----
Scenario: Valid max file size is accepted
When I create a context view with max file size 1048576
Then the context view max file size should be 1048576
Scenario: None max file size means no limit
When I create a context view with no file size limit
Then the context view max file size should be None
Scenario: Zero max file size raises error
When I try to create a context view with max file size 0
Then a context policy error should be raised
And the context policy error should mention "positive integer"
Scenario: Negative max file size raises error
When I try to create a context view with max file size -100
Then a context policy error should be raised
And the context policy error should mention "positive integer"
Scenario: Valid max total size is accepted
When I create a context view with max total size 10485760
Then the context view max total size should be 10485760
Scenario: Zero max total size raises error
When I try to create a context view with max total size 0
Then a context policy error should be raised
And the context policy error should mention "positive integer"
Scenario: Negative max total size raises error
When I try to create a context view with max total size -50
Then a context policy error should be raised
And the context policy error should mention "positive integer"
# ---- Serialization round-trip ----
Scenario: Policy survives JSON round-trip
Given a fully populated context policy
When I serialize and deserialize the policy
Then the deserialized policy should match the original
# ---- ContextView model_dump ----
Scenario: ContextView model_dump has expected keys
When I create a context view with defaults
Then the context view dump should have key "include_resources"
And the context view dump should have key "exclude_resources"
And the context view dump should have key "include_paths"
And the context view dump should have key "exclude_paths"
And the context view dump should have key "max_file_size"
And the context view dump should have key "max_total_size"