mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-08-29 23:08:06 +02:00
Fail safed more parts of the code
This commit is contained in:
46
tests/integration/test_get_domain_application_ids.py
Normal file
46
tests/integration/test_get_domain_application_ids.py
Normal file
@@ -0,0 +1,46 @@
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
# Ensure filter_plugins is on the path
|
||||
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
|
||||
sys.path.insert(0, PROJECT_ROOT)
|
||||
|
||||
from filter_plugins.get_all_application_ids import get_all_application_ids
|
||||
|
||||
class TestGetDomainApplicationIds(unittest.TestCase):
|
||||
"""
|
||||
Integration test to verify that all string literals passed to get_domain()
|
||||
correspond to valid application_id values defined in roles/*/vars/main.yml.
|
||||
"""
|
||||
|
||||
GET_DOMAIN_PATTERN = re.compile(r"get_domain\(\s*['\"]([^'\"]+)['\"]\s*\)")
|
||||
|
||||
def test_get_domain_literals_are_valid_ids(self):
|
||||
# Collect all application IDs from roles
|
||||
valid_ids = set(get_all_application_ids())
|
||||
|
||||
# Walk through project files
|
||||
invalid_usages = []
|
||||
for root, dirs, files in os.walk(PROJECT_ROOT):
|
||||
# Skip tests directory to avoid matching in test code
|
||||
if 'tests' in root.split(os.sep):
|
||||
continue
|
||||
for fname in files:
|
||||
if not fname.endswith('.py'):
|
||||
continue
|
||||
path = os.path.join(root, fname)
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
for match in self.GET_DOMAIN_PATTERN.finditer(content):
|
||||
literal = match.group(1)
|
||||
if literal not in valid_ids:
|
||||
invalid_usages.append((path, literal))
|
||||
|
||||
if invalid_usages:
|
||||
msgs = [f"{path}: '{lit}' is not a valid application_id" for path, lit in invalid_usages]
|
||||
self.fail("Found invalid get_domain() usages:\n" + "\n".join(msgs))
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
Reference in New Issue
Block a user