|
1 | 1 | import pytest |
2 | 2 | from httpx import AsyncClient |
| 3 | +from sqlalchemy.ext.asyncio import AsyncSession |
3 | 4 |
|
| 5 | +from tests.api.helpers import count_statements as _count_statements |
4 | 6 | from tests.api.helpers import create_direct_chat as _create_direct_chat |
5 | 7 | from tests.api.helpers import login as _login |
6 | 8 | from tests.api.helpers import register as _register |
@@ -37,6 +39,31 @@ async def test_listing_populates_unread_count_and_last_message(client: AsyncClie |
37 | 39 | assert item["last_message"]["text"] == "two" |
38 | 40 |
|
39 | 41 |
|
| 42 | +async def test_listing_runs_the_same_number_of_statements_for_one_chat_as_for_many( |
| 43 | + client: AsyncClient, db_session: AsyncSession |
| 44 | +) -> None: |
| 45 | + one_chat_id, _ = await _create_direct_chat(client) |
| 46 | + await _send(client, one_chat_id, "hello") |
| 47 | + partner_ids = [await _register(client, f"partner{index}") for index in range(5)] |
| 48 | + await _register(client, "carol") |
| 49 | + for partner_id in partner_ids: |
| 50 | + chat = await client.post("/api/chats/", json={"chat_type": "direct", "member_ids": [partner_id]}) |
| 51 | + await _send(client, chat.json()["id"], "hello") |
| 52 | + |
| 53 | + with _count_statements(db_session) as many_chats_statements: |
| 54 | + many_chats_response = await client.get("/api/chats/") |
| 55 | + await _login(client, "alice") |
| 56 | + with _count_statements(db_session) as one_chat_statements: |
| 57 | + one_chat_response = await client.get("/api/chats/") |
| 58 | + |
| 59 | + many_chats_items = many_chats_response.json()["items"] |
| 60 | + one_chat_items = one_chat_response.json()["items"] |
| 61 | + assert len(many_chats_items) == 5 |
| 62 | + assert len(one_chat_items) == 1 |
| 63 | + assert all(item["last_message"] is not None for item in many_chats_items + one_chat_items) |
| 64 | + assert len(many_chats_statements) == len(one_chat_statements), many_chats_statements |
| 65 | + |
| 66 | + |
40 | 67 | @pytest.mark.usefixtures("db_session") |
41 | 68 | async def test_chat_with_no_messages_has_null_last_message_and_zero_unread(client: AsyncClient) -> None: |
42 | 69 | await _create_direct_chat(client) |
|
0 commit comments