File: test_stream.py

package info (click to toggle)
strawberry-graphql 0.306.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 18,176 kB
  • sloc: javascript: 178,052; python: 65,643; sh: 33; makefile: 25
file content (75 lines) | stat: -rw-r--r-- 2,009 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import contextlib

import pytest
from inline_snapshot import snapshot

from tests.conftest import skip_if_gql_32
from tests.http.clients.base import HttpClient

pytestmark = skip_if_gql_32("GraphQL 3.3.0 is required for incremental execution")


async def test_basic_stream(http_client: HttpClient):
    response = await http_client.query(
        method="get",
        query="""
        query Stream {
            streamableField @stream
        }
        """,
    )

    async with contextlib.aclosing(response.streaming_json()) as stream:
        initial = await stream.__anext__()

        assert initial == snapshot(
            {
                "data": {"streamableField": []},
                "hasNext": True,
                "pending": [{"id": "0", "path": ["streamableField"]}],
                "extensions": None,
            }
        )

        first = await stream.__anext__()

        assert first == snapshot(
            {
                "hasNext": True,
                "extensions": None,
                "incremental": [
                    {
                        "items": ["Hello 0"],
                        "id": "0",
                        "path": ["streamableField"],
                        "label": None,
                    }
                ],
            }
        )

        second = await stream.__anext__()

        assert second == snapshot(
            {
                "hasNext": True,
                "extensions": None,
                "incremental": [
                    {
                        "items": ["Hello 1"],
                        "id": "0",
                        "path": ["streamableField"],
                        "label": None,
                    }
                ],
            }
        )

        third = await stream.__anext__()

        assert third == snapshot(
            {"hasNext": False, "extensions": None, "completed": [{"id": "0"}]}
        )

        with pytest.raises(StopAsyncIteration):
            await stream.__anext__()