Refactor meta hooks

This commit is contained in:
Paul Hooijenga 2017-10-28 13:59:11 +02:00
parent a0a8fc15ff
commit 9db827ef9d
8 changed files with 329 additions and 164 deletions

View file

@ -670,104 +670,6 @@ def test_meta_hook_passes(
)
def test_useless_exclude_global(
cap_out, repo_with_passing_hook, mock_out_store_directory,
):
config = OrderedDict((
('exclude', 'foo'),
(
'repos', [
OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
)),
),
),
)),
],
),
))
add_config_to_repo(repo_with_passing_hook, config)
_test_run(
cap_out,
repo_with_passing_hook,
opts={'all_files': True},
expected_outputs=[
b'Check for useless excludes',
b'The global exclude pattern does not match any files',
],
expected_ret=1,
stage=False,
)
def test_useless_exclude_for_hook(
cap_out, repo_with_passing_hook, mock_out_store_directory,
):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude', 'foo'),
)),
),
),
))
add_config_to_repo(repo_with_passing_hook, config)
_test_run(
cap_out,
repo_with_passing_hook,
opts={'all_files': True},
expected_outputs=[
b'Check for useless excludes',
b'The exclude pattern for check-useless-excludes '
b'does not match any files',
],
expected_ret=1,
stage=False,
)
def test_files_match_any(
cap_out, repo_with_passing_hook, mock_out_store_directory,
):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-files-matches-any'),
)),
OrderedDict((
('id', 'check-useless-excludes'),
('files', 'foo'),
)),
),
),
))
add_config_to_repo(repo_with_passing_hook, config)
_test_run(
cap_out,
repo_with_passing_hook,
opts={'all_files': True},
expected_outputs=[
b'Check hooks match any files',
b'The files pattern for check-useless-excludes '
b'does not match any files',
],
expected_ret=1,
stage=False,
)
@pytest.yield_fixture
def modified_config_repo(repo_with_passing_hook):
with modify_config(repo_with_passing_hook, commit=False) as config:

View file

View file

@ -0,0 +1,130 @@
from collections import OrderedDict
from pre_commit.meta_hooks import check_files_matches_any
from pre_commit.util import cwd
from testing.fixtures import add_config_to_repo
from testing.fixtures import git_dir
def test_hook_excludes_everything(
capsys, tempdir_factory, mock_out_store_directory,
):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude', '.pre-commit-config.yaml'),
)),
),
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_files_matches_any.main(argv=[]) == 1
out, _ = capsys.readouterr()
assert 'check-useless-excludes does not apply to this repository' in out
def test_hook_includes_nothing(
capsys, tempdir_factory, mock_out_store_directory,
):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('files', 'foo'),
)),
),
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_files_matches_any.main(argv=[]) == 1
out, _ = capsys.readouterr()
assert 'check-useless-excludes does not apply to this repository' in out
def test_hook_types_not_matched(
capsys, tempdir_factory, mock_out_store_directory,
):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('types', ['python']),
)),
),
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_files_matches_any.main(argv=[]) == 1
out, _ = capsys.readouterr()
assert 'check-useless-excludes does not apply to this repository' in out
def test_hook_types_excludes_everything(
capsys, tempdir_factory, mock_out_store_directory,
):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude_types', ['yaml']),
)),
),
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_files_matches_any.main(argv=[]) == 1
out, _ = capsys.readouterr()
assert 'check-useless-excludes does not apply to this repository' in out
def test_valid_includes(
capsys, tempdir_factory, mock_out_store_directory,
):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
)),
),
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_files_matches_any.main(argv=[]) == 0
out, _ = capsys.readouterr()
assert out == ''

View file

@ -0,0 +1,107 @@
from collections import OrderedDict
from pre_commit.meta_hooks import check_useless_excludes
from pre_commit.util import cwd
from testing.fixtures import add_config_to_repo
from testing.fixtures import git_dir
def test_useless_exclude_global(capsys, tempdir_factory):
config = OrderedDict((
('exclude', 'foo'),
(
'repos', [
OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
)),
),
),
)),
],
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_useless_excludes.main(argv=[]) == 1
out, _ = capsys.readouterr()
assert "The global exclude pattern 'foo' does not match any files" in out
def test_useless_exclude_for_hook(capsys, tempdir_factory):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude', 'foo'),
)),
),
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_useless_excludes.main(argv=[]) == 1
out, _ = capsys.readouterr()
expected = (
"The exclude pattern 'foo' for check-useless-excludes "
"does not match any files"
)
assert expected in out
def test_no_excludes(capsys, tempdir_factory):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
)),
),
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_useless_excludes.main(argv=[]) == 0
out, _ = capsys.readouterr()
assert out == ''
def test_valid_exclude(capsys, tempdir_factory):
config = OrderedDict((
('repo', 'meta'),
(
'hooks', (
OrderedDict((
('id', 'check-useless-excludes'),
('exclude', '.pre-commit-config.yaml'),
)),
),
),
))
repo = git_dir(tempdir_factory)
add_config_to_repo(repo, config)
with cwd(repo):
assert check_useless_excludes.main(argv=[]) == 0
out, _ = capsys.readouterr()
assert out == ''

View file

@ -729,7 +729,7 @@ def test_meta_hook_not_present(store, fake_log_handler):
assert fake_log_handler.handle.call_args[0][0].msg == (
'`i-dont-exist` is not a valid meta hook. '
'Typo? Perhaps it is introduced in a newer version? '
'Often `pre-commit autoupdate` fixes this.'
'Often `pip install --upgrade pre-commit` fixes this.'
)