mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-09 05:24:53 +08:00
* Output a more clear configuration error * Performance related improvements in config read handling * Check python 3.6 with travis * Revert the .travis.yml py36 inclusion * Added tests for input error handling * Thanks isort, isorted it out * Make exit() function a bit more aesthetic * Single quote -> double quote docstrings * Whitespace removed
74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
import tempfile
|
|
import typing
|
|
|
|
import pytest
|
|
|
|
from mypy_django_plugin.main import extract_django_settings_module
|
|
|
|
TEMPLATE = """usage: (config)
|
|
...
|
|
[mypy.plugins.django_stubs]
|
|
django_settings_module: str (required)
|
|
...
|
|
(django-stubs) mypy: error: 'django_settings_module' is not set: {}
|
|
"""
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'config_file_contents,message_part',
|
|
[
|
|
pytest.param(
|
|
None,
|
|
'mypy config file is not specified or found',
|
|
id='missing-file',
|
|
),
|
|
pytest.param(
|
|
['[not-really-django-stubs]'],
|
|
'no section [mypy.plugins.django-stubs]',
|
|
id='missing-section',
|
|
),
|
|
pytest.param(
|
|
['[mypy.plugins.django-stubs]',
|
|
'\tnot_django_not_settings_module = badbadmodule'],
|
|
'the setting is not provided',
|
|
id='missing-settings-module',
|
|
),
|
|
pytest.param(
|
|
['[mypy.plugins.django-stubs]'],
|
|
'the setting is not provided',
|
|
id='no-settings-given',
|
|
),
|
|
],
|
|
)
|
|
def test_misconfiguration_handling(capsys, config_file_contents, message_part):
|
|
# type: (typing.Any, typing.List[str], str) -> None
|
|
"""Invalid configuration raises `SystemExit` with a precise error message."""
|
|
with tempfile.NamedTemporaryFile(mode='w+') as config_file:
|
|
if not config_file_contents:
|
|
config_file.close()
|
|
else:
|
|
config_file.write('\n'.join(config_file_contents).expandtabs(4))
|
|
config_file.seek(0)
|
|
|
|
with pytest.raises(SystemExit, match='2'):
|
|
extract_django_settings_module(config_file.name)
|
|
|
|
error_message = TEMPLATE.format(message_part)
|
|
assert error_message == capsys.readouterr().err
|
|
|
|
|
|
def test_correct_configuration() -> None:
|
|
"""Django settings module gets extracted given valid configuration."""
|
|
config_file_contents = [
|
|
'[mypy.plugins.django-stubs]',
|
|
'\tsome_other_setting = setting',
|
|
'\tdjango_settings_module = my.module',
|
|
]
|
|
with tempfile.NamedTemporaryFile(mode='w+') as config_file:
|
|
config_file.write('\n'.join(config_file_contents).expandtabs(4))
|
|
config_file.seek(0)
|
|
|
|
extracted = extract_django_settings_module(config_file.name)
|
|
|
|
assert extracted == 'my.module'
|