feat(cli): add --json output flag to doctor, models, route, run, and analytics (#13)
- Adds optional `--json` / `-j` flag to CLI commands for scriptable output - Redirects non-JSON logging messages to stderr under JSON mode - Adds test suite for CLI JSON serialization in backend/tests/test_cli.py - Updates documentation in README.md
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import json
|
||||
import pytest
|
||||
from typer.testing import CliRunner
|
||||
from app.cli.main import app
|
||||
|
||||
runner = CliRunner()
|
||||
|
||||
def test_cli_doctor_json():
|
||||
result = runner.invoke(app, ["doctor", "--json"])
|
||||
assert result.exit_code == 0
|
||||
data = json.loads(result.stdout)
|
||||
assert "python" in data
|
||||
assert "database" in data
|
||||
assert "mock_engine" in data
|
||||
|
||||
def test_cli_models_json():
|
||||
result = runner.invoke(app, ["models", "--json"])
|
||||
assert result.exit_code == 0
|
||||
data = json.loads(result.stdout)
|
||||
assert isinstance(data, list)
|
||||
if len(data) > 0:
|
||||
assert "id" in data[0]
|
||||
assert "provider" in data[0]
|
||||
|
||||
def test_cli_route_json():
|
||||
result = runner.invoke(app, ["route", "test prompt", "--json"])
|
||||
assert result.exit_code == 0
|
||||
data = json.loads(result.stdout)
|
||||
assert "selected_model" in data
|
||||
assert "estimated_latency_ms" in data
|
||||
|
||||
def test_cli_run_json():
|
||||
result = runner.invoke(app, ["run", "test prompt", "--json"])
|
||||
assert result.exit_code == 0
|
||||
data = json.loads(result.stdout)
|
||||
assert "decision" in data
|
||||
assert "response" in data
|
||||
assert "fallback" in data
|
||||
|
||||
def test_cli_analytics_json():
|
||||
result = runner.invoke(app, ["analytics", "--json"])
|
||||
assert result.exit_code == 0
|
||||
data = json.loads(result.stdout)
|
||||
assert "total_requests" in data
|
||||
assert "avg_latency_ms" in data
|
||||
assert "savings" in data
|
||||
Reference in New Issue
Block a user