mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-12-18 14:52:52 +00:00
lint(test,core): remove misplaced test code and fix undefined names
- Import subprocess where used to fix F821 in cli/setup/applications - Remove accidental test methods from RoleDependencyResolver implementation - Remove invalid and non-discoverable test functions from test_role_dependency_resolver - Eliminate test code that was never executed due to wrong scope/indentation - Restore clear separation between production code and unit tests https://chatgpt.com/share/6942c3ec-8a10-800f-9a15-c319f5e93089
This commit is contained in:
@@ -5,6 +5,7 @@ import sys
|
||||
from pathlib import Path
|
||||
from module_utils.dict_renderer import DictRenderer
|
||||
from lookup_plugins.application_gid import LookupModule
|
||||
import subprocess
|
||||
|
||||
def load_yaml_file(path: Path) -> dict:
|
||||
if not path.exists():
|
||||
|
||||
@@ -195,47 +195,6 @@ class RoleDependencyResolver:
|
||||
else:
|
||||
out.add(pattern)
|
||||
|
||||
def test_jinja_mixed_name_glob_matching(self):
|
||||
"""
|
||||
include_role:
|
||||
name: "prefix-{{ item }}-suffix"
|
||||
loop: [x, y]
|
||||
Existing roles: prefix-x-suffix, prefix-y-suffix, prefix-z-suffix
|
||||
|
||||
Expectation:
|
||||
- NO raw loop items ('x', 'y') end up as roles
|
||||
- Glob matching resolves to all three concrete roles
|
||||
"""
|
||||
make_role(self.roles_dir, "A")
|
||||
for rn in ["prefix-x-suffix", "prefix-y-suffix", "prefix-z-suffix"]:
|
||||
make_role(self.roles_dir, rn)
|
||||
|
||||
write(
|
||||
os.path.join(self.roles_dir, "A", "tasks", "main.yml"),
|
||||
"""
|
||||
- name: jinja-mixed glob
|
||||
include_role:
|
||||
name: "prefix-{{ item }}-suffix"
|
||||
loop:
|
||||
- x
|
||||
- y
|
||||
"""
|
||||
)
|
||||
|
||||
r = RoleDependencyResolver(self.roles_dir)
|
||||
deps = r.get_role_dependencies("A")
|
||||
|
||||
# ensure no raw loop items leak into the results
|
||||
self.assertNotIn("x", deps)
|
||||
self.assertNotIn("y", deps)
|
||||
|
||||
# only the resolved role names should be present
|
||||
self.assertEqual(
|
||||
deps,
|
||||
{"prefix-x-suffix", "prefix-y-suffix", "prefix-z-suffix"},
|
||||
)
|
||||
|
||||
|
||||
# -------------------------- meta helpers --------------------------
|
||||
|
||||
def _extract_meta_dependencies(self, role_path: str) -> Set[str]:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import argparse
|
||||
import yaml
|
||||
import sys
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from module_utils.dict_renderer import DictRenderer
|
||||
from lookup_plugins.application_gid import LookupModule
|
||||
|
||||
@@ -195,47 +195,6 @@ class RoleDependencyResolver:
|
||||
else:
|
||||
out.add(pattern)
|
||||
|
||||
def test_jinja_mixed_name_glob_matching(self):
|
||||
"""
|
||||
include_role:
|
||||
name: "prefix-{{ item }}-suffix"
|
||||
loop: [x, y]
|
||||
Existing roles: prefix-x-suffix, prefix-y-suffix, prefix-z-suffix
|
||||
|
||||
Expectation:
|
||||
- NO raw loop items ('x', 'y') end up as roles
|
||||
- Glob matching resolves to all three concrete roles
|
||||
"""
|
||||
make_role(self.roles_dir, "A")
|
||||
for rn in ["prefix-x-suffix", "prefix-y-suffix", "prefix-z-suffix"]:
|
||||
make_role(self.roles_dir, rn)
|
||||
|
||||
write(
|
||||
os.path.join(self.roles_dir, "A", "tasks", "main.yml"),
|
||||
"""
|
||||
- name: jinja-mixed glob
|
||||
include_role:
|
||||
name: "prefix-{{ item }}-suffix"
|
||||
loop:
|
||||
- x
|
||||
- y
|
||||
"""
|
||||
)
|
||||
|
||||
r = RoleDependencyResolver(self.roles_dir)
|
||||
deps = r.get_role_dependencies("A")
|
||||
|
||||
# ensure no raw loop items leak into the results
|
||||
self.assertNotIn("x", deps)
|
||||
self.assertNotIn("y", deps)
|
||||
|
||||
# only the resolved role names should be present
|
||||
self.assertEqual(
|
||||
deps,
|
||||
{"prefix-x-suffix", "prefix-y-suffix", "prefix-z-suffix"},
|
||||
)
|
||||
|
||||
|
||||
# -------------------------- meta helpers --------------------------
|
||||
|
||||
def _extract_meta_dependencies(self, role_path: str) -> Set[str]:
|
||||
|
||||
@@ -95,46 +95,6 @@ class TestRoleDependencyResolver(unittest.TestCase):
|
||||
deps = r.get_role_dependencies("A")
|
||||
self.assertEqual(deps, {"D", "E", "F", "G"})
|
||||
|
||||
def test_jinja_mixed_name_glob_matching(self):
|
||||
"""
|
||||
include_role:
|
||||
name: "prefix-{{ item }}-suffix"
|
||||
loop: [x, y]
|
||||
Existierende Rollen: prefix-x-suffix, prefix-y-suffix, prefix-z-suffix
|
||||
|
||||
Erwartung:
|
||||
- KEINE Roh-Items ('x', 'y') als Rollen
|
||||
- Glob-Matching liefert die drei konkreten Rollen
|
||||
"""
|
||||
make_role(self.roles_dir, "A")
|
||||
for rn in ["prefix-x-suffix", "prefix-y-suffix", "prefix-z-suffix"]:
|
||||
make_role(self.roles_dir, rn)
|
||||
|
||||
write(
|
||||
os.path.join(self.roles_dir, "A", "tasks", "main.yml"),
|
||||
"""
|
||||
- name: jinja-mixed glob
|
||||
include_role:
|
||||
name: "prefix-{{ item }}-suffix"
|
||||
loop:
|
||||
- x
|
||||
- y
|
||||
"""
|
||||
)
|
||||
|
||||
r = RoleDependencyResolver(self.roles_dir)
|
||||
deps = r.get_role_dependencies("A")
|
||||
|
||||
# keine Roh-Loop-Items
|
||||
self.assertNotIn("x", deps)
|
||||
self.assertNotIn("y", deps)
|
||||
|
||||
# erwartete Rollen aus dem Glob-Matching
|
||||
self.assertEqual(
|
||||
deps,
|
||||
{"prefix-x-suffix", "prefix-y-suffix", "prefix-z-suffix"},
|
||||
)
|
||||
|
||||
def test_pure_jinja_ignored_without_loop(self):
|
||||
"""
|
||||
name: "{{ something }}" with no loop should be ignored.
|
||||
@@ -254,37 +214,6 @@ def test_jinja_mixed_name_glob_matching(self):
|
||||
depth_one = r.resolve_transitively(["A"], max_depth=1)
|
||||
self.assertEqual(depth_one, {"A", "B"})
|
||||
|
||||
def test_tolerant_scan_fallback_on_invalid_yaml(self):
|
||||
"""
|
||||
Force yaml.safe_load_all to fail and ensure tolerant scan picks up:
|
||||
- include_role literal name
|
||||
- loop list items
|
||||
"""
|
||||
make_role(self.roles_dir, "A")
|
||||
for rn in ["R1", "R2", "R3"]:
|
||||
make_role(self.roles_dir, rn)
|
||||
|
||||
# Invalid YAML (e.g., stray colon) to trigger exception
|
||||
write(
|
||||
os.path.join(self.roles_dir, "A", "tasks", "broken.yml"),
|
||||
"""
|
||||
include_role:
|
||||
name: R1
|
||||
:: this line breaks YAML ::
|
||||
|
||||
- include_role:
|
||||
name: "{{ item }}"
|
||||
loop:
|
||||
- R2
|
||||
- R3
|
||||
"""
|
||||
)
|
||||
|
||||
r = RoleDependencyResolver(self.roles_dir)
|
||||
inc, imp = r._scan_tasks(os.path.join(self.roles_dir, "A"))
|
||||
self.assertTrue({"R1", "R2", "R3"}.issubset(inc))
|
||||
self.assertEqual(imp, set())
|
||||
|
||||
def test_resolve_transitively_combined_sources(self):
|
||||
"""
|
||||
Combined test: include/import + dependencies (+ optional run_after).
|
||||
|
||||
Reference in New Issue
Block a user