mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-08 03:38:23 +00:00
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
import os
|
|
import glob
|
|
import yaml
|
|
import unittest
|
|
|
|
|
|
def find_application_ids():
|
|
"""
|
|
Scans all roles/*/vars/main.yml files and collects application_id values.
|
|
Returns a dict mapping application_id to list of file paths where it appears.
|
|
"""
|
|
ids = {}
|
|
# Wenn der Test unter tests/integration liegt, gehen wir zwei Ebenen hoch zum Projekt-Root
|
|
base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
|
|
pattern = os.path.join(base_dir, "roles", "*", "vars", "main.yml")
|
|
|
|
for file_path in glob.glob(pattern):
|
|
with open(file_path, "r") as f:
|
|
data = yaml.safe_load(f) or {}
|
|
app_id = data.get("application_id")
|
|
if app_id is not None:
|
|
ids.setdefault(app_id, []).append(file_path)
|
|
return ids
|
|
|
|
|
|
class TestUniqueApplicationId(unittest.TestCase):
|
|
def test_application_ids_are_unique(self):
|
|
ids = find_application_ids()
|
|
duplicates = {app_id: paths for app_id, paths in ids.items() if len(paths) > 1}
|
|
if duplicates:
|
|
messages = []
|
|
for app_id, paths in duplicates.items():
|
|
file_list = "\n ".join(paths)
|
|
messages.append(
|
|
f"application_id '{app_id}' found in multiple files:\n {file_list}"
|
|
)
|
|
self.fail("\n\n".join(messages))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(verbosity=2)
|