Testing

Running Tests

source venv/bin/activate
pytest
pytest -v
pytest tests/test_client.py

Test Structure

tests/
├── conftest.py      # Fixtures
├── test_cli.py      # CLI tests
├── test_client.py   # Client tests
├── test_config.py   # Config tests
└── test_models.py   # Model tests

Writing Tests

Fixtures

def test_sessions(sample_sessions_response):
    response = SessionsResponse(**sample_sessions_response)
    assert len(response.sessions) == 1

Mocking HTTP

def test_list_sessions(httpx_mock, sample_sessions_response):
    httpx_mock.add_response(
        method="POST",
        url="https://api.example.com/v1/sessions",
        json=sample_sessions_response,
    )
    
    with AIOBSClient(api_key="test", endpoint="https://api.example.com") as client:
        response = client.list_sessions()
    
    assert len(response.sessions) == 1

CLI Tests

from typer.testing import CliRunner
from shepherd.cli.main import app

runner = CliRunner()

def test_version():
    result = runner.invoke(app, ["version"])
    assert result.exit_code == 0