chore: update api routes to /v2 (#138)
* chore: update api routes to /v2 * chore: undo erroneous uv.lock update * chore: update openapi.json
This commit is contained in:
parent
e6c2e1cb73
commit
d332321138
|
|
@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|||
|
||||
### Changed
|
||||
|
||||
- API route is now /v2/
|
||||
- New architecture centered around the concept of a "peer" replaces the former
|
||||
"app"/"user"/"session" paradigm
|
||||
- Workspaces replace "apps" as top-level namespace
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ Honcho uses a peer-based model where both users and agents are represented as "p
|
|||
## Architecture Overview
|
||||
|
||||
### API Structure
|
||||
All API routes follow the pattern: `/v1/{resource}/{id}/{action}`
|
||||
All API routes follow the pattern: `/v2/{resource}/{id}/{action}`
|
||||
- **Workspaces**: Create, list, update, search
|
||||
- **Peers**: Create, list, update, chat (dialectic), messages, representation
|
||||
- **Sessions**: Create, list, update, delete, clone, manage peers, get context
|
||||
|
|
|
|||
5369
docs/openapi.json
5369
docs/openapi.json
File diff suppressed because it is too large
Load Diff
14
src/main.py
14
src/main.py
|
|
@ -5,7 +5,7 @@ import uuid
|
|||
from contextlib import asynccontextmanager
|
||||
|
||||
import sentry_sdk
|
||||
from fastapi import APIRouter, FastAPI, Request
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.responses import JSONResponse
|
||||
from fastapi_pagination import add_pagination
|
||||
|
|
@ -137,15 +137,13 @@ app.add_middleware(
|
|||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/apps/{app_id}/users/{user_id}")
|
||||
|
||||
add_pagination(app)
|
||||
|
||||
app.include_router(workspaces.router, prefix="/v1")
|
||||
app.include_router(peers.router, prefix="/v1")
|
||||
app.include_router(sessions.router, prefix="/v1")
|
||||
app.include_router(messages.router, prefix="/v1")
|
||||
app.include_router(keys.router, prefix="/v1")
|
||||
app.include_router(workspaces.router, prefix="/v2")
|
||||
app.include_router(peers.router, prefix="/v2")
|
||||
app.include_router(sessions.router, prefix="/v2")
|
||||
app.include_router(messages.router, prefix="/v2")
|
||||
app.include_router(keys.router, prefix="/v2")
|
||||
|
||||
|
||||
# Global exception handlers
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
def test_create_key_no_params(auth_client):
|
||||
"""Test creating a key with no parameters"""
|
||||
response = auth_client.post("/v1/keys")
|
||||
response = auth_client.post("/v2/keys")
|
||||
|
||||
# Only admin JWT should be allowed
|
||||
if auth_client.auth_type == "admin":
|
||||
|
|
@ -19,14 +19,14 @@ def test_create_key_with_params(auth_client, sample_data):
|
|||
|
||||
# Test with app_id
|
||||
response = auth_client.post(
|
||||
"/v1/keys", params={"workspace_id": test_workspace.name}
|
||||
"/v2/keys", params={"workspace_id": test_workspace.name}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert "key" in response.json()
|
||||
|
||||
# Test with app_id and user_id
|
||||
response = auth_client.post(
|
||||
"/v1/keys",
|
||||
"/v2/keys",
|
||||
params={"workspace_id": test_workspace.name, "peer_id": test_peer.name},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -34,7 +34,7 @@ def test_create_key_with_params(auth_client, sample_data):
|
|||
|
||||
# Test with session_id and collection_id
|
||||
response = auth_client.post(
|
||||
"/v1/keys",
|
||||
"/v2/keys",
|
||||
params={
|
||||
"workspace_id": test_workspace.name,
|
||||
"peer_id": test_peer.name,
|
||||
|
|
@ -48,7 +48,7 @@ def test_create_key_with_params(auth_client, sample_data):
|
|||
|
||||
def test_create_key_with_expires_at(auth_client, sample_data):
|
||||
"""Test creating a key with an expiration date"""
|
||||
response = auth_client.post("/v1/keys", params={"expires_at": "2025-01-01"})
|
||||
response = auth_client.post("/v2/keys", params={"expires_at": "2025-01-01"})
|
||||
|
||||
# Only admin JWT should be allowed
|
||||
if auth_client.auth_type == "admin":
|
||||
|
|
@ -62,6 +62,6 @@ def test_create_key_with_expires_at(auth_client, sample_data):
|
|||
|
||||
# assert that the key is expired
|
||||
response = auth_client.post(
|
||||
"/v1/keys", params={"workspace_id": test_workspace.name}
|
||||
"/v2/keys", params={"workspace_id": test_workspace.name}
|
||||
)
|
||||
assert response.status_code == 401
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ async def test_create_message(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{
|
||||
|
|
@ -51,7 +51,7 @@ async def test_create_batch_messages_with_metadata(client, db_session, sample_da
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{
|
||||
|
|
@ -93,7 +93,7 @@ async def test_create_batch_messages_without_metadata(client, db_session, sample
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{
|
||||
|
|
@ -125,7 +125,7 @@ async def test_create_batch_messages_with_null_metadata(
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{
|
||||
|
|
@ -164,7 +164,7 @@ async def test_get_messages(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -208,7 +208,7 @@ async def test_get_messages_with_reverse(client, db_session, sample_data):
|
|||
|
||||
# Test normal order
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -216,7 +216,7 @@ async def test_get_messages_with_reverse(client, db_session, sample_data):
|
|||
|
||||
# Test reversed order
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list?reverse=true",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list?reverse=true",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -253,7 +253,7 @@ async def test_get_messages_with_empty_filter(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
json={"filter": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -284,7 +284,7 @@ async def test_get_messages_with_null_filter(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
json={"filter": None},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -315,7 +315,7 @@ async def test_get_messages_no_body(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list"
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list"
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -353,7 +353,7 @@ async def test_get_filtered_messages(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
json={"filter": {"key": "value2"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -408,7 +408,7 @@ async def test_get_filtered_messages_with_complex_filter(
|
|||
|
||||
# Filter by multiple criteria
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/list",
|
||||
json={"filter": {"priority": "high", "category": "technical"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -439,7 +439,7 @@ async def test_update_message(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}",
|
||||
json={"metadata": {"new_key": "new_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -476,7 +476,7 @@ async def test_update_message_with_complex_metadata(client, db_session, sample_d
|
|||
}
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}",
|
||||
json={"metadata": complex_metadata},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -509,14 +509,14 @@ async def test_update_message_empty_metadata(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}",
|
||||
json={"metadata": None},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
# now ensure that the metadata is not changed
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}"
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}"
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -546,7 +546,7 @@ async def test_update_message_with_empty_dict_metadata(client, db_session, sampl
|
|||
await db_session.commit()
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}",
|
||||
json={"metadata": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -575,7 +575,7 @@ async def test_get_single_message(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}"
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{test_message.public_id}"
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -600,7 +600,7 @@ async def test_get_nonexistent_message(client, db_session, sample_data):
|
|||
|
||||
nonexistent_message_id = str(generate_nanoid())
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{nonexistent_message_id}"
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{nonexistent_message_id}"
|
||||
)
|
||||
assert response.status_code == 404
|
||||
|
||||
|
|
@ -619,7 +619,7 @@ async def test_update_nonexistent_message(client, db_session, sample_data):
|
|||
|
||||
nonexistent_message_id = str(generate_nanoid())
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{nonexistent_message_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages/{nonexistent_message_id}",
|
||||
json={"metadata": {"key": "value"}},
|
||||
)
|
||||
assert response.status_code == 404
|
||||
|
|
@ -632,7 +632,7 @@ async def test_create_messages_for_nonexistent_session(client, sample_data):
|
|||
|
||||
nonexistent_session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{nonexistent_session_id}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{nonexistent_session_id}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{
|
||||
|
|
@ -659,7 +659,7 @@ async def test_get_messages_for_nonexistent_session(client, sample_data):
|
|||
|
||||
nonexistent_session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{nonexistent_session_id}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{nonexistent_session_id}/messages/list",
|
||||
json={},
|
||||
)
|
||||
# Should return 200 with empty results (session doesn't exist = no messages)
|
||||
|
|
@ -682,7 +682,7 @@ async def test_create_empty_batch_messages(client, db_session, sample_data):
|
|||
await db_session.commit()
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
json={"messages": []},
|
||||
)
|
||||
# Should return 422 for validation error (empty list not allowed)
|
||||
|
|
@ -708,7 +708,7 @@ async def test_create_batch_messages_max_limit(client, db_session, sample_data):
|
|||
]
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{test_session.name}/messages",
|
||||
json={"messages": messages},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ def test_get_or_create_peer(client, sample_data):
|
|||
test_workspace, _ = sample_data
|
||||
name = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": name, "metadata": {"peer_key": "peer_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -22,7 +22,7 @@ def test_get_or_create_peer_with_configuration(client, sample_data):
|
|||
configuration = {"experimental": True, "beta": False}
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": name, "configuration": configuration},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -39,7 +39,7 @@ def test_get_or_create_peer_with_all_optional_params(client, sample_data):
|
|||
configuration = {"feature1": True, "feature2": False}
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": name, "metadata": metadata, "configuration": configuration},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -55,7 +55,7 @@ def test_get_or_create_existing_peer(client, sample_data):
|
|||
|
||||
# Create the peer
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": name, "metadata": {"peer_key": "peer_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -63,7 +63,7 @@ def test_get_or_create_existing_peer(client, sample_data):
|
|||
|
||||
# Try to create the same peer again - should return existing peer
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": name, "metadata": {"peer_key": "peer_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -79,21 +79,21 @@ def test_get_peers(client, sample_data):
|
|||
|
||||
# Create a few peers with metadata
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": str(generate_nanoid()), "metadata": {"peer_key": "peer_value"}},
|
||||
)
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": str(generate_nanoid()), "metadata": {"peer_key": "peer_value"}},
|
||||
)
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": str(generate_nanoid()), "metadata": {"peer_key": "peer_value2"}},
|
||||
)
|
||||
|
||||
# Get all peers
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/list",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -103,7 +103,7 @@ def test_get_peers(client, sample_data):
|
|||
|
||||
# Get peers with filter
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/list",
|
||||
json={"filter": {"peer_key": "peer_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -118,7 +118,7 @@ def test_get_peers_with_empty_filter(client, sample_data):
|
|||
test_workspace, _ = sample_data
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/list", json={"filter": {}}
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/list", json={"filter": {}}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -131,7 +131,7 @@ def test_get_peers_with_null_filter(client, sample_data):
|
|||
test_workspace, _ = sample_data
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/list", json={"filter": None}
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/list", json={"filter": None}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -142,7 +142,7 @@ def test_get_peers_with_null_filter(client, sample_data):
|
|||
def test_update_peer(client, sample_data):
|
||||
test_workspace, test_peer = sample_data
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
json={"metadata": {"new_key": "new_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -156,7 +156,7 @@ def test_update_peer_with_configuration(client, sample_data):
|
|||
configuration = {"new_feature": True, "legacy_feature": False}
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
json={"configuration": configuration},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -171,7 +171,7 @@ def test_update_peer_with_all_optional_params(client, sample_data):
|
|||
configuration = {"experimental": True, "beta": True}
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
json={"metadata": metadata, "configuration": configuration},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -186,13 +186,13 @@ def test_update_peer_with_null_metadata(client, sample_data):
|
|||
|
||||
# First set some metadata
|
||||
client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
json={"metadata": {"temp": "value"}},
|
||||
)
|
||||
|
||||
# Then clear it with null
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
json={"metadata": None},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -205,7 +205,7 @@ def test_update_peer_with_null_configuration(client, sample_data):
|
|||
test_workspace, test_peer = sample_data
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
json={"configuration": None},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -218,7 +218,7 @@ def test_get_sessions_for_peer_no_sessions(client, sample_data):
|
|||
|
||||
# Get sessions for the peer
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/sessions",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -232,7 +232,7 @@ def test_get_sessions_for_peer(client, sample_data):
|
|||
# Create session for the peer
|
||||
session_name = str(generate_nanoid())
|
||||
create_response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_name, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
assert create_response.status_code == 200
|
||||
|
|
@ -241,7 +241,7 @@ def test_get_sessions_for_peer(client, sample_data):
|
|||
|
||||
# Now get sessions for the peer and validate the session is returned
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/sessions",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -259,14 +259,14 @@ def test_get_sessions_for_peer_with_is_active_filter(client, sample_data):
|
|||
# Create and then delete a session to have inactive session
|
||||
session_name = str(generate_nanoid())
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_name, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
client.delete(f"/v1/workspaces/{test_workspace.name}/sessions/{session_name}")
|
||||
client.delete(f"/v2/workspaces/{test_workspace.name}/sessions/{session_name}")
|
||||
|
||||
# Test getting inactive sessions
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/sessions",
|
||||
json={"is_active": False},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -282,7 +282,7 @@ def test_get_sessions_for_peer_with_empty_filter(client, sample_data):
|
|||
test_workspace, test_peer = sample_data
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/sessions",
|
||||
json={"filter": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -296,7 +296,7 @@ def test_create_and_get_messages_for_peer(client, sample_data):
|
|||
|
||||
# Create messages for the peer
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{
|
||||
|
|
@ -321,7 +321,7 @@ def test_create_and_get_messages_for_peer(client, sample_data):
|
|||
|
||||
# Get messages for the peer
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -340,7 +340,7 @@ def test_get_messages_for_peer_with_reverse(client, sample_data):
|
|||
|
||||
# Create messages
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{"content": "First message", "peer_id": test_peer.name},
|
||||
|
|
@ -351,7 +351,7 @@ def test_get_messages_for_peer_with_reverse(client, sample_data):
|
|||
|
||||
# Test normal order
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -359,7 +359,7 @@ def test_get_messages_for_peer_with_reverse(client, sample_data):
|
|||
|
||||
# Test reversed order
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list?reverse=true",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list?reverse=true",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -375,7 +375,7 @@ def test_get_messages_for_peer_with_empty_filter(client, sample_data):
|
|||
test_workspace, test_peer = sample_data
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list",
|
||||
json={"filter": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -389,7 +389,7 @@ def test_get_messages_for_peer_with_null_filter(client, sample_data):
|
|||
test_workspace, test_peer = sample_data
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages/list",
|
||||
json={"filter": None},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -404,7 +404,7 @@ def test_chat(client, sample_data):
|
|||
|
||||
# Test chat endpoint
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
json={
|
||||
"queries": "Hello, how are you?",
|
||||
"stream": False,
|
||||
|
|
@ -424,13 +424,13 @@ def test_chat_with_optional_params(client, sample_data):
|
|||
|
||||
# Create a session first
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Test chat without optional parameters
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
json={
|
||||
"queries": "Hello, how are you?",
|
||||
"stream": False,
|
||||
|
|
@ -449,13 +449,13 @@ def test_get_peer_representation_with_session(client, sample_data):
|
|||
|
||||
# Create a session first
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Test representation scoped to session
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/representation",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/representation",
|
||||
json={
|
||||
"session_id": session_id,
|
||||
"queries": "Hello, how are you?",
|
||||
|
|
@ -470,7 +470,7 @@ def test_search_peer(client, sample_data):
|
|||
|
||||
# Add some messages to search through
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{"content": "Search this content", "peer_id": test_peer.name},
|
||||
|
|
@ -481,7 +481,7 @@ def test_search_peer(client, sample_data):
|
|||
|
||||
# Search with a query
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/search",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/search",
|
||||
json="search query",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -501,7 +501,7 @@ def test_search_peer_empty_query(client, sample_data):
|
|||
|
||||
# Search with empty query
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/search", json=""
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/search", json=""
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -517,7 +517,7 @@ def test_search_peer_nonexistent(client, sample_data):
|
|||
nonexistent_peer_id = str(generate_nanoid())
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{nonexistent_peer_id}/search",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{nonexistent_peer_id}/search",
|
||||
json="test query",
|
||||
)
|
||||
# This should probably return 404 or handle gracefully
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ def test_create_workspace_with_auth(auth_client):
|
|||
name = str(generate_nanoid())
|
||||
|
||||
response = auth_client.post(
|
||||
"/v1/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
"/v2/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
)
|
||||
|
||||
# Check expected behavior based on auth type
|
||||
|
|
@ -26,7 +26,7 @@ def test_auth_response_time(auth_client):
|
|||
start_time = time.time()
|
||||
|
||||
response = auth_client.post(
|
||||
"/v1/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
"/v2/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
)
|
||||
|
||||
end_time = time.time()
|
||||
|
|
@ -47,7 +47,7 @@ def test_get_or_create_workspace_with_auth(auth_client):
|
|||
name = str(generate_nanoid())
|
||||
|
||||
response = auth_client.post(
|
||||
"/v1/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
"/v2/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
)
|
||||
|
||||
if auth_client.auth_type != "admin":
|
||||
|
|
@ -66,7 +66,7 @@ def test_get_workspace_with_auth(auth_client, sample_data):
|
|||
f"Bearer {create_jwt(JWTParams(w=test_workspace.name))}"
|
||||
)
|
||||
|
||||
response = auth_client.post("/v1/workspaces", json={"name": test_workspace.name})
|
||||
response = auth_client.post("/v2/workspaces", json={"name": test_workspace.name})
|
||||
|
||||
# Admin JWT or JWT with matching workspace should be allowed
|
||||
if auth_client.auth_type in ["admin", "empty"]:
|
||||
|
|
@ -86,7 +86,7 @@ def test_update_workspace_with_auth(auth_client, sample_data):
|
|||
|
||||
new_name = str(generate_nanoid())
|
||||
response = auth_client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}",
|
||||
json={"name": new_name, "metadata": {"new_key": "new_value"}},
|
||||
)
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ def test_update_workspace_with_wrong_auth(auth_client, sample_data):
|
|||
|
||||
new_name = str(generate_nanoid())
|
||||
response = auth_client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}",
|
||||
json={"name": new_name, "metadata": {"new_key": "new_value"}},
|
||||
)
|
||||
|
||||
|
|
@ -133,7 +133,7 @@ def test_create_peer_with_auth(auth_client, sample_data):
|
|||
|
||||
name = str(generate_nanoid())
|
||||
response = auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": name, "metadata": {"peer_key": "peer_value"}},
|
||||
)
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ def test_get_peer_by_name_with_auth(auth_client, sample_data):
|
|||
|
||||
# Use POST /list endpoint to get peers
|
||||
response = auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/list",
|
||||
json={"filter": {"name": test_peer.name}},
|
||||
)
|
||||
|
||||
|
|
@ -173,7 +173,7 @@ def test_get_peer_by_name_with_auth(auth_client, sample_data):
|
|||
|
||||
# Get specific peer using get_or_create endpoint
|
||||
response = auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers", json={"name": test_peer.name}
|
||||
f"/v2/workspaces/{test_workspace.name}/peers", json={"name": test_peer.name}
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
|
|
@ -190,7 +190,7 @@ def test_update_peer_with_auth(auth_client, sample_data):
|
|||
|
||||
new_name = str(generate_nanoid())
|
||||
response = auth_client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
json={"name": new_name, "metadata": {"updated_key": "updated_value"}},
|
||||
)
|
||||
|
||||
|
|
@ -207,7 +207,7 @@ def test_update_peer_with_auth(auth_client, sample_data):
|
|||
)
|
||||
|
||||
response = auth_client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}",
|
||||
json={
|
||||
"name": str(generate_nanoid()),
|
||||
"metadata": {"peer_key": "peer_value"},
|
||||
|
|
@ -228,7 +228,7 @@ def test_create_session_with_auth(auth_client, sample_data):
|
|||
|
||||
session_name = str(generate_nanoid())
|
||||
response = auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"name": session_name, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
|
|
@ -246,7 +246,7 @@ def test_create_session_with_auth(auth_client, sample_data):
|
|||
|
||||
session_name2 = str(generate_nanoid())
|
||||
response = auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"name": session_name2, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
|
|
@ -264,7 +264,7 @@ def test_get_session_by_name_with_auth(auth_client, sample_data):
|
|||
|
||||
session_name = str(generate_nanoid())
|
||||
create_response = auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"name": session_name, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
|
|
@ -276,7 +276,7 @@ def test_get_session_by_name_with_auth(auth_client, sample_data):
|
|||
|
||||
# Test with workspace scoped JWT - get the same session
|
||||
response = auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions", json={"name": session_name}
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions", json={"name": session_name}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
|
|
@ -287,7 +287,7 @@ def test_get_session_by_name_with_auth(auth_client, sample_data):
|
|||
)
|
||||
|
||||
response = auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"name": session_name},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -295,7 +295,7 @@ def test_get_session_by_name_with_auth(auth_client, sample_data):
|
|||
# Test with wrong session_name (should be 401 since we have a session-scoped JWT)
|
||||
assert (
|
||||
auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"name": generate_nanoid()},
|
||||
).status_code
|
||||
== 401
|
||||
|
|
@ -308,7 +308,7 @@ def test_get_session_by_name_with_auth(auth_client, sample_data):
|
|||
|
||||
assert (
|
||||
auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"name": session_name},
|
||||
).status_code
|
||||
== 200
|
||||
|
|
@ -321,7 +321,7 @@ def test_get_session_by_name_with_auth(auth_client, sample_data):
|
|||
|
||||
assert (
|
||||
auth_client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"name": session_name},
|
||||
).status_code
|
||||
== 200
|
||||
|
|
@ -331,7 +331,7 @@ def test_get_session_by_name_with_auth(auth_client, sample_data):
|
|||
wrong_session_name = generate_nanoid()
|
||||
assert (
|
||||
auth_client.delete(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{wrong_session_name}"
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{wrong_session_name}"
|
||||
).status_code
|
||||
== 404
|
||||
)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ def test_get_or_create_session(client, sample_data):
|
|||
|
||||
# Test creating a new session with no parameters
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": str(generate_nanoid())},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -19,7 +19,7 @@ def test_get_or_create_session(client, sample_data):
|
|||
# Test creating a session with a specific id and peer_names (should get or create)
|
||||
session_id = str(generate_nanoid())
|
||||
response2 = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
assert response2.status_code == 200
|
||||
|
|
@ -30,7 +30,7 @@ def test_get_or_create_session(client, sample_data):
|
|||
|
||||
# Test getting the same session again (should return the same session)
|
||||
response3 = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
assert response3.status_code == 200
|
||||
|
|
@ -44,7 +44,7 @@ def test_create_session_with_metadata(client, sample_data):
|
|||
test_workspace, test_peer = sample_data
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -66,7 +66,7 @@ def test_create_session_with_configuration(client, sample_data):
|
|||
configuration = {"experimental_feature": True, "beta_mode": False}
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -88,7 +88,7 @@ def test_create_session_with_all_optional_params(client, sample_data):
|
|||
configuration = {"feature1": True, "feature2": False}
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -111,7 +111,7 @@ def test_create_session_with_too_many_peers(client, sample_data, caplog):
|
|||
for _ in range(10):
|
||||
peer_name = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": peer_name, "metadata": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -119,7 +119,7 @@ def test_create_session_with_too_many_peers(client, sample_data, caplog):
|
|||
|
||||
# create session with 11 peers
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": str(generate_nanoid()),
|
||||
"peer_names": {peer_name: {} for peer_name in peer_names},
|
||||
|
|
@ -129,7 +129,7 @@ def test_create_session_with_too_many_peers(client, sample_data, caplog):
|
|||
assert "Failed to get or create session" in caplog.text
|
||||
|
||||
session_response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/list",
|
||||
json={"filter": {"name": "test_session"}},
|
||||
)
|
||||
assert session_response.status_code == 200
|
||||
|
|
@ -139,7 +139,7 @@ def test_create_session_with_too_many_peers(client, sample_data, caplog):
|
|||
peer_names.pop()
|
||||
# Attempt to create session with same name
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": "test_session",
|
||||
"peer_names": {peer_name: {} for peer_name in peer_names},
|
||||
|
|
@ -156,7 +156,7 @@ def test_get_sessions(client, sample_data):
|
|||
# Create a test session
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -169,7 +169,7 @@ def test_get_sessions(client, sample_data):
|
|||
assert "id" in data
|
||||
assert data["workspace_id"] == test_workspace.name
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/list",
|
||||
json={"filter": {"test_key": "test_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -187,14 +187,14 @@ def test_get_sessions_with_is_active_filter(client, sample_data):
|
|||
# Create and then delete a session to have inactive session
|
||||
session_id = str(generate_nanoid())
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
client.delete(f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}")
|
||||
client.delete(f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}")
|
||||
|
||||
# Test getting inactive sessions
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/list", json={"is_active": False}
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/list", json={"is_active": False}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -209,7 +209,7 @@ def test_get_sessions_with_empty_filter(client, sample_data):
|
|||
test_workspace, test_peer = sample_data
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/list", json={"filter": {}}
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/list", json={"filter": {}}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -222,7 +222,7 @@ def test_update_delete_metadata(client, sample_data):
|
|||
# Create a test session
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -232,7 +232,7 @@ def test_update_delete_metadata(client, sample_data):
|
|||
assert response.status_code == 200
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
json={"metadata": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -245,7 +245,7 @@ def test_update_session(client, sample_data):
|
|||
# Create a test session
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -254,7 +254,7 @@ def test_update_session(client, sample_data):
|
|||
assert response.status_code == 200
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
json={"metadata": {"new_key": "new_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -269,14 +269,14 @@ def test_update_session_with_configuration(client, sample_data):
|
|||
|
||||
# Create session
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Update with configuration
|
||||
configuration = {"new_feature": True, "legacy_feature": False}
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
json={"metadata": {}, "configuration": configuration},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -291,7 +291,7 @@ def test_update_session_with_all_optional_params(client, sample_data):
|
|||
|
||||
# Create session
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
|
|
@ -299,7 +299,7 @@ def test_update_session_with_all_optional_params(client, sample_data):
|
|||
metadata = {"updated_key": "updated_value"}
|
||||
configuration = {"experimental": True, "beta": True}
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
json={"metadata": metadata, "configuration": configuration},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -315,7 +315,7 @@ def test_update_session_with_null_configuration(client, sample_data):
|
|||
|
||||
# Create session with configuration
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -325,7 +325,7 @@ def test_update_session_with_null_configuration(client, sample_data):
|
|||
|
||||
# Update with null configuration
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
json={"metadata": {}, "configuration": None},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -338,7 +338,7 @@ def test_delete_session(client, sample_data):
|
|||
# Create a test session
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -347,13 +347,13 @@ def test_delete_session(client, sample_data):
|
|||
assert response.status_code == 200
|
||||
|
||||
response = client.delete(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}"
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}"
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
# Check that session is marked as inactive
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/list",
|
||||
json={"is_active": False},
|
||||
)
|
||||
data = response.json()
|
||||
|
|
@ -368,7 +368,7 @@ def test_clone_session(client, sample_data):
|
|||
# Create a test session
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -379,7 +379,7 @@ def test_clone_session(client, sample_data):
|
|||
|
||||
# Create some messages in the session
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{
|
||||
|
|
@ -398,7 +398,7 @@ def test_clone_session(client, sample_data):
|
|||
assert response.status_code == 200
|
||||
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/clone",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/clone",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -406,7 +406,7 @@ def test_clone_session(client, sample_data):
|
|||
|
||||
# Check messages were cloned
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{data['id']}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{data['id']}/messages/list",
|
||||
json={},
|
||||
)
|
||||
|
||||
|
|
@ -429,13 +429,13 @@ def test_clone_session_with_cutoff(client, sample_data):
|
|||
|
||||
# Create session
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Create messages
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{"content": "Message 1", "peer_id": test_peer.name},
|
||||
|
|
@ -450,7 +450,7 @@ def test_clone_session_with_cutoff(client, sample_data):
|
|||
|
||||
# Clone with cutoff at first message
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/clone?message_id={first_message_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/clone?message_id={first_message_id}",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -462,7 +462,7 @@ def test_add_peers_to_session(client, sample_data):
|
|||
# Create another peer
|
||||
peer2_name = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": peer2_name, "metadata": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -470,7 +470,7 @@ def test_add_peers_to_session(client, sample_data):
|
|||
# Create a test session
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -480,7 +480,7 @@ def test_add_peers_to_session(client, sample_data):
|
|||
|
||||
# Add another peer to the session
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
json={peer2_name: {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -491,7 +491,7 @@ def test_get_session_peers(client, sample_data):
|
|||
# Create another peer
|
||||
peer2_name = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": peer2_name, "metadata": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -499,7 +499,7 @@ def test_get_session_peers(client, sample_data):
|
|||
# Create a test session with multiple peers
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}, peer2_name: {}},
|
||||
|
|
@ -509,7 +509,7 @@ def test_get_session_peers(client, sample_data):
|
|||
|
||||
# Get peers from the session
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -525,7 +525,7 @@ def test_set_session_peers(client, sample_data):
|
|||
# Create another peer
|
||||
peer2_name = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": peer2_name, "metadata": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -533,7 +533,7 @@ def test_set_session_peers(client, sample_data):
|
|||
# Create a test session
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -543,14 +543,14 @@ def test_set_session_peers(client, sample_data):
|
|||
|
||||
# Set peers for the session (should replace existing peers)
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
json={peer2_name: {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
# Check that only the new peer is in the session
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -565,7 +565,7 @@ def test_set_session_peers_with_limit(client, sample_data, caplog):
|
|||
# Create a test session with multiple peers
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
},
|
||||
|
|
@ -577,7 +577,7 @@ def test_set_session_peers_with_limit(client, sample_data, caplog):
|
|||
for _ in range(10):
|
||||
peer_name = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": peer_name, "metadata": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -586,7 +586,7 @@ def test_set_session_peers_with_limit(client, sample_data, caplog):
|
|||
# set peers with 11 peers (as a dict of peer_name: {})
|
||||
peers_dict = {peer_name: {} for peer_name in peer_names}
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
json=peers_dict,
|
||||
)
|
||||
assert response.status_code == 404
|
||||
|
|
@ -598,7 +598,7 @@ def test_remove_peers_from_session(client, sample_data):
|
|||
# Create another peer
|
||||
peer2_name = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": peer2_name, "metadata": {}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -606,7 +606,7 @@ def test_remove_peers_from_session(client, sample_data):
|
|||
# Create a test session with multiple peers
|
||||
session_id = str(generate_nanoid())
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}, peer2_name: {}},
|
||||
|
|
@ -617,14 +617,14 @@ def test_remove_peers_from_session(client, sample_data):
|
|||
# Remove one peer from the session
|
||||
response = client.request(
|
||||
"DELETE",
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
json=[test_peer.name],
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
# Check that only the remaining peer is in the session
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/peers",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -640,13 +640,13 @@ def test_get_session_context(client, sample_data):
|
|||
|
||||
# Create session
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peers": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Add some messages to have context
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{"content": "Test message 1", "peer_id": test_peer.name},
|
||||
|
|
@ -657,7 +657,7 @@ def test_get_session_context(client, sample_data):
|
|||
|
||||
# Get context
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/context",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/context",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -677,13 +677,13 @@ def test_get_session_context_with_summary(client, sample_data):
|
|||
|
||||
# Create session with messages
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peers": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Get context with summary
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/context?summary=true",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/context?summary=true",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -697,13 +697,13 @@ def test_get_session_context_with_tokens(client, sample_data):
|
|||
|
||||
# Create session
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peers": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Get context with token limit
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/context?tokens=100",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/context?tokens=100",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -718,13 +718,13 @@ def test_get_session_context_with_all_params(client, sample_data):
|
|||
|
||||
# Create session
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peers": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Get context with all parameters
|
||||
response = client.get(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/context?tokens=100&summary=true",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/context?tokens=100&summary=true",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -739,13 +739,13 @@ def test_search_session(client, sample_data):
|
|||
|
||||
# Create session
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peers": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Add messages to search through
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{"content": "Search this content", "peer_id": test_peer.name},
|
||||
|
|
@ -756,7 +756,7 @@ def test_search_session(client, sample_data):
|
|||
|
||||
# Search with a query
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/search",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/search",
|
||||
json="search query",
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -777,13 +777,13 @@ def test_search_session_empty_query(client, sample_data):
|
|||
|
||||
# Create session
|
||||
client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
|
||||
# Search with empty query
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/search", json=""
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/search", json=""
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -799,7 +799,7 @@ def test_search_session_nonexistent(client, sample_data):
|
|||
nonexistent_session_id = str(generate_nanoid())
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{nonexistent_session_id}/search",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{nonexistent_session_id}/search",
|
||||
json="test query",
|
||||
)
|
||||
# This should probably return 404 or handle gracefully
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ from nanoid import generate as generate_nanoid
|
|||
|
||||
def test_workspace_validations_api(client):
|
||||
# Test name too short
|
||||
response = client.post("/v1/workspaces", json={"name": "", "metadata": {}})
|
||||
response = client.post("/v2/workspaces", json={"name": "", "metadata": {}})
|
||||
assert response.status_code == 422
|
||||
error = response.json()["detail"][0]
|
||||
assert error["loc"] == ["body", "name"]
|
||||
|
|
@ -11,7 +11,7 @@ def test_workspace_validations_api(client):
|
|||
assert error["type"] == "string_too_short"
|
||||
|
||||
# Test name too long
|
||||
response = client.post("/v1/workspaces", json={"name": "a" * 101, "metadata": {}})
|
||||
response = client.post("/v2/workspaces", json={"name": "a" * 101, "metadata": {}})
|
||||
assert response.status_code == 422
|
||||
error = response.json()["detail"][0]
|
||||
assert error["loc"] == ["body", "name"]
|
||||
|
|
@ -20,7 +20,7 @@ def test_workspace_validations_api(client):
|
|||
|
||||
# Test invalid metadata type
|
||||
response = client.post(
|
||||
"/v1/workspaces", json={"name": "test", "metadata": "not a dict"}
|
||||
"/v2/workspaces", json={"name": "test", "metadata": "not a dict"}
|
||||
)
|
||||
assert response.status_code == 422
|
||||
error = response.json()["detail"][0]
|
||||
|
|
@ -33,7 +33,7 @@ def test_peer_validations_api(client, sample_data):
|
|||
|
||||
# Test name too short
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers", json={"name": "", "metadata": {}}
|
||||
f"/v2/workspaces/{test_workspace.name}/peers", json={"name": "", "metadata": {}}
|
||||
)
|
||||
assert response.status_code == 422
|
||||
error = response.json()["detail"][0]
|
||||
|
|
@ -43,7 +43,7 @@ def test_peer_validations_api(client, sample_data):
|
|||
|
||||
# Test name too long
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers",
|
||||
json={"name": "a" * 101, "metadata": {}},
|
||||
)
|
||||
assert response.status_code == 422
|
||||
|
|
@ -58,14 +58,14 @@ def test_message_validations_api(client, sample_data):
|
|||
# Create a test session first
|
||||
session_id = str(generate_nanoid())
|
||||
session_response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
assert session_response.status_code == 200
|
||||
|
||||
# Test content too long
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
json={
|
||||
"messages": [
|
||||
{"content": "a" * 50001, "peer_id": test_peer.name, "metadata": {}}
|
||||
|
|
@ -84,7 +84,7 @@ def test_session_validations_api(client, sample_data):
|
|||
# Create a test session first
|
||||
session_id = str(generate_nanoid())
|
||||
session_response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
"peer_names": {test_peer.name: {}},
|
||||
|
|
@ -96,7 +96,7 @@ def test_session_validations_api(client, sample_data):
|
|||
|
||||
# Test invalid metadata type
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
json={"metadata": "not a dict"},
|
||||
)
|
||||
assert response.status_code == 422
|
||||
|
|
@ -107,14 +107,14 @@ def test_session_validations_api(client, sample_data):
|
|||
# Test empty update
|
||||
# This should work but not change the session's metadata or configuration
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
# Test that the session's metadata and configuration are not changed
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={
|
||||
"id": session_id,
|
||||
},
|
||||
|
|
@ -130,14 +130,14 @@ def test_agent_query_validations_api(client, sample_data):
|
|||
# Create a session first since agent queries are session-based
|
||||
session_id = str(generate_nanoid())
|
||||
session_response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
assert session_response.status_code == 200
|
||||
|
||||
# Test valid string query (under 10000 chars)
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
params={"session_id": session_id, "target": "test_target"},
|
||||
json={"queries": "a" * 9999, "stream": False},
|
||||
)
|
||||
|
|
@ -145,7 +145,7 @@ def test_agent_query_validations_api(client, sample_data):
|
|||
|
||||
# Test string query too long (over 10000 chars)
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
params={"session_id": session_id, "target": "test_target"},
|
||||
json={"queries": "a" * 10001, "stream": False},
|
||||
)
|
||||
|
|
@ -157,7 +157,7 @@ def test_agent_query_validations_api(client, sample_data):
|
|||
|
||||
# Test valid list query (under 25 items, each under 10000 chars)
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
params={"session_id": session_id, "target": "test_target"},
|
||||
json={"queries": ["a" * 9999 for _ in range(25)], "stream": False},
|
||||
)
|
||||
|
|
@ -165,7 +165,7 @@ def test_agent_query_validations_api(client, sample_data):
|
|||
|
||||
# Test list too long (over 25 items)
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
params={"session_id": session_id, "target": "test_target"},
|
||||
json={"queries": ["test" for _ in range(26)], "stream": False},
|
||||
)
|
||||
|
|
@ -176,7 +176,7 @@ def test_agent_query_validations_api(client, sample_data):
|
|||
|
||||
# Test list item too long (item over 10000 chars)
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
params={"session_id": session_id, "target": "test_target"},
|
||||
json={"queries": ["a" * 10001], "stream": False},
|
||||
)
|
||||
|
|
@ -188,7 +188,7 @@ def test_agent_query_validations_api(client, sample_data):
|
|||
|
||||
# Test that strings over 20 chars are allowed
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
f"/v2/workspaces/{test_workspace.name}/peers/{test_peer.name}/chat",
|
||||
params={"session_id": session_id, "target": "test_target"},
|
||||
json={"queries": "a" * 100, "stream": False}, # 100 chars should be fine
|
||||
)
|
||||
|
|
@ -199,14 +199,14 @@ def test_required_field_validations_api(client, sample_data):
|
|||
test_workspace, test_peer = sample_data
|
||||
session_id = str(generate_nanoid())
|
||||
session_response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
assert session_response.status_code == 200
|
||||
|
||||
# Test missing required content in message
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
json={"messages": [{"peer_id": test_peer.name, "metadata": {}}]},
|
||||
)
|
||||
assert response.status_code == 422
|
||||
|
|
@ -216,7 +216,7 @@ def test_required_field_validations_api(client, sample_data):
|
|||
|
||||
# Test missing required peer_id in message
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/messages",
|
||||
json={"messages": [{"content": "test", "metadata": {}}]},
|
||||
)
|
||||
assert response.status_code == 422
|
||||
|
|
@ -230,14 +230,14 @@ def test_filter_validations_api(client, sample_data):
|
|||
# Create a session first
|
||||
session_id = str(generate_nanoid())
|
||||
session_response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions",
|
||||
json={"id": session_id, "peer_names": {test_peer.name: {}}},
|
||||
)
|
||||
assert session_response.status_code == 200
|
||||
|
||||
# Test invalid filter type in message list (at session level)
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/sessions/{session_id}/messages/list",
|
||||
f"/v2/workspaces/{test_workspace.name}/sessions/{session_id}/messages/list",
|
||||
json={"filter": "not a dict"},
|
||||
)
|
||||
assert response.status_code == 422
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ from nanoid import generate as generate_nanoid
|
|||
def test_get_or_create_workspace(client):
|
||||
name = str(generate_nanoid())
|
||||
|
||||
# This should create the workspace using POST /v1/workspaces
|
||||
response = client.post("/v1/workspaces", json={"name": name})
|
||||
# This should create the workspace using POST /v2/workspaces
|
||||
response = client.post("/v2/workspaces", json={"name": name})
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data["id"] == name
|
||||
|
|
@ -19,7 +19,7 @@ def test_get_or_create_workspace_with_configuration(client):
|
|||
configuration = {"feature1": True, "feature2": False}
|
||||
|
||||
response = client.post(
|
||||
"/v1/workspaces", json={"name": name, "configuration": configuration}
|
||||
"/v2/workspaces", json={"name": name, "configuration": configuration}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -34,7 +34,7 @@ def test_get_or_create_workspace_with_all_optional_params(client):
|
|||
configuration = {"experimental": True, "beta": False}
|
||||
|
||||
response = client.post(
|
||||
"/v1/workspaces",
|
||||
"/v2/workspaces",
|
||||
json={"name": name, "metadata": metadata, "configuration": configuration},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -49,14 +49,14 @@ def test_get_or_create_existing_workspace(client):
|
|||
|
||||
# Create the workspace
|
||||
response = client.post(
|
||||
"/v1/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
"/v2/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
workspace1 = response.json()
|
||||
|
||||
# Try to create the same workspace again - should return existing workspace
|
||||
response = client.post(
|
||||
"/v1/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
"/v2/workspaces", json={"name": name, "metadata": {"key": "value"}}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
workspace2 = response.json()
|
||||
|
|
@ -70,7 +70,7 @@ def test_get_or_create_existing_workspace(client):
|
|||
async def test_get_all_workspaces(client, db_session, sample_data):
|
||||
# create a test workspace with metadata
|
||||
response = client.post(
|
||||
"/v1/workspaces",
|
||||
"/v2/workspaces",
|
||||
json={
|
||||
"name": "test_workspace",
|
||||
"metadata": {"test_key": "test_value"},
|
||||
|
|
@ -78,7 +78,7 @@ async def test_get_all_workspaces(client, db_session, sample_data):
|
|||
)
|
||||
|
||||
response = client.post(
|
||||
"/v1/workspaces/list",
|
||||
"/v2/workspaces/list",
|
||||
json={},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -87,7 +87,7 @@ async def test_get_all_workspaces(client, db_session, sample_data):
|
|||
assert len(data["items"]) > 0
|
||||
|
||||
response = client.post(
|
||||
"/v1/workspaces/list",
|
||||
"/v2/workspaces/list",
|
||||
json={"filter": {"test_key": "test_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -100,7 +100,7 @@ async def test_get_all_workspaces(client, db_session, sample_data):
|
|||
@pytest.mark.asyncio
|
||||
async def test_get_all_workspaces_with_empty_filter(client, db_session, sample_data):
|
||||
"""Test workspace listing with empty filter object"""
|
||||
response = client.post("/v1/workspaces/list", json={"filter": {}})
|
||||
response = client.post("/v2/workspaces/list", json={"filter": {}})
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert "items" in data
|
||||
|
|
@ -110,7 +110,7 @@ async def test_get_all_workspaces_with_empty_filter(client, db_session, sample_d
|
|||
@pytest.mark.asyncio
|
||||
async def test_get_all_workspaces_with_null_filter(client, db_session, sample_data):
|
||||
"""Test workspace listing with null filter"""
|
||||
response = client.post("/v1/workspaces/list", json={"filter": None})
|
||||
response = client.post("/v2/workspaces/list", json={"filter": None})
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert "items" in data
|
||||
|
|
@ -121,7 +121,7 @@ def test_update_workspace(client, sample_data):
|
|||
test_workspace, _ = sample_data
|
||||
_new_name = str(generate_nanoid())
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}",
|
||||
json={"metadata": {"new_key": "new_value"}},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -135,7 +135,7 @@ def test_update_workspace_with_configuration(client, sample_data):
|
|||
configuration = {"new_feature": True, "legacy_feature": False}
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}", json={"configuration": configuration}
|
||||
f"/v2/workspaces/{test_workspace.name}", json={"configuration": configuration}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -149,7 +149,7 @@ def test_update_workspace_with_all_optional_params(client, sample_data):
|
|||
configuration = {"experimental": True, "beta": True}
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}",
|
||||
f"/v2/workspaces/{test_workspace.name}",
|
||||
json={"metadata": metadata, "configuration": configuration},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -164,12 +164,12 @@ def test_update_workspace_with_null_metadata(client, sample_data):
|
|||
|
||||
# First set some metadata
|
||||
client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}", json={"metadata": {"temp": "value"}}
|
||||
f"/v2/workspaces/{test_workspace.name}", json={"metadata": {"temp": "value"}}
|
||||
)
|
||||
|
||||
# Then clear it with null
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}", json={"metadata": None}
|
||||
f"/v2/workspaces/{test_workspace.name}", json={"metadata": None}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -183,7 +183,7 @@ def test_update_workspace_with_null_configuration(client, sample_data):
|
|||
test_workspace, _ = sample_data
|
||||
|
||||
response = client.put(
|
||||
f"/v1/workspaces/{test_workspace.name}", json={"configuration": None}
|
||||
f"/v2/workspaces/{test_workspace.name}", json={"configuration": None}
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -193,11 +193,11 @@ def test_update_workspace_with_null_configuration(client, sample_data):
|
|||
def test_create_duplicate_workspace_name(client):
|
||||
# Create an workspace
|
||||
name = str(generate_nanoid())
|
||||
response = client.post("/v1/workspaces", json={"name": name})
|
||||
response = client.post("/v2/workspaces", json={"name": name})
|
||||
assert response.status_code == 200
|
||||
|
||||
# Try to create another workspace with the same name - should return existing workspace
|
||||
response = client.post("/v1/workspaces", json={"name": name})
|
||||
response = client.post("/v2/workspaces", json={"name": name})
|
||||
|
||||
# Should return the existing workspace with 200 status (get_or_create behavior)
|
||||
assert response.status_code == 200
|
||||
|
|
@ -211,7 +211,7 @@ def test_search_workspace(client, sample_data):
|
|||
|
||||
# Test search with a query
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{test_workspace.name}/search", json="test search query"
|
||||
f"/v2/workspaces/{test_workspace.name}/search", json="test search query"
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
|
@ -229,7 +229,7 @@ def test_search_workspace_empty_query(client, sample_data):
|
|||
test_workspace, _ = sample_data
|
||||
|
||||
# Test search with empty query
|
||||
response = client.post(f"/v1/workspaces/{test_workspace.name}/search", json="")
|
||||
response = client.post(f"/v2/workspaces/{test_workspace.name}/search", json="")
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
|
||||
|
|
@ -243,6 +243,6 @@ def test_search_workspace_nonexistent(client):
|
|||
nonexistent_workspace_id = str(generate_nanoid())
|
||||
|
||||
response = client.post(
|
||||
f"/v1/workspaces/{nonexistent_workspace_id}/search", json="test query"
|
||||
f"/v2/workspaces/{nonexistent_workspace_id}/search", json="test query"
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
|
|
|||
Loading…
Reference in New Issue