fix: Pagination Test

This commit is contained in:
Vineeth Voruganti 2025-04-17 11:52:28 -04:00
parent a1d50fe0ed
commit 3a8dcb63f6
1 changed files with 117 additions and 0 deletions

View File

@ -53,6 +53,123 @@ async def test_get_messages(client, db_session, sample_data):
assert data["items"][0]["metadata"] == {}
@pytest.mark.asyncio
async def test_messages_pagination(client, db_session, sample_data):
"""Test pagination of messages with different page sizes."""
test_app, test_user = sample_data
# Create a test session
test_session = models.Session(user_id=test_user.public_id)
db_session.add(test_session)
await db_session.commit()
# Create 50 test messages
for i in range(50):
test_message = models.Message(
session_id=test_session.public_id,
content=f"Pagination test message {i}",
is_user=i % 2 == 0, # Alternating user/non-user messages
h_metadata={"index": i}
)
db_session.add(test_message)
await db_session.commit()
# Test case 1: Default pagination (page 1, default size)
response = client.post(
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/messages/list",
json={},
)
assert response.status_code == 200
data = response.json()
# Check pagination metadata
assert data["page"] == 1
assert "total" in data
assert data["total"] == 50 # Total count should be 50
# Test case 2: 5 pages of 10 items each
for page in range(1, 6):
response = client.post(
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/messages/list?page={page}&size=10",
json={},
)
assert response.status_code == 200
data = response.json()
# Check pagination metadata
assert data["page"] == page
assert data["size"] == 10
assert data["total"] == 50
# Check items count (should be 10 for all pages)
expected_items = 10
assert len(data["items"]) == expected_items
# Verify we have the correct page of items
start_idx = (page - 1) * 10
for i, item in enumerate(data["items"]):
expected_idx = start_idx + i
assert item["metadata"]["index"] == expected_idx
# Test case 3: 2 pages of 25 items each
for page in range(1, 3):
response = client.post(
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/messages/list?page={page}&size=25",
json={},
)
assert response.status_code == 200
data = response.json()
# Check pagination metadata
assert data["page"] == page
assert data["size"] == 25
assert data["total"] == 50
# Check items count
expected_items = 25
assert len(data["items"]) == expected_items
# Verify we have the correct page of items
start_idx = (page - 1) * 25
for i, item in enumerate(data["items"]):
expected_idx = start_idx + i
assert item["metadata"]["index"] == expected_idx
# Test case 4: 1 page of 50 items
response = client.post(
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/messages/list?page=1&size=50",
json={},
)
assert response.status_code == 200
data = response.json()
# Check pagination metadata
assert data["page"] == 1
assert data["size"] == 50
assert data["total"] == 50
# Check items count
assert len(data["items"]) == 50
# Verify all items are included
all_indices = {item["metadata"]["index"] for item in data["items"]}
assert all_indices == set(range(50))
# Test case 5: Test with reverse=true (newest first, reverse order)
response = client.post(
f"/v1/apps/{test_app.public_id}/users/{test_user.public_id}/sessions/{test_session.public_id}/messages/list?page=1&size=50&reverse=true",
json={},
)
assert response.status_code == 200
data = response.json()
# Check items are in reverse order when reverse=true
for i, item in enumerate(data["items"]):
expected_idx = 49 - i
assert item["metadata"]["index"] == expected_idx
@pytest.mark.asyncio
async def test_get_filtered_messages(client, db_session, sample_data):
test_app, test_user = sample_data