initial commits
This commit is contained in:
96
tests/test_routes.py
Normal file
96
tests/test_routes.py
Normal file
@@ -0,0 +1,96 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from nexus_claude_api.config import Settings
|
||||
from nexus_claude_api.server import create_app
|
||||
|
||||
|
||||
class FakeNexusClient:
|
||||
def converse(self, request: dict) -> dict:
|
||||
assert request["messages"][0]["content"][0]["text"] == "Hello"
|
||||
return {
|
||||
"ResponseMetadata": {"RequestId": "req-route"},
|
||||
"output": {"message": {"content": [{"text": "Hi"}]}},
|
||||
"stopReason": "end_turn",
|
||||
"usage": {"inputTokens": 3, "outputTokens": 1},
|
||||
}
|
||||
|
||||
def converse_stream(self, request: dict):
|
||||
assert request["messages"][0]["content"][0]["text"] == "Hello"
|
||||
return [
|
||||
{"contentBlockDelta": {"contentBlockIndex": 0, "delta": {"text": "Hi"}}},
|
||||
{"contentBlockStop": {"contentBlockIndex": 0}},
|
||||
{"messageStop": {"stopReason": "end_turn"}},
|
||||
]
|
||||
|
||||
|
||||
def client() -> TestClient:
|
||||
settings = Settings.from_values(api_key="test", require_api_key=False)
|
||||
return TestClient(create_app(settings=settings, nexus_client=FakeNexusClient()))
|
||||
|
||||
|
||||
def test_health() -> None:
|
||||
response = client().get("/health")
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"status": "ok"}
|
||||
|
||||
|
||||
def test_models() -> None:
|
||||
response = client().get("/v1/models")
|
||||
assert response.status_code == 200
|
||||
data = response.json()["data"]
|
||||
assert {model["id"] for model in data} >= {
|
||||
"claude-sonnet-4.6",
|
||||
"claude-opus-4.6",
|
||||
"claude-haiku-4.5",
|
||||
}
|
||||
|
||||
|
||||
def test_messages_non_stream() -> None:
|
||||
response = client().post(
|
||||
"/v1/messages",
|
||||
json={
|
||||
"model": "claude-sonnet-4.6",
|
||||
"messages": [{"role": "user", "content": "Hello"}],
|
||||
"max_tokens": 32,
|
||||
},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
body = response.json()
|
||||
assert body["id"] == "req-route"
|
||||
assert body["content"][0]["text"] == "Hi"
|
||||
|
||||
|
||||
def test_messages_stream() -> None:
|
||||
with client().stream(
|
||||
"POST",
|
||||
"/v1/messages",
|
||||
json={
|
||||
"model": "claude-sonnet-4.6",
|
||||
"messages": [{"role": "user", "content": "Hello"}],
|
||||
"max_tokens": 32,
|
||||
"stream": True,
|
||||
},
|
||||
) as response:
|
||||
body = response.read().decode("utf-8")
|
||||
|
||||
assert response.status_code == 200
|
||||
assert "event: message_start" in body
|
||||
assert "event: content_block_delta" in body
|
||||
assert "event: message_stop" in body
|
||||
|
||||
|
||||
def test_count_tokens() -> None:
|
||||
response = client().post(
|
||||
"/v1/messages/count_tokens",
|
||||
json={
|
||||
"model": "claude-sonnet-4.6",
|
||||
"messages": [{"role": "user", "content": "Hello"}],
|
||||
},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json()["input_tokens"] > 0
|
||||
|
||||
Reference in New Issue
Block a user