forked from cleveragents/cleveragents-core
135 lines
7.3 KiB
Gherkin
135 lines
7.3 KiB
Gherkin
@phase2 @a2a @server-cli-coverage
|
|
Feature: Server CLI command coverage boost
|
|
As a developer
|
|
I want full test coverage for server.py CLI commands
|
|
So that the server_connect (rich format), server_status, and resolve_server_mode
|
|
error paths are all exercised
|
|
|
|
# -----------------------------------------------------------------------
|
|
# resolve_server_mode — exception paths (lines 58-59)
|
|
# -----------------------------------------------------------------------
|
|
|
|
Scenario: resolve_server_mode returns disabled when resolve raises ValueError
|
|
Given a mock config service that raises ValueError on resolve
|
|
When I call resolve_server_mode with the mock
|
|
Then the server mode should be "disabled"
|
|
|
|
Scenario: resolve_server_mode returns disabled when resolve raises KeyError
|
|
Given a mock config service that raises KeyError on resolve
|
|
When I call resolve_server_mode with the mock
|
|
Then the server mode should be "disabled"
|
|
|
|
# -----------------------------------------------------------------------
|
|
# server_connect — rich format output (lines 132-142)
|
|
# -----------------------------------------------------------------------
|
|
|
|
Scenario: server_connect renders Rich Panel when format is rich
|
|
Given a mock config service that accepts writes
|
|
When I call server_connect with url "https://rich.example.com" and rich format
|
|
Then the captured console output should contain "Server Connection (Stub)"
|
|
And the captured console output should contain "https://rich.example.com"
|
|
And the captured console output should contain "stubbed"
|
|
And the captured console output should contain "not yet implemented"
|
|
|
|
Scenario: server_connect rich output includes namespace and TLS verify
|
|
Given a mock config service that accepts writes
|
|
When I call server_connect with url "https://ns.example.com" namespace "my-team" tls_verify false and rich format
|
|
Then the captured console output should contain "my-team"
|
|
And the captured console output should contain "False"
|
|
|
|
# -----------------------------------------------------------------------
|
|
# server_status — full function, no URL configured (lines 157-204)
|
|
# -----------------------------------------------------------------------
|
|
|
|
Scenario: server_status with json format when no URL is configured
|
|
Given a mock config service that resolves with no server config
|
|
When I call server_status with format "json"
|
|
Then the echoed output should contain "disabled"
|
|
And the echoed output should contain "server_mode"
|
|
|
|
Scenario: server_status with plain format when no URL is configured
|
|
Given a mock config service that resolves with no server config
|
|
When I call server_status with format "plain"
|
|
Then the echoed output should contain "disabled"
|
|
|
|
# -----------------------------------------------------------------------
|
|
# server_status — URL is configured (stubbed mode)
|
|
# -----------------------------------------------------------------------
|
|
|
|
Scenario: server_status with json format when URL is configured
|
|
Given a mock config service that resolves with full server config
|
|
When I call server_status with format "json"
|
|
Then the echoed output should contain "stubbed"
|
|
And the echoed output should contain "https://configured.example.com"
|
|
And the echoed output should contain "production"
|
|
|
|
# -----------------------------------------------------------------------
|
|
# server_status — rich format rendering (lines 196-206)
|
|
# -----------------------------------------------------------------------
|
|
|
|
Scenario: server_status renders Rich Panel when format is rich and no URL
|
|
Given a mock config service that resolves with no server config
|
|
When I call server_status with format "rich"
|
|
Then the captured console output should contain "Server Status"
|
|
And the captured console output should contain "disabled"
|
|
And the captured console output should contain "(not configured)"
|
|
|
|
Scenario: server_status renders Rich Panel when format is rich and URL is configured
|
|
Given a mock config service that resolves with full server config
|
|
When I call server_status with format "rich"
|
|
Then the captured console output should contain "Server Status"
|
|
And the captured console output should contain "stubbed"
|
|
And the captured console output should contain "https://configured.example.com"
|
|
|
|
# -----------------------------------------------------------------------
|
|
# server_status — exception paths for namespace / tls-verify (lines 168-183)
|
|
# -----------------------------------------------------------------------
|
|
|
|
Scenario: server_status defaults namespace when resolve raises ValueError
|
|
Given a mock config service where namespace resolve raises ValueError
|
|
When I call server_status with format "json"
|
|
Then the echoed output should contain "default"
|
|
|
|
Scenario: server_status defaults tls_verify when resolve raises KeyError
|
|
Given a mock config service where tls-verify resolve raises KeyError
|
|
When I call server_status with format "json"
|
|
Then the echoed output should contain "true"
|
|
|
|
Scenario: server_status defaults all fields when all resolves raise exceptions
|
|
Given a mock config service where all resolves raise exceptions
|
|
When I call server_status with format "json"
|
|
Then the echoed output should contain "disabled"
|
|
And the echoed output should contain "null"
|
|
And the echoed output should contain "default"
|
|
|
|
# -----------------------------------------------------------------------
|
|
# server_serve — uvicorn.run argument mapping
|
|
# -----------------------------------------------------------------------
|
|
|
|
Scenario: server_serve maps explicit CLI arguments to uvicorn.run
|
|
Given uvicorn run is patched for server serve assertions
|
|
When I call server_serve with app "cleveragents.a2a.asgi:app" host "127.0.0.1" port 9001 workers 3 and log level "warning"
|
|
Then uvicorn run should be called with app "cleveragents.a2a.asgi:app" host "127.0.0.1" port 9001 workers 3 and log level "warning"
|
|
|
|
Scenario: server_serve uses documented defaults for uvicorn.run
|
|
Given uvicorn run is patched for server serve assertions
|
|
When I call server_serve with default arguments
|
|
Then uvicorn run should be called with app "cleveragents.a2a.asgi:app" host "0.0.0.0" port 8000 workers 1 and log level "info"
|
|
|
|
Scenario: server_serve exits cleanly when uvicorn is unavailable
|
|
Given uvicorn run is unavailable for server serve assertions
|
|
When I call server_serve with default arguments and capture failure
|
|
Then server_serve should exit with code 1
|
|
And the captured console output should contain "optional dependency 'uvicorn' is not installed"
|
|
|
|
Scenario: server_serve normalizes log level via Typer option parsing
|
|
Given uvicorn run is patched for server serve assertions
|
|
When I invoke server_serve through the CLI with log level "WARNING"
|
|
Then uvicorn run should be called with app "cleveragents.a2a.asgi:app" host "0.0.0.0" port 8000 workers 1 and log level "warning"
|
|
|
|
Scenario: server_serve rejects invalid log level via Typer option parsing
|
|
Given uvicorn run is patched for server serve assertions
|
|
When I invoke server_serve through the CLI with invalid log level "LOUD"
|
|
Then the CLI invocation should fail with exit code 2
|
|
And the server CLI invocation output should contain "Invalid value for '--log-level'"
|