mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-08-29 15:06:26 +02:00
Optimized READMEs
This commit is contained in:
2
tests/integration/Todo.md
Normal file
2
tests/integration/Todo.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# Todo
|
||||
- Activate Disabled Test
|
72
tests/integration/disabled_test_readme_schema.py
Normal file
72
tests/integration/disabled_test_readme_schema.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import unittest
|
||||
import re
|
||||
import yaml
|
||||
from pathlib import Path
|
||||
|
||||
# Define the required schema headings
|
||||
REQUIRED_HEADINGS = [
|
||||
"Description",
|
||||
"Overview",
|
||||
"Features",
|
||||
"Further Resources",
|
||||
]
|
||||
|
||||
class TestReadmeSchema(unittest.TestCase):
|
||||
def test_readme_has_required_sections_and_title(self):
|
||||
"""
|
||||
Integration test that verifies each role's README.md contains all required sections
|
||||
and, if vars/main.yml exists, that the title contains the application_id (case-insensitive).
|
||||
"""
|
||||
# Determine the roles directory (two levels up from current file)
|
||||
roles_dir = Path(__file__).parents[2] / 'roles'
|
||||
self.assertTrue(roles_dir.exists(), f"Roles directory not found at {roles_dir}")
|
||||
|
||||
for role_dir in roles_dir.iterdir():
|
||||
if not role_dir.is_dir():
|
||||
continue
|
||||
|
||||
with self.subTest(role=role_dir.name):
|
||||
# Check README.md exists
|
||||
readme_path = role_dir / 'README.md'
|
||||
self.assertTrue(
|
||||
readme_path.exists(),
|
||||
f"Role '{role_dir.name}' is missing a README.md"
|
||||
)
|
||||
|
||||
content = readme_path.read_text(encoding='utf-8')
|
||||
# Verify required headings are present (multiline)
|
||||
for heading in REQUIRED_HEADINGS:
|
||||
pattern = rf"(?m)^##\s+{re.escape(heading)}"
|
||||
self.assertRegex(
|
||||
content,
|
||||
pattern,
|
||||
f"README.md for role '{role_dir.name}' is missing required section: '{heading}'"
|
||||
)
|
||||
|
||||
# If vars/main.yml exists, check application_id and title
|
||||
vars_path = role_dir / 'vars' / 'main.yml'
|
||||
if vars_path.exists():
|
||||
vars_content = vars_path.read_text(encoding='utf-8')
|
||||
try:
|
||||
data = yaml.safe_load(vars_content)
|
||||
except Exception as e:
|
||||
self.fail(f"Failed to parse YAML for role '{role_dir.name}': {e}")
|
||||
|
||||
app_id = data.get('application_id')
|
||||
self.assertIsNotNone(
|
||||
app_id,
|
||||
f"application_id not found in {vars_path} for role '{role_dir.name}'"
|
||||
)
|
||||
|
||||
# Verify README title contains application_id (case-insensitive, multiline)
|
||||
title_regex = re.compile(
|
||||
rf"(?mi)^#.*{re.escape(str(app_id))}.*"
|
||||
)
|
||||
self.assertRegex(
|
||||
content,
|
||||
title_regex,
|
||||
f"README.md title does not contain application_id '{app_id}' for role '{role_dir.name}'"
|
||||
)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
Reference in New Issue
Block a user