Skip to content

Commit e648487

Browse files
author
Awais Hussain
committed
Fix failing tests
The tests were copied over from a different repo and so were inconsistent with the Star Wars schema we are using here. This PR should fix the tests (although we are still using a remote schema rather than a local one, so the tests run slowly becuase they need to make a http request each time).
1 parent ceb3961 commit e648487

File tree

3 files changed

+74
-49
lines changed

3 files changed

+74
-49
lines changed

gql/transport/requests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def execute(self, document, variable_values=None, timeout=None, headers={}):
3838
'timeout': timeout or self.default_timeout,
3939
data_key: payload
4040
}
41-
request = requests.post(url or self.url, **post_args)
41+
request = requests.post(self.url, **post_args)
4242
request.raise_for_status()
4343

4444
result = request.json()

tests/test_client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ def test_retries(execute_mock):
1212

1313
client = Client(
1414
retries=expected_retries,
15-
transport=RequestsHTTPTransport(url='http://swapi.graphene-python.org/graphql')
15+
transport=RequestsHTTPTransport(url='http://swapi.graphene-python.org/graphql'),
16+
fetch_schema_from_transport=True
1617
)
1718

1819
query = gql('''

tests/test_response_parser.py

Lines changed: 71 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,118 @@
11
"""Tests for the GraphQL Response Parser.
22
3-
These tests are worthless until I have a schema I can work with.
3+
At the moment we use the Star Wars schema which is fetched each time from the
4+
server endpoint. In future it would be better to store this schema in a file
5+
locally.
46
"""
57
import copy
68
from gql.response_parser import ResponseParser
7-
9+
import pytest
10+
import requests
11+
from gql import Client
12+
from gql.transport.requests import RequestsHTTPTransport
813

914
class Capitalize():
15+
@classmethod
1016
def parse_value(self, value: str):
1117
return value.upper();
1218

13-
def test_scalar_type_name_for_scalar_field_returns_name(gql_schema):
14-
parser = ResponseParser(gql_schema)
15-
schema_obj = gql_schema.get_type_map().get('Wallet')
19+
@pytest.fixture
20+
def schema():
21+
request = requests.get('http://swapi.graphene-python.org/graphql',
22+
headers={
23+
'Host': 'swapi.graphene-python.org',
24+
'Accept': 'text/html',
25+
})
26+
request.raise_for_status()
27+
csrf = request.cookies['csrftoken']
1628

17-
assert parser._get_scalar_type_name(schema_obj.fields['balance']) == 'Money'
29+
client = Client(
30+
transport=RequestsHTTPTransport(url='http://swapi.graphene-python.org/graphql',
31+
cookies={"csrftoken": csrf},
32+
headers={'x-csrftoken': csrf}),
33+
fetch_schema_from_transport=True
34+
)
1835

36+
return client.schema
1937

20-
def test_scalar_type_name_for_non_scalar_field_returns_none(gql_schema):
21-
parser = ResponseParser(gql_schema)
22-
schema_obj = gql_schema.get_type_map().get('Wallet')
38+
def test_scalar_type_name_for_scalar_field_returns_name(schema):
39+
parser = ResponseParser(schema)
40+
schema_obj = schema.get_query_type().fields['film']
41+
42+
assert parser._get_scalar_type_name(schema_obj.type.fields['releaseDate']) == 'DateTime'
2343

24-
assert parser._get_scalar_type_name(schema_obj.fields['user']) is None
44+
45+
def test_scalar_type_name_for_non_scalar_field_returns_none(schema):
46+
parser = ResponseParser(schema)
47+
schema_obj = schema.get_query_type().fields['film']
48+
49+
assert parser._get_scalar_type_name(schema_obj.type.fields['species']) is None
2550

2651
def test_lookup_scalar_type(gql_schema):
2752
parser = ResponseParser(gql_schema)
2853

29-
assert parser._lookup_scalar_type(["wallet"]) is None
30-
assert parser._lookup_scalar_type(["searchWallets"]) is None
31-
assert parser._lookup_scalar_type(["wallet", "balance"]) == 'Money'
32-
assert parser._lookup_scalar_type(["searchWallets", "balance"]) == 'Money'
33-
assert parser._lookup_scalar_type(["wallet", "name"]) == 'String'
34-
assert parser._lookup_scalar_type(["wallet", "invalid"]) is None
54+
assert parser._lookup_scalar_type(["film"]) is None
55+
assert parser._lookup_scalar_type(["film", "releaseDate"]) == 'DateTime'
56+
assert parser._lookup_scalar_type(["film", "species"]) is None
3557

36-
def test_lookup_scalar_type_in_mutation(gql_schema):
37-
parser = ResponseParser(gql_schema)
58+
def test_lookup_scalar_type_in_mutation(schema):
59+
parser = ResponseParser(schema)
3860

39-
assert parser._lookup_scalar_type(["manualWithdraw", "agentTransaction"]) is None
40-
assert parser._lookup_scalar_type(["manualWithdraw", "agentTransaction", "amount"]) == 'Money'
61+
assert parser._lookup_scalar_type(["createHero"]) is None
62+
assert parser._lookup_scalar_type(["createHero", "hero"]) is None
63+
assert parser._lookup_scalar_type(["createHero", "ok"]) == 'Boolean'
4164

42-
def test_parse_response(gql_schema):
65+
def test_parse_response(schema):
4366
custom_scalars = {
44-
'Money': Capitalize
67+
'DateTime': Capitalize
4568
}
46-
parser = ResponseParser(gql_schema, custom_scalars)
69+
parser = ResponseParser(schema, custom_scalars)
4770

4871
response = {
49-
'wallet': {
72+
'film': {
5073
'id': 'some_id',
51-
'name': 'U1_test',
74+
'releaseDate': 'some_datetime',
5275
}
5376
}
5477

5578
expected = {
56-
'wallet': {
79+
'film': {
5780
'id': 'some_id',
58-
'name': 'U1_test',
81+
'releaseDate': 'SOME_DATETIME',
5982
}
6083
}
6184

6285
assert parser.parse(response) == expected
63-
assert response['wallet']['balance'] == 'CFA 3850'
86+
assert response['film']['releaseDate'] == 'some_datetime' # ensure original response is not changed
6487

65-
def test_parse_response_containing_list(gql_schema):
88+
def test_parse_response_containing_list(schema):
6689
custom_scalars = {
67-
'Money': M
90+
'DateTime': Capitalize
6891
}
69-
parser = ResponseParser(gql_schema, custom_scalars)
92+
parser = ResponseParser(schema, custom_scalars)
7093

7194
response = {
72-
"searchWallets": [
73-
{
74-
"id": "W_wz518BXTDJuQ",
75-
"name": "U2_test",
76-
"balance": "CFA 4148"
77-
},
78-
{
79-
"id": "W_uOe9fHPoKO21",
80-
"name": "Agent_test",
81-
"balance": "CFA 2641"
82-
}
83-
]
95+
"allFilms": {
96+
"edges": [{
97+
"node": {
98+
'id': 'some_id',
99+
'releaseDate': 'some_datetime',
100+
}
101+
},{
102+
"node": {
103+
'id': 'some_id',
104+
'releaseDate': 'some_other_datetime',
105+
}
106+
}]
107+
}
84108
}
85109

86110
expected = copy.deepcopy(response)
87-
expected['searchWallets'][0]['balance'] = M("CFA", "4148")
88-
expected['searchWallets'][1]['balance'] = M("CFA", "2641")
111+
expected['allFilms']['edges'][0]['node']['releaseDate'] = "SOME_DATETIME"
112+
expected['allFilms']['edges'][1]['node']['releaseDate'] = "SOME_OTHER_DATETIME"
89113

90114
result = parser.parse(response)
91115

92116
assert result == expected
93-
assert response['searchWallets'][0]['balance'] == "CFA 4148"
94-
assert response['searchWallets'][1]['balance'] == "CFA 2641"
117+
expected['allFilms']['edges'][0]['node']['releaseDate'] = "some_datetime"
118+
expected['allFilms']['edges'][1]['node']['releaseDate'] = "some_other_datetime"

0 commit comments

Comments
 (0)