mirror of
https://github.com/Routstr/routstr-core.git
synced 2026-10-06 04:38:22 +00:00
The topup endpoint was the only token-redemption path that returned a
plain string under — the X-Cashu (chat completions) and bearer
(API key minting) paths both return the structured envelope
.
All three paths already share , so the
topup path classified the error into type/code/status/message but then
discarded and , putting only the message string in .
This commit makes topup reuse
(already used by the bearer path) so clients get the same /
on every redemption endpoint and can branch on / uniformly
instead of topup being a special case that only exposes the HTTP status.
Changes:
- balance.py: import and use ;
unclassified 500 also returns structured /
- errors.md: document that all three paths now expose type/code;
update the topup error example to show the structured envelope
- endpoints.md: fix stale success response (was {balance, amount_added,
currency}; actual shape is {msats: int})
- test_balance.py: assert full structured envelope (type, code, message)
instead of just the plain-string detail
- test_wallet_topup.py, test_error_handling_edge_cases.py,
test_swap_fee_retry.py: handle detail-as-dict in integration tests
FastAPI Async Unit Tests
This directory contains async unit tests for the Routstr proxy FastAPI application.
Installation
First, ensure you have the development dependencies installed:
uv pip install -e ".[dev]"
Running Tests
To run all tests:
pytest
To run tests with coverage:
pytest --cov=routstr --cov-report=html
To run specific test files:
pytest tests/test_main.py
pytest tests/test_models.py
pytest tests/test_proxy.py
To run only async tests:
pytest -m asyncio
Test Structure
conftest.py- Pytest fixtures and configurationtest_main.py- Tests for main app endpointstest_account.py- Tests for wallet/account management endpointstest_proxy.py- Tests for the proxy functionality with mocked upstreamtest_models.py- Tests for model pricing and data structures
Key Fixtures
async_client- Async HTTP client for testing FastAPI endpointstest_session- In-memory SQLite database session for teststest_api_key- Pre-configured API key with balanceapi_key_with_balance- API key with sufficient balance for proxy tests
Environment Variables
The tests automatically set up required environment variables in conftest.py. No manual configuration needed.
Writing New Tests
- Use
@pytest.mark.asynciofor async tests - Use the provided fixtures for database and client access
- Mock external dependencies (like upstream API calls)
- Test both success and error cases
- Verify database state changes when applicable