summaryrefslogtreecommitdiffstats
path: root/test/rules/test_syntax_check.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/rules/test_syntax_check.py')
-rw-r--r--test/rules/test_syntax_check.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/test/rules/test_syntax_check.py b/test/rules/test_syntax_check.py
new file mode 100644
index 0000000..2fe36a3
--- /dev/null
+++ b/test/rules/test_syntax_check.py
@@ -0,0 +1,70 @@
+"""Tests for syntax-check rule."""
+from typing import Any
+
+from ansiblelint.file_utils import Lintable
+from ansiblelint.rules import RulesCollection
+from ansiblelint.runner import Runner
+
+
+def test_get_ansible_syntax_check_matches(
+ default_rules_collection: RulesCollection,
+) -> None:
+ """Validate parsing of ansible output."""
+ lintable = Lintable(
+ "examples/playbooks/conflicting_action.yml",
+ kind="playbook",
+ )
+
+ result = Runner(lintable, rules=default_rules_collection).run()
+
+ assert result[0].lineno == 4
+ assert result[0].column == 7
+ assert (
+ result[0].message
+ == "conflicting action statements: ansible.builtin.debug, ansible.builtin.command"
+ )
+ # We internally convert absolute paths returned by ansible into paths
+ # relative to current directory.
+ assert result[0].filename.endswith("/conflicting_action.yml")
+ assert len(result) == 1
+
+
+def test_empty_playbook(default_rules_collection: RulesCollection) -> None:
+ """Validate detection of empty-playbook."""
+ lintable = Lintable("examples/playbooks/empty_playbook.yml", kind="playbook")
+ result = Runner(lintable, rules=default_rules_collection).run()
+ assert result[0].lineno == 1
+ # We internally convert absolute paths returned by ansible into paths
+ # relative to current directory.
+ assert result[0].filename.endswith("/empty_playbook.yml")
+ assert result[0].tag == "syntax-check[empty-playbook]"
+ assert result[0].message == "Empty playbook, nothing to do"
+ assert len(result) == 1
+
+
+def test_extra_vars_passed_to_command(
+ default_rules_collection: RulesCollection,
+ config_options: Any,
+) -> None:
+ """Validate `extra-vars` are passed to syntax check command."""
+ config_options.extra_vars = {
+ "foo": "bar",
+ "complex_variable": ":{;\t$()",
+ }
+ lintable = Lintable("examples/playbooks/extra_vars.yml", kind="playbook")
+
+ result = Runner(lintable, rules=default_rules_collection).run()
+
+ assert not result
+
+
+def test_syntax_check_role() -> None:
+ """Validate syntax check of a broken role."""
+ lintable = Lintable("examples/playbooks/roles/invalid_due_syntax", kind="role")
+ rules = RulesCollection()
+ result = Runner(lintable, rules=rules).run()
+ assert len(result) == 1, result
+ assert result[0].lineno == 2
+ assert result[0].filename == "examples/roles/invalid_due_syntax/tasks/main.yml"
+ assert result[0].tag == "syntax-check[specific]"
+ assert result[0].message == "no module/action detected in task."