mirror of
https://github.com/nvbn/thefuck.git
synced 2025-10-30 14:44:05 +00:00
#357 Add exclude_rules settings option
This commit is contained in:
@@ -39,17 +39,20 @@ class TestSettingsFromFile(object):
|
||||
wait_command=10,
|
||||
require_confirmation=True,
|
||||
no_colors=True,
|
||||
priority={'vim': 100})
|
||||
priority={'vim': 100},
|
||||
exclude_rules=['git'])
|
||||
settings = conf.get_settings(Mock())
|
||||
assert settings.rules == ['test']
|
||||
assert settings.wait_command == 10
|
||||
assert settings.require_confirmation is True
|
||||
assert settings.no_colors is True
|
||||
assert settings.priority == {'vim': 100}
|
||||
assert settings.exclude_rules == ['git']
|
||||
|
||||
def test_from_file_with_DEFAULT(self, load_source):
|
||||
load_source.return_value = Mock(rules=conf.DEFAULT_RULES + ['test'],
|
||||
wait_command=10,
|
||||
exclude_rules=[],
|
||||
require_confirmation=True,
|
||||
no_colors=True)
|
||||
settings = conf.get_settings(Mock())
|
||||
@@ -60,12 +63,14 @@ class TestSettingsFromFile(object):
|
||||
class TestSettingsFromEnv(object):
|
||||
def test_from_env(self, environ):
|
||||
environ.update({'THEFUCK_RULES': 'bash:lisp',
|
||||
'THEFUCK_EXCLUDE_RULES': 'git:vim',
|
||||
'THEFUCK_WAIT_COMMAND': '55',
|
||||
'THEFUCK_REQUIRE_CONFIRMATION': 'true',
|
||||
'THEFUCK_NO_COLORS': 'false',
|
||||
'THEFUCK_PRIORITY': 'bash=10:lisp=wrong:vim=15'})
|
||||
settings = conf.get_settings(Mock())
|
||||
assert settings.rules == ['bash', 'lisp']
|
||||
assert settings.exclude_rules == ['git', 'vim']
|
||||
assert settings.wait_command == 55
|
||||
assert settings.require_confirmation is True
|
||||
assert settings.no_colors is False
|
||||
|
||||
@@ -22,23 +22,39 @@ def test_load_rule(mocker):
|
||||
|
||||
|
||||
class TestGetRules(object):
|
||||
@pytest.fixture(autouse=True)
|
||||
@pytest.fixture
|
||||
def glob(self, mocker):
|
||||
return mocker.patch('thefuck.corrector.Path.glob', return_value=[])
|
||||
results = {}
|
||||
mocker.patch('thefuck.corrector.Path.glob',
|
||||
new_callable=lambda: lambda *_: results.pop('value', []))
|
||||
return lambda value: results.update({'value': value})
|
||||
|
||||
def _compare_names(self, rules, names):
|
||||
return [r.name for r in rules] == names
|
||||
|
||||
@pytest.mark.parametrize('conf_rules, rules', [
|
||||
(conf.DEFAULT_RULES, ['bash', 'lisp', 'bash', 'lisp']),
|
||||
(types.RulesNamesList(['bash']), ['bash', 'bash'])])
|
||||
def test_get(self, monkeypatch, glob, conf_rules, rules):
|
||||
glob.return_value = [PosixPath('bash.py'), PosixPath('lisp.py')]
|
||||
@pytest.fixture(autouse=True)
|
||||
def load_source(self, monkeypatch):
|
||||
monkeypatch.setattr('thefuck.corrector.load_source',
|
||||
lambda x, _: Rule(x))
|
||||
assert self._compare_names(
|
||||
corrector.get_rules(Path('~'), Mock(rules=conf_rules, priority={})),
|
||||
rules)
|
||||
|
||||
def _compare_names(self, rules, names):
|
||||
assert {r.name for r in rules} == set(names)
|
||||
|
||||
def _prepare_rules(self, rules):
|
||||
if rules == conf.DEFAULT_RULES:
|
||||
return rules
|
||||
else:
|
||||
return types.RulesNamesList(rules)
|
||||
|
||||
@pytest.mark.parametrize('paths, conf_rules, exclude_rules, loaded_rules', [
|
||||
(['git.py', 'bash.py'], conf.DEFAULT_RULES, [], ['git', 'bash']),
|
||||
(['git.py', 'bash.py'], ['git'], [], ['git']),
|
||||
(['git.py', 'bash.py'], conf.DEFAULT_RULES, ['git'], ['bash']),
|
||||
(['git.py', 'bash.py'], ['git'], ['git'], [])])
|
||||
def test_get_rules(self, glob, paths, conf_rules, exclude_rules, loaded_rules):
|
||||
glob([PosixPath(path) for path in paths])
|
||||
settings = Mock(rules=self._prepare_rules(conf_rules),
|
||||
priority={},
|
||||
exclude_rules=self._prepare_rules(exclude_rules))
|
||||
rules = corrector.get_rules(Path('~'), settings)
|
||||
self._compare_names(rules, loaded_rules)
|
||||
|
||||
|
||||
class TestIsRuleMatch(object):
|
||||
|
||||
Reference in New Issue
Block a user