| from __future__ import annotations | |
| import pytest | |
| from pre_commit_hooks.check_yaml import main | |
| from testing.util import get_resource_path | |
| @pytest.mark.parametrize( | |
| ('filename', 'expected_retval'), ( | |
| ('bad_yaml.notyaml', 1), | |
| ('ok_yaml.yaml', 0), | |
| ), | |
| ) | |
| def test_main(filename, expected_retval): | |
| ret = main([get_resource_path(filename)]) | |
| assert ret == expected_retval | |
| def test_main_allow_multiple_documents(tmpdir): | |
| f = tmpdir.join('test.yaml') | |
| f.write('---\nfoo\n---\nbar\n') | |
| # should fail without the setting | |
| assert main((str(f),)) | |
| # should pass when we allow multiple documents | |
| assert not main(('--allow-multiple-documents', str(f))) | |
| def test_fails_even_with_allow_multiple_documents(tmpdir): | |
| f = tmpdir.join('test.yaml') | |
| f.write('[') | |
| assert main(('--allow-multiple-documents', str(f))) | |
| def test_main_unsafe(tmpdir): | |
| f = tmpdir.join('test.yaml') | |
| f.write( | |
| 'some_foo: !vault |\n' | |
| ' $ANSIBLE_VAULT;1.1;AES256\n' | |
| ' deadbeefdeadbeefdeadbeef\n', | |
| ) | |
| # should fail "safe" check | |
| assert main((str(f),)) | |
| # should pass when we allow unsafe documents | |
| assert not main(('--unsafe', str(f))) | |
| def test_main_unsafe_still_fails_on_syntax_errors(tmpdir): | |
| f = tmpdir.join('test.yaml') | |
| f.write('[') | |
| assert main(('--unsafe', str(f))) |