Merge pull request #24 from montemishkin/allow-graphql-content-type-in-django-view

added check for content-type "application/graphql" in django view
This commit is contained in:
Syrus Akbary 2015-11-13 11:30:26 -08:00
commit 5c4db65cc0
2 changed files with 37 additions and 3 deletions

View File

@ -60,6 +60,8 @@ class GraphQLView(View):
query = received_json_data.get('query')
except ValueError:
return self.response_errors(ValueError("Malformed json body in the post data"))
elif content_type == 'application/graphql':
query = request.body.decode()
else:
query = request.POST.get('query') or request.GET.get('query')
return self.execute_query(request, query or '')

View File

@ -29,7 +29,7 @@ def test_client_post_malformed_json(settings, client):
{'message': 'Malformed json body in the post data'}]}
def test_client_post_empty_query(settings, client):
def test_client_post_empty_query_json(settings, client):
settings.ROOT_URLCONF = 'tests.contrib_django.test_urls'
response = client.post(
'/graphql', json.dumps({'query': ''}), 'application/json')
@ -38,7 +38,16 @@ def test_client_post_empty_query(settings, client):
{'message': 'Must provide query string.'}]}
def test_client_post_bad_query(settings, client):
def test_client_post_empty_query_graphql(settings, client):
settings.ROOT_URLCONF = 'tests.contrib_django.test_urls'
response = client.post(
'/graphql', '', 'application/graphql')
json_response = format_response(response)
assert json_response == {'errors': [
{'message': 'Must provide query string.'}]}
def test_client_post_bad_query_json(settings, client):
settings.ROOT_URLCONF = 'tests.contrib_django.test_urls'
response = client.post(
'/graphql', json.dumps({'query': '{ MALFORMED'}), 'application/json')
@ -48,6 +57,16 @@ def test_client_post_bad_query(settings, client):
assert 'Syntax Error GraphQL' in json_response['errors'][0]['message']
def test_client_post_bad_query_graphql(settings, client):
settings.ROOT_URLCONF = 'tests.contrib_django.test_urls'
response = client.post(
'/graphql', '{ MALFORMED', 'application/graphql')
json_response = format_response(response)
assert 'errors' in json_response
assert len(json_response['errors']) == 1
assert 'Syntax Error GraphQL' in json_response['errors'][0]['message']
def test_client_get_good_query(settings, client):
settings.ROOT_URLCONF = 'tests.contrib_django.test_urls'
response = client.get('/graphql', {'query': '{ headline }'})
@ -69,7 +88,7 @@ def test_client_get_good_query_with_raise(settings, client):
assert json_response['data']['raises'] is None
def test_client_post_good_query(settings, client):
def test_client_post_good_query_json(settings, client):
settings.ROOT_URLCONF = 'tests.contrib_django.test_urls'
response = client.post(
'/graphql', json.dumps({'query': '{ headline }'}), 'application/json')
@ -82,6 +101,19 @@ def test_client_post_good_query(settings, client):
assert json_response == expected_json
def test_client_post_good_query_graphql(settings, client):
settings.ROOT_URLCONF = 'tests.contrib_django.test_urls'
response = client.post(
'/graphql', '{ headline }', 'application/graphql')
json_response = format_response(response)
expected_json = {
'data': {
'headline': None
}
}
assert json_response == expected_json
# def test_client_get_bad_query(settings, client):
# settings.ROOT_URLCONF = 'tests.contrib_django.test_urls'
# response = client.get('/graphql')