Monkey patching sucks.

But this makes this stuff at least testable.
This commit is contained in:
Juergen Edelbluth 2018-08-19 10:03:03 +02:00
parent 7b0545ffd3
commit d52d36d4c3
2 changed files with 12 additions and 14 deletions

View File

@ -1,6 +1,6 @@
import configparser import configparser
from os import getenv from os import getenv
from os.path import join, exists, isfile import os.path
from pathlib import Path from pathlib import Path
@ -17,19 +17,19 @@ class ConfigProvider(object):
def discover_config_file_by_name(filename: str, script_dir: str=None, env_var: str='RS500_CONFIG_PATH') -> str: def discover_config_file_by_name(filename: str, script_dir: str=None, env_var: str='RS500_CONFIG_PATH') -> str:
if script_dir is not None: if script_dir is not None:
candidate = join(script_dir, filename) candidate = os.path.join(script_dir, filename)
if exists(candidate) and isfile(candidate): if os.path.exists(candidate) and os.path.isfile(candidate):
return candidate return candidate
if env_var is not None: if env_var is not None:
env_var_value = getenv(env_var, None) env_var_value = getenv(env_var, None)
if env_var_value is not None: if env_var_value is not None:
candidate = join(env_var_value, filename) candidate = os.path.join(env_var_value, filename)
if exists(candidate) and isfile(candidate): if os.path.exists(candidate) and os.path.isfile(candidate):
return candidate return candidate
candidate = join(str(Path.home().absolute()), '.rs500', filename) candidate = os.path.join(str(Path.home().absolute()), '.rs500', filename)
if exists(candidate) and isfile(candidate): if os.path.exists(candidate) and os.path.isfile(candidate):
return candidate return candidate
candidate = join('/etc', filename) candidate = os.path.join('/etc', filename)
if exists(candidate) and isfile(candidate): if os.path.exists(candidate) and os.path.isfile(candidate):
return candidate return candidate
raise FileNotFoundError('Unable to find configuration file "{}"'.format(filename)) raise FileNotFoundError('Unable to find configuration file "{}"'.format(filename))

View File

@ -1,4 +1,4 @@
import os import os.path
import pytest import pytest
from _pytest.monkeypatch import MonkeyPatch from _pytest.monkeypatch import MonkeyPatch
@ -7,11 +7,9 @@ from rs500common.configuration import discover_config_file_by_name
def test_discovery(monkeypatch: MonkeyPatch): def test_discovery(monkeypatch: MonkeyPatch):
def mock(path):
return True
with monkeypatch.context() as m: with monkeypatch.context() as m:
m.setattr(os.path, 'isfile', mock) m.setattr('os.path.isfile', lambda path: True)
m.setattr(os.path, 'exists', mock) m.setattr('os.path.exists', lambda path: True)
result = discover_config_file_by_name('test.ini', '/foo/bar') result = discover_config_file_by_name('test.ini', '/foo/bar')
assert result == os.path.join('/foo/bar', 'test.ini') assert result == os.path.join('/foo/bar', 'test.ini')