-
Notifications
You must be signed in to change notification settings - Fork 89
/
Copy pathtest_base_async.py
104 lines (78 loc) · 3.3 KB
/
test_base_async.py
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
from unittest import mock
import json
import promise
import pytest
from graphql_ws import base, base_async
pytestmark = pytest.mark.asyncio
try:
from unittest.mock import AsyncMock # Python 3.8+
except ImportError:
from mock import AsyncMock
class TstServer(base_async.BaseAsyncSubscriptionServer):
def handle(self, *args, **kwargs):
pass # pragma: no cover
@pytest.fixture
def server():
return TstServer(schema=None)
async def test_terminate(server: TstServer):
context = AsyncMock(spec=base_async.BaseAsyncConnectionContext)
await server.on_connection_terminate(connection_context=context, op_id=1)
context.close.assert_called_with(1011)
async def test_send_error(server: TstServer):
context = AsyncMock(spec=base_async.BaseAsyncConnectionContext)
await server.send_error(connection_context=context, op_id=1, error="test error")
context.send.assert_called_with(
{"id": 1, "type": "error", "payload": {"message": "test error"}}
)
async def test_message(server: TstServer):
server.process_message = AsyncMock()
context = AsyncMock(spec=base_async.BaseAsyncConnectionContext)
msg = {"id": 1, "type": base.GQL_CONNECTION_INIT, "payload": ""}
await server.on_message(context, msg)
server.process_message.assert_called_with(context, msg)
async def test_message_str(server: TstServer):
server.process_message = AsyncMock()
context = AsyncMock(spec=base_async.BaseAsyncConnectionContext)
msg = {"id": 1, "type": base.GQL_CONNECTION_INIT, "payload": ""}
await server.on_message(context, json.dumps(msg))
server.process_message.assert_called_with(context, msg)
async def test_message_invalid(server: TstServer):
server.send_error = AsyncMock()
context = AsyncMock(spec=base_async.BaseAsyncConnectionContext)
await server.on_message(context, message="'not-json")
assert server.send_error.called
async def test_resolver(server: TstServer):
server.send_message = AsyncMock()
context = AsyncMock(spec=base_async.BaseAsyncConnectionContext)
result = mock.Mock()
result.data = {"test": [1, 2]}
result.errors = None
await server.send_execution_result(
context, op_id=1, execution_result=result
)
assert server.send_message.called
@pytest.mark.asyncio
async def test_resolver_with_promise(server: TstServer):
server.send_message = AsyncMock()
context = AsyncMock(spec=base_async.BaseAsyncConnectionContext)
result = mock.Mock()
result.data = {"test": [1, promise.Promise(lambda resolve, reject: resolve(2))]}
result.errors = None
await server.send_execution_result(
context, op_id=1, execution_result=result
)
assert server.send_message.called
assert result.data == {"test": [1, 2]}
async def test_resolver_with_nested_promise(server: TstServer):
server.send_message = AsyncMock()
context = AsyncMock(spec=base_async.BaseAsyncConnectionContext)
result = mock.Mock()
inner = promise.Promise(lambda resolve, reject: resolve(2))
outer = promise.Promise(lambda resolve, reject: resolve({"in": inner}))
result.data = {"test": [1, outer]}
result.errors = None
await server.send_execution_result(
context, op_id=1, execution_result=result
)
assert server.send_message.called
assert result.data == {"test": [1, {"in": 2}]}