mirror of
https://github.com/graphql-python/graphene-django.git
synced 2024-11-15 14:17:55 +03:00
fcc3de2a90
When we use the `graphql_schema` management command, the output can vary from run to run depending on arbitrary factors (because there is no guarantee made about the order used to output JSON dictionary keys). This makes it difficult to compare two schema's at different points in time. We address this by including a new `canonical` flag to the command, which uses standard `json.dump` funcitonality to sort dictionary keys and force pretty-printed output.
24 lines
918 B
Python
24 lines
918 B
Python
from django.core import management
|
|
from mock import patch, mock_open
|
|
from six import StringIO
|
|
|
|
|
|
@patch("graphene_django.management.commands.graphql_schema.Command.save_file")
|
|
def test_generate_file_on_call_graphql_schema(savefile_mock, settings):
|
|
out = StringIO()
|
|
management.call_command("graphql_schema", schema="", stdout=out)
|
|
assert "Successfully dumped GraphQL schema to schema.json" in out.getvalue()
|
|
|
|
|
|
@patch('json.dump')
|
|
def test_files_are_canonical(dump_mock):
|
|
open_mock = mock_open()
|
|
with patch('graphene_django.management.commands.graphql_schema.open', open_mock):
|
|
management.call_command('graphql_schema', schema='')
|
|
|
|
open_mock.assert_called_once()
|
|
|
|
dump_mock.assert_called_once()
|
|
assert dump_mock.call_args[1]["sort_keys"], "json.mock() should be used to sort the output"
|
|
assert dump_mock.call_args[1]["indent"] > 0, "output should be pretty-printed by default"
|