summaryrefslogtreecommitdiffstats
path: root/tests/forbid_new_submodules_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/forbid_new_submodules_test.py')
-rw-r--r--tests/forbid_new_submodules_test.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/forbid_new_submodules_test.py b/tests/forbid_new_submodules_test.py
new file mode 100644
index 0000000..0326d94
--- /dev/null
+++ b/tests/forbid_new_submodules_test.py
@@ -0,0 +1,57 @@
+import os
+import subprocess
+from unittest import mock
+
+import pytest
+
+from pre_commit_hooks.forbid_new_submodules import main
+from testing.util import git_commit
+
+
+@pytest.fixture
+def git_dir_with_git_dir(tmpdir):
+ with tmpdir.as_cwd():
+ subprocess.check_call(('git', 'init', '.'))
+ git_commit('--allow-empty', '-m', 'init')
+ subprocess.check_call(('git', 'init', 'foo'))
+ git_commit('--allow-empty', '-m', 'init', cwd=str(tmpdir.join('foo')))
+ yield
+
+
+@pytest.mark.parametrize(
+ 'cmd',
+ (
+ # Actually add the submodule
+ ('git', 'submodule', 'add', './foo'),
+ # Sneaky submodule add (that doesn't show up in .gitmodules)
+ ('git', 'add', 'foo'),
+ ),
+)
+def test_main_new_submodule(git_dir_with_git_dir, capsys, cmd):
+ subprocess.check_call(cmd)
+ assert main(('random_non-related_file',)) == 0
+ assert main(('foo',)) == 1
+ out, _ = capsys.readouterr()
+ assert out.startswith('foo: new submodule introduced\n')
+
+
+def test_main_new_submodule_committed(git_dir_with_git_dir, capsys):
+ rev_parse_cmd = ('git', 'rev-parse', 'HEAD')
+ from_ref = subprocess.check_output(rev_parse_cmd).decode().strip()
+ subprocess.check_call(('git', 'submodule', 'add', './foo'))
+ git_commit('-m', 'new submodule')
+ to_ref = subprocess.check_output(rev_parse_cmd).decode().strip()
+ with mock.patch.dict(
+ os.environ,
+ {'PRE_COMMIT_FROM_REF': from_ref, 'PRE_COMMIT_TO_REF': to_ref},
+ ):
+ assert main(('random_non-related_file',)) == 0
+ assert main(('foo',)) == 1
+ out, _ = capsys.readouterr()
+ assert out.startswith('foo: new submodule introduced\n')
+
+
+def test_main_no_new_submodule(git_dir_with_git_dir):
+ open('test.py', 'a+').close()
+ subprocess.check_call(('git', 'add', 'test.py'))
+ assert main(('test.py',)) == 0