327 lines
14 KiB
Gherkin
327 lines
14 KiB
Gherkin
Feature: Tool and Validation CLI commands
|
|
As a developer
|
|
I want to manage tools and validations via CLI commands
|
|
So that I can register, list, show, and remove tools and validations
|
|
|
|
Background:
|
|
Given a tool CLI runner with mocks
|
|
And a mocked tool registry service
|
|
|
|
# Tool add command tests
|
|
Scenario: Add tool via config file
|
|
Given a valid tool config YAML file
|
|
When I run tool CLI add with --config pointing to the YAML file
|
|
Then the tool CLI add should succeed
|
|
And the tool CLI output should contain "Tool Registered"
|
|
|
|
Scenario: Add tool with --update flag when tool exists
|
|
Given a valid tool config YAML file
|
|
And the tool already exists in the registry
|
|
When I run tool CLI add with --config and --update
|
|
Then the tool CLI add should succeed
|
|
And the tool CLI output should contain "Tool Updated"
|
|
|
|
Scenario: Add tool with --update flag when tool does not exist
|
|
Given a valid tool config YAML file
|
|
And the tool does not exist in the registry
|
|
When I run tool CLI add with --config and --update
|
|
Then the tool CLI add should succeed
|
|
And the tool CLI output should contain "Tool Registered"
|
|
|
|
Scenario: Add tool with missing config file fails
|
|
When I run tool CLI add with --config pointing to a missing file
|
|
Then the tool CLI command should abort
|
|
|
|
Scenario: Add tool with invalid YAML fails
|
|
Given an invalid YAML tool config file
|
|
When I run tool CLI add with --config pointing to the invalid YAML file
|
|
Then the tool CLI command should abort
|
|
|
|
Scenario: Add tool with duplicate name fails
|
|
Given a valid tool config YAML file
|
|
And the tool registry raises a duplicate error on register
|
|
When I run tool CLI add with --config pointing to the YAML file
|
|
Then the tool CLI command should abort
|
|
|
|
Scenario: Add tool with json format output
|
|
Given a valid tool config YAML file
|
|
When I run tool CLI add with --config and --format json
|
|
Then the tool CLI add should succeed
|
|
And the tool CLI output should contain "local/test-tool"
|
|
|
|
# Tool list command tests
|
|
Scenario: List all tools
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list
|
|
Then the tool CLI list should show all tools
|
|
|
|
Scenario: List tools with namespace filter
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with namespace filter "local"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: List tools with source filter
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with source filter "custom"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: List tools with type filter
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with type filter "tool"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: List tools with type filter validation
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with type filter "validation"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: List tools with invalid type filter
|
|
When I run tool CLI list with invalid type "unknown"
|
|
Then the tool CLI command should abort
|
|
|
|
Scenario: List tools with regex filter
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with regex filter "line-.*"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: List tools with invalid regex
|
|
When I run tool CLI list with invalid regex "[invalid"
|
|
Then the tool CLI command should abort
|
|
|
|
Scenario: List tools when empty
|
|
Given there are no mocked tools
|
|
When I run tool CLI list
|
|
Then the tool CLI should show no tools message
|
|
|
|
Scenario: List tools with json format
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with format "json"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: List tools with yaml format
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with format "yaml"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: List tools with plain format
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with format "plain"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: List tools with table format
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list with format "table"
|
|
Then the tool CLI list should succeed with results
|
|
|
|
Scenario: Rich table list has exactly the five spec columns
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list
|
|
Then the Rich tool list output contains all five spec columns
|
|
|
|
Scenario: Rich table list renders checkmark for read-only capability
|
|
Given there is a mocked read-only tool in the registry
|
|
When I run tool CLI list
|
|
Then the tool CLI output should contain "✓"
|
|
|
|
Scenario: Rich table list renders dash for non-read-only capability
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list
|
|
Then the tool CLI output should contain "—"
|
|
|
|
Scenario: Rich table list shows a Summary panel
|
|
Given there are mocked tools in the registry
|
|
When I run tool CLI list
|
|
Then the tool CLI output should contain "Summary"
|
|
|
|
# Tool show command tests
|
|
Scenario: Show tool by name
|
|
Given there is a mocked tool with name "local/test-tool"
|
|
When I run tool CLI show with name "local/test-tool"
|
|
Then the tool CLI should show the tool details
|
|
|
|
Scenario: Show tool not found
|
|
Given there is no tool with name "local/missing"
|
|
When I run tool CLI show with name "local/missing"
|
|
Then the tool CLI command should abort
|
|
|
|
Scenario: Show tool with json format
|
|
Given there is a mocked tool with name "local/test-tool"
|
|
When I run tool CLI show for name "local/test-tool" using format "json"
|
|
Then the tool CLI show should succeed
|
|
|
|
Scenario: Show tool with yaml format
|
|
Given there is a mocked tool with name "local/test-tool"
|
|
When I run tool CLI show for name "local/test-tool" using format "yaml"
|
|
Then the tool CLI show should succeed
|
|
|
|
Scenario: Show tool with plain format
|
|
Given there is a mocked tool with name "local/test-tool"
|
|
When I run tool CLI show for name "local/test-tool" using format "plain"
|
|
Then the tool CLI show should succeed
|
|
|
|
# Tool remove command tests
|
|
Scenario: Remove tool by name with confirmation
|
|
Given there is a mocked tool with name "local/test-tool"
|
|
When I run tool CLI remove with name "local/test-tool" and --yes
|
|
Then the tool CLI remove should succeed
|
|
And the tool CLI output should contain "Removed tool"
|
|
|
|
Scenario: Remove tool not found
|
|
Given there is no tool with name "local/missing"
|
|
When I run tool CLI remove with name "local/missing" and --yes
|
|
Then the tool CLI command should abort
|
|
|
|
Scenario: Remove tool with json format
|
|
Given there is a mocked tool with name "local/test-tool"
|
|
When I run tool CLI remove confirmed name "local/test-tool" with fmt "json"
|
|
Then the tool CLI remove should succeed
|
|
|
|
Scenario: Remove tool with service error
|
|
Given there is a mocked tool with name "local/test-tool"
|
|
And the tool registry raises an error on remove
|
|
When I run tool CLI remove with name "local/test-tool" and --yes
|
|
Then the tool CLI command should abort
|
|
|
|
# Validation add command tests
|
|
Scenario: Add validation via config file
|
|
Given a valid validation config YAML file
|
|
When I run validation CLI add with --config pointing to the YAML file
|
|
Then the validation CLI add should succeed
|
|
And the validation CLI output should contain "Validation Registered"
|
|
|
|
Scenario: Add validation with --update flag when validation exists
|
|
Given a valid validation config YAML file
|
|
And the validation already exists in the registry
|
|
When I run validation CLI add with --config and --update
|
|
Then the validation CLI add should succeed
|
|
And the validation CLI output should contain "Validation Updated"
|
|
|
|
Scenario: Add validation with missing config file fails
|
|
When I run validation CLI add with --config pointing to a missing file
|
|
Then the validation CLI command should abort
|
|
|
|
Scenario: Add validation with invalid YAML fails
|
|
Given an invalid YAML validation config file
|
|
When I run validation CLI add with --config pointing to the invalid YAML file
|
|
Then the validation CLI command should abort
|
|
|
|
Scenario: Add validation with json format output
|
|
Given a valid validation config YAML file
|
|
When I run validation CLI add with --config and --format json
|
|
Then the validation CLI add should succeed
|
|
|
|
# Validation attach command tests
|
|
Scenario: Attach validation to resource
|
|
Given a mocked validation exists for attaching
|
|
When I run validation CLI attach "resource/r1" "local/test-val"
|
|
Then the validation CLI attach should succeed
|
|
And the validation CLI output should contain "Validation Attached"
|
|
|
|
Scenario: Attach validation with project scope
|
|
Given a mocked validation exists for attaching
|
|
When I run validation CLI attach scoped "resource/r1" "local/test-val" with project "myproj"
|
|
Then the validation CLI attach should succeed
|
|
|
|
Scenario: Attach validation with extra args using named option format
|
|
Given a mocked validation exists for attaching
|
|
When I run validation CLI attach with named option "resource/r1" "local/test-val" option "--threshold" value "80"
|
|
Then the validation CLI attach should succeed
|
|
|
|
Scenario: Attach validation with invalid arg format (not a named option)
|
|
Given a mocked validation exists for attaching
|
|
When I run validation CLI attach with extra args "resource/r1" "local/test-val" arg is "badarg"
|
|
Then the validation CLI command should abort
|
|
|
|
Scenario: Attach validation not found
|
|
Given the validation is not found for attaching
|
|
When I run validation CLI attach "resource/r1" "local/missing-val"
|
|
Then the validation CLI command should abort
|
|
|
|
Scenario: Attach validation with json format
|
|
Given a mocked validation exists for attaching
|
|
When I run validation CLI attach formatted "resource/r1" "local/test-val" fmt is "json"
|
|
Then the validation CLI attach should succeed
|
|
|
|
# Validation detach command tests
|
|
Scenario: Detach validation with confirmation
|
|
Given a mocked attachment exists for detaching
|
|
When I run validation CLI detach "att-123" with --yes
|
|
Then the validation CLI detach should succeed
|
|
And the validation CLI output should contain "Detached validation"
|
|
|
|
Scenario: Detach validation not found
|
|
Given the attachment is not found for detaching
|
|
When I run validation CLI detach "att-missing" with --yes
|
|
Then the validation CLI command should abort
|
|
|
|
Scenario: Detach validation with json format
|
|
Given a mocked attachment exists for detaching
|
|
When I run validation CLI detach formatted "att-123" confirmed fmt "json"
|
|
Then the validation CLI detach should succeed
|
|
|
|
# Tool add with CleverAgentsError
|
|
Scenario: Add tool with CleverAgentsError from service
|
|
Given a valid tool config YAML file
|
|
And the tool registry raises a CleverAgentsError on register
|
|
When I run tool CLI add with --config pointing to the YAML file
|
|
Then the tool CLI command should abort
|
|
|
|
# Tool list with CleverAgentsError
|
|
Scenario: List tools with CleverAgentsError from service
|
|
Given the tool registry raises a CleverAgentsError on list
|
|
When I run tool CLI list
|
|
Then the tool CLI command should abort
|
|
|
|
# Tool show with CleverAgentsError
|
|
Scenario: Show tool with CleverAgentsError from service
|
|
Given the tool registry raises a CleverAgentsError on get
|
|
When I run tool CLI show with name "local/test-tool"
|
|
Then the tool CLI command should abort
|
|
|
|
# Validation add with CleverAgentsError
|
|
Scenario: Add validation with CleverAgentsError from service
|
|
Given a valid validation config YAML file
|
|
And the validation registry raises a CleverAgentsError on register
|
|
When I run validation CLI add with --config pointing to the YAML file
|
|
Then the validation CLI command should abort
|
|
|
|
# Validation attach with CleverAgentsError
|
|
Scenario: Attach validation with CleverAgentsError from service
|
|
Given the validation registry raises a CleverAgentsError on attach
|
|
When I run validation CLI attach "resource/r1" "local/test-val"
|
|
Then the validation CLI command should abort
|
|
|
|
# Validation detach with CleverAgentsError
|
|
Scenario: Detach validation with CleverAgentsError from service
|
|
Given the validation registry raises a CleverAgentsError on detach
|
|
When I run validation CLI detach "att-123" with --yes
|
|
Then the validation CLI command should abort
|
|
|
|
# Validation add with update and non-existent
|
|
Scenario: Add validation with --update flag when validation does not exist
|
|
Given a valid validation config YAML file
|
|
And the validation does not exist in the registry
|
|
When I run validation CLI add with --config and --update
|
|
Then the validation CLI add should succeed
|
|
And the validation CLI output should contain "Validation Registered"
|
|
|
|
# Tool remove with remove returning false
|
|
Scenario: Remove tool with remove returning false
|
|
Given there is a mocked tool with name "local/fail-remove"
|
|
And the tool registry returns false on remove
|
|
When I run tool CLI remove with name "local/fail-remove" and --yes
|
|
Then the tool CLI command should abort
|
|
|
|
# Validation add with validation error
|
|
Scenario: Add validation with validation error from service
|
|
Given a valid validation config YAML file
|
|
And the validation registry raises a validation error on register
|
|
When I run validation CLI add with --config pointing to the YAML file
|
|
Then the validation CLI command should abort
|
|
|
|
# Validation attach with validation error
|
|
Scenario: Attach validation with validation error from service
|
|
Given the validation registry raises a validation error on attach
|
|
When I run validation CLI attach "resource/r1" "local/test-val"
|
|
Then the validation CLI command should abort
|