summaryrefslogtreecommitdiffstats
path: root/test/test_examples.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_examples.py')
-rw-r--r--test/test_examples.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/test/test_examples.py b/test/test_examples.py
new file mode 100644
index 0000000..2842930
--- /dev/null
+++ b/test/test_examples.py
@@ -0,0 +1,102 @@
+"""Assure samples produced desire outcomes."""
+import pytest
+
+from ansiblelint.app import get_app
+from ansiblelint.rules import RulesCollection
+from ansiblelint.runner import Runner
+from ansiblelint.testing import run_ansible_lint
+
+
+def test_example(default_rules_collection: RulesCollection) -> None:
+ """example.yml is expected to have exact number of errors inside."""
+ result = Runner(
+ "examples/playbooks/example.yml",
+ rules=default_rules_collection,
+ ).run()
+ assert len(result) == 22
+
+
+@pytest.mark.parametrize(
+ ("filename", "line", "column"),
+ (
+ pytest.param(
+ "examples/playbooks/syntax-error-string.yml",
+ 6,
+ 7,
+ id="syntax-error",
+ ),
+ pytest.param("examples/playbooks/syntax-error.yml", 2, 3, id="syntax-error"),
+ ),
+)
+def test_example_syntax_error(
+ default_rules_collection: RulesCollection,
+ filename: str,
+ line: int,
+ column: int,
+) -> None:
+ """Validates that loading valid YAML string produce error."""
+ result = Runner(filename, rules=default_rules_collection).run()
+ assert len(result) == 1
+ assert result[0].rule.id == "syntax-check"
+ # This also ensures that line and column numbers start at 1, so they
+ # match what editors will show (or output from other linters)
+ assert result[0].lineno == line
+ assert result[0].column == column
+
+
+def test_example_custom_module(default_rules_collection: RulesCollection) -> None:
+ """custom_module.yml is expected to pass."""
+ app = get_app(offline=True)
+ result = Runner(
+ "examples/playbooks/custom_module.yml",
+ rules=default_rules_collection,
+ ).run()
+ assert len(result) == 0, f"{app.runtime.cache_dir}"
+
+
+def test_vault_full(default_rules_collection: RulesCollection) -> None:
+ """Check ability to process fully vaulted files."""
+ result = Runner(
+ "examples/playbooks/vars/vault_full.yml",
+ rules=default_rules_collection,
+ ).run()
+ assert len(result) == 0
+
+
+def test_vault_partial(
+ default_rules_collection: RulesCollection,
+ caplog: pytest.LogCaptureFixture,
+) -> None:
+ """Check ability to precess files that container !vault inside."""
+ result = Runner(
+ "examples/playbooks/vars/vault_partial.yml",
+ rules=default_rules_collection,
+ ).run()
+ assert len(result) == 0
+ # Ensure that we do not have side-effect extra logging even if the vault
+ # content cannot be decrypted.
+ assert caplog.record_tuples == []
+
+
+def test_custom_kinds() -> None:
+ """Check if user defined kinds are used."""
+ result = run_ansible_lint("-vv", "--offline", "examples/other/")
+ assert result.returncode == 0
+ # .yaml-too is not a recognized extension and unless is manually defined
+ # in our ansible-lint config, the test would not identify it as yaml file.
+ assert "Examining examples/other/some.yaml-too of type yaml" in result.stderr
+ assert "Examining examples/other/some.j2.yaml of type jinja2" in result.stderr
+
+
+def test_bug_3216(capsys: pytest.CaptureFixture[str]) -> None:
+ """Check that we hide ansible-core originating warning about fallback on unique filter."""
+ result = run_ansible_lint(
+ "-vv",
+ "--offline",
+ "examples/playbooks/bug-core-warning-unique-filter-fallback.yml",
+ )
+ captured = capsys.readouterr()
+ assert result.returncode == 0
+ warn_msg = "Falling back to Ansible unique filter"
+ assert warn_msg not in captured.err
+ assert warn_msg not in captured.out