1
1
import asyncio
2
- import json
3
- import types
4
2
from typing import List
5
3
6
4
import pytest
@@ -125,49 +123,29 @@ async def test_graphqlws_server_does_not_send_ack(
125
123
pass
126
124
127
125
128
- invalid_payload_server_answer = (
129
- '{"type":"error","id":"1","payload":{"message":"Must provide document"}}'
126
+ invalid_query_server_answer = (
127
+ '{"id":"1","type":"error","payload":[{"message":"Cannot query field '
128
+ '\\ "helo\\ " on type \\ "Query\\ ". Did you mean \\ "hello\\ "?",'
129
+ '"locations":[{"line":2,"column":3}]}]}'
130
130
)
131
131
132
132
133
- async def server_invalid_payload (ws , path ):
133
+ async def server_invalid_query (ws , path ):
134
134
await WebSocketServerHelper .send_connection_ack (ws )
135
135
result = await ws .recv ()
136
136
print (f"Server received: { result } " )
137
- await ws .send (invalid_payload_server_answer )
137
+ await ws .send (invalid_query_server_answer )
138
138
await WebSocketServerHelper .wait_connection_terminate (ws )
139
139
await ws .wait_closed ()
140
140
141
141
142
142
@pytest .mark .asyncio
143
- @pytest .mark .parametrize ("graphqlws_server" , [server_invalid_payload ], indirect = True )
144
- @pytest .mark .parametrize ("query_str" , [invalid_query_str ])
145
- async def test_graphqlws_sending_invalid_payload (
146
- event_loop , client_and_graphqlws_server , query_str
147
- ):
143
+ @pytest .mark .parametrize ("graphqlws_server" , [server_invalid_query ], indirect = True )
144
+ async def test_graphqlws_sending_invalid_query (event_loop , client_and_graphqlws_server ):
148
145
149
146
session , server = client_and_graphqlws_server
150
147
151
- # Monkey patching the _send_query method to send an invalid payload
152
-
153
- async def monkey_patch_send_query (
154
- self , document , variable_values = None , operation_name = None ,
155
- ) -> int :
156
- query_id = self .next_query_id
157
- self .next_query_id += 1
158
-
159
- query_str = json .dumps (
160
- {"id" : str (query_id ), "type" : "subscribe" , "payload" : "BLAHBLAH" }
161
- )
162
-
163
- await self ._send (query_str )
164
- return query_id
165
-
166
- session .transport ._send_query = types .MethodType (
167
- monkey_patch_send_query , session .transport
168
- )
169
-
170
- query = gql (query_str )
148
+ query = gql ("{helo}" )
171
149
172
150
with pytest .raises (TransportQueryError ) as exc_info :
173
151
await session .execute (query )
@@ -178,7 +156,10 @@ async def monkey_patch_send_query(
178
156
179
157
error = exception .errors [0 ]
180
158
181
- assert error ["message" ] == "Must provide document"
159
+ assert (
160
+ error ["message" ]
161
+ == 'Cannot query field "helo" on type "Query". Did you mean "hello"?'
162
+ )
182
163
183
164
184
165
not_json_answer = ["BLAHBLAH" ]
@@ -188,6 +169,7 @@ async def monkey_patch_send_query(
188
169
missing_id_answer_3 = ['{"type": "complete"}' ]
189
170
data_without_payload = ['{"type": "next", "id":"1"}' ]
190
171
error_without_payload = ['{"type": "error", "id":"1"}' ]
172
+ error_with_payload_not_a_list = ['{"type": "error", "id":"1", "payload": "NOT A LIST"}' ]
191
173
payload_is_not_a_dict = ['{"type": "next", "id":"1", "payload": "BLAH"}' ]
192
174
empty_payload = ['{"type": "next", "id":"1", "payload": {}}' ]
193
175
sending_bytes = [b"\x01 \x02 \x03 " ]
@@ -205,6 +187,7 @@ async def monkey_patch_send_query(
205
187
data_without_payload ,
206
188
error_without_payload ,
207
189
payload_is_not_a_dict ,
190
+ error_with_payload_not_a_list ,
208
191
empty_payload ,
209
192
sending_bytes ,
210
193
],
0 commit comments