446 lines
14 KiB
Python
446 lines
14 KiB
Python
import pytest
|
|
|
|
from src import models # Import your SQLAlchemy models
|
|
|
|
|
|
def test_create_session(client, sample_data):
|
|
test_app, test_user = sample_data
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions",
|
|
json={},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {}
|
|
assert "id" in data
|
|
|
|
|
|
def test_create_session_with_metadata(client, sample_data):
|
|
test_app, test_user = sample_data
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions",
|
|
json={
|
|
"metadata": {"session_key": "session_value"},
|
|
},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {"session_key": "session_value"}
|
|
assert "id" in data
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_sessions(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions",
|
|
json={
|
|
"metadata": {"test_key": "test_value"},
|
|
},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {"test_key": "test_value"}
|
|
assert "id" in data
|
|
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/list",
|
|
json={"filter": {"test_key": "test_value"}},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "items" in data
|
|
assert len(data["items"]) > 0
|
|
assert data["items"][0]["metadata"] == {"test_key": "test_value"}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_empty_update_session(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
test_session = models.Session(user_id=test_user.public_id, h_metadata={})
|
|
db_session.add(test_session)
|
|
await db_session.commit()
|
|
|
|
response = client.put(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}",
|
|
json={},
|
|
)
|
|
assert response.status_code == 422
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_update_delete_metadata(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
test_session = models.Session(
|
|
user_id=test_user.public_id, h_metadata={"default": "value"}
|
|
)
|
|
db_session.add(test_session)
|
|
await db_session.commit()
|
|
|
|
response = client.put(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}",
|
|
json={"metadata": {}},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_update_session(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
test_session = models.Session(user_id=test_user.public_id, h_metadata={})
|
|
db_session.add(test_session)
|
|
await db_session.commit()
|
|
|
|
response = client.put(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}",
|
|
json={"metadata": {"new_key": "new_value"}},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {"new_key": "new_value"}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_delete_session(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
test_session = models.Session(user_id=test_user.public_id, h_metadata={})
|
|
db_session.add(test_session)
|
|
await db_session.commit()
|
|
response = client.delete(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}"
|
|
)
|
|
assert response.status_code == 200
|
|
response = client.get(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}"
|
|
)
|
|
data = response.json()
|
|
assert data["is_active"] is False
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_clone_session(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
test_session = models.Session(
|
|
user_id=test_user.public_id, h_metadata={"test": "key"}
|
|
)
|
|
db_session.add(test_session)
|
|
await db_session.commit()
|
|
|
|
test_message = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message",
|
|
is_user=True,
|
|
h_metadata={"key": "value"},
|
|
)
|
|
test_message2 = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message 2",
|
|
is_user=True,
|
|
h_metadata={"key": "value2"},
|
|
)
|
|
db_session.add(test_message)
|
|
db_session.add(test_message2)
|
|
await db_session.commit()
|
|
|
|
response = client.get(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/clone",
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {"test": "key"}
|
|
|
|
print(data)
|
|
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{data['id']}/messages/list",
|
|
json={},
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "items" in data
|
|
assert len(data["items"]) > 0
|
|
assert len(data["items"]) == 2
|
|
|
|
assert data["items"][0]["content"] == "Test message"
|
|
assert data["items"][0]["is_user"] is True
|
|
assert data["items"][0]["metadata"] == {"key": "value"}
|
|
|
|
assert data["items"][1]["content"] == "Test message 2"
|
|
assert data["items"][1]["is_user"] is True
|
|
assert data["items"][1]["metadata"] == {"key": "value2"}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_partial_clone_session(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
test_session = models.Session(
|
|
user_id=test_user.public_id, h_metadata={"test": "key"}
|
|
)
|
|
db_session.add(test_session)
|
|
await db_session.commit()
|
|
|
|
test_message = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message",
|
|
is_user=True,
|
|
h_metadata={"key": "value"},
|
|
)
|
|
test_message2 = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message 2",
|
|
is_user=True,
|
|
h_metadata={"key": "value2"},
|
|
)
|
|
|
|
test_message3 = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message 2",
|
|
is_user=True,
|
|
h_metadata={"key": "value2"},
|
|
)
|
|
|
|
db_session.add(test_message)
|
|
db_session.add(test_message2)
|
|
db_session.add(test_message3)
|
|
await db_session.commit()
|
|
|
|
response = client.get(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/clone?message_id={test_message2.public_id}",
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {"test": "key"}
|
|
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{data['id']}/messages/list",
|
|
json={},
|
|
)
|
|
|
|
data = response.json()
|
|
assert len(data["items"]) > 0
|
|
assert len(data["items"]) == 2
|
|
|
|
assert data["items"][0]["content"] == "Test message"
|
|
assert data["items"][0]["is_user"] is True
|
|
assert data["items"][0]["metadata"] == {"key": "value"}
|
|
|
|
assert data["items"][1]["content"] == "Test message 2"
|
|
assert data["items"][1]["is_user"] is True
|
|
assert data["items"][1]["metadata"] == {"key": "value2"}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_deep_clone_session(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
test_session = models.Session(
|
|
user_id=test_user.public_id, h_metadata={"test": "key"}
|
|
)
|
|
db_session.add(test_session)
|
|
await db_session.commit()
|
|
|
|
test_message = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message",
|
|
is_user=True,
|
|
h_metadata={"key": "value"},
|
|
)
|
|
test_message2 = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message 2",
|
|
is_user=True,
|
|
h_metadata={"key": "value2"},
|
|
)
|
|
db_session.add(test_message)
|
|
db_session.add(test_message2)
|
|
await db_session.commit()
|
|
|
|
test_metamessage_1 = models.Metamessage(
|
|
message_id=test_message.public_id,
|
|
content="Test Metamessage 1",
|
|
h_metadata={},
|
|
metamessage_type="test_type",
|
|
)
|
|
test_metamessage_2 = models.Metamessage(
|
|
message_id=test_message.public_id,
|
|
content="Test Metamessage 2",
|
|
h_metadata={},
|
|
metamessage_type="test_type",
|
|
)
|
|
test_metamessage_3 = models.Metamessage(
|
|
message_id=test_message2.public_id,
|
|
content="Test Metamessage 3",
|
|
h_metadata={},
|
|
metamessage_type="test_type",
|
|
)
|
|
test_metamessage_4 = models.Metamessage(
|
|
message_id=test_message2.public_id,
|
|
content="Test Metamessage 4",
|
|
h_metadata={},
|
|
metamessage_type="test_type_2",
|
|
)
|
|
|
|
db_session.add(test_metamessage_1)
|
|
db_session.add(test_metamessage_2)
|
|
db_session.add(test_metamessage_3)
|
|
db_session.add(test_metamessage_4)
|
|
await db_session.commit()
|
|
|
|
response = client.get(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/clone?deep_copy=true",
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {"test": "key"}
|
|
|
|
cloned_session_id = data["id"]
|
|
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{cloned_session_id}/messages/list",
|
|
json={},
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "items" in data
|
|
assert len(data["items"]) > 0
|
|
assert len(data["items"]) == 2
|
|
|
|
assert data["items"][0]["content"] == "Test message"
|
|
assert data["items"][0]["is_user"] is True
|
|
assert data["items"][0]["metadata"] == {"key": "value"}
|
|
|
|
assert data["items"][1]["content"] == "Test message 2"
|
|
assert data["items"][1]["is_user"] is True
|
|
assert data["items"][1]["metadata"] == {"key": "value2"}
|
|
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{cloned_session_id}/metamessages/list",
|
|
json={},
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert len(data["items"]) > 0
|
|
assert len(data["items"]) == 4
|
|
assert data["items"][0]["content"] == "Test Metamessage 1"
|
|
assert data["items"][0]["metamessage_type"] == "test_type"
|
|
assert data["items"][0]["metadata"] == {}
|
|
assert data["items"][1]["content"] == "Test Metamessage 2"
|
|
assert data["items"][1]["metamessage_type"] == "test_type"
|
|
assert data["items"][1]["metadata"] == {}
|
|
assert data["items"][2]["content"] == "Test Metamessage 3"
|
|
assert data["items"][2]["metamessage_type"] == "test_type"
|
|
assert data["items"][2]["metadata"] == {}
|
|
assert data["items"][3]["content"] == "Test Metamessage 4"
|
|
assert data["items"][3]["metamessage_type"] == "test_type_2"
|
|
assert data["items"][3]["metadata"] == {}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_partial_deep_clone_session(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
# Create a test session
|
|
test_session = models.Session(
|
|
user_id=test_user.public_id, h_metadata={"test": "key"}
|
|
)
|
|
db_session.add(test_session)
|
|
await db_session.commit()
|
|
|
|
test_message = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message",
|
|
is_user=True,
|
|
h_metadata={"key": "value"},
|
|
)
|
|
test_message2 = models.Message(
|
|
session_id=test_session.public_id,
|
|
content="Test message 2",
|
|
is_user=True,
|
|
h_metadata={"key": "value2"},
|
|
)
|
|
db_session.add(test_message)
|
|
db_session.add(test_message2)
|
|
await db_session.commit()
|
|
|
|
test_metamessage_1 = models.Metamessage(
|
|
message_id=test_message.public_id,
|
|
content="Test Metamessage 1",
|
|
h_metadata={},
|
|
metamessage_type="test_type",
|
|
)
|
|
test_metamessage_2 = models.Metamessage(
|
|
message_id=test_message.public_id,
|
|
content="Test Metamessage 2",
|
|
h_metadata={},
|
|
metamessage_type="test_type",
|
|
)
|
|
test_metamessage_3 = models.Metamessage(
|
|
message_id=test_message2.public_id,
|
|
content="Test Metamessage 3",
|
|
h_metadata={},
|
|
metamessage_type="test_type",
|
|
)
|
|
test_metamessage_4 = models.Metamessage(
|
|
message_id=test_message2.public_id,
|
|
content="Test Metamessage 4",
|
|
h_metadata={},
|
|
metamessage_type="test_type_2",
|
|
)
|
|
|
|
db_session.add(test_metamessage_1)
|
|
db_session.add(test_metamessage_2)
|
|
db_session.add(test_metamessage_3)
|
|
db_session.add(test_metamessage_4)
|
|
await db_session.commit()
|
|
|
|
response = client.get(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/clone?deep_copy=true&message_id={test_message.public_id}",
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["metadata"] == {"test": "key"}
|
|
|
|
cloned_session_id = data["id"]
|
|
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{cloned_session_id}/messages/list",
|
|
json={},
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "items" in data
|
|
assert len(data["items"]) > 0
|
|
assert len(data["items"]) == 1
|
|
|
|
assert data["items"][0]["content"] == "Test message"
|
|
assert data["items"][0]["is_user"] is True
|
|
assert data["items"][0]["metadata"] == {"key": "value"}
|
|
|
|
response = client.post(
|
|
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{cloned_session_id}/metamessages/list",
|
|
json={},
|
|
)
|
|
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert len(data["items"]) > 0
|
|
assert len(data["items"]) == 2
|
|
assert data["items"][0]["content"] == "Test Metamessage 1"
|
|
assert data["items"][0]["metamessage_type"] == "test_type"
|
|
assert data["items"][0]["metadata"] == {}
|
|
assert data["items"][1]["content"] == "Test Metamessage 2"
|
|
assert data["items"][1]["metamessage_type"] == "test_type"
|
|
assert data["items"][1]["metadata"] == {}
|