mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-07-04 16:03:09 +02:00
66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
import os
|
|
import unittest
|
|
import tempfile
|
|
import shutil
|
|
import yaml
|
|
from pathlib import Path
|
|
import subprocess
|
|
|
|
class TestGenerateDefaultApplicationsUsers(unittest.TestCase):
|
|
def setUp(self):
|
|
# Setup temporary roles directory
|
|
self.temp_dir = Path(tempfile.mkdtemp())
|
|
self.roles_dir = self.temp_dir / "roles"
|
|
self.roles_dir.mkdir()
|
|
|
|
# Sample role with users meta
|
|
self.role = self.roles_dir / "docker-app-with-users"
|
|
(self.role / "vars").mkdir(parents=True)
|
|
(self.role / "meta").mkdir(parents=True)
|
|
|
|
# Write application_id and configuration
|
|
(self.role / "vars" / "main.yml").write_text("application_id: app_with_users\n")
|
|
(self.role / "vars" / "configuration.yml").write_text("setting: value\n")
|
|
|
|
# Write users meta
|
|
users_meta = {
|
|
'users': {
|
|
'alice': {'uid': 2001, 'gid': 2001},
|
|
'bob': {'uid': 2002, 'gid': 2002}
|
|
}
|
|
}
|
|
with (self.role / "meta" / "users.yml").open('w', encoding='utf-8') as f:
|
|
yaml.dump(users_meta, f)
|
|
|
|
# Output file path
|
|
self.output_file = self.temp_dir / "output.yml"
|
|
|
|
def tearDown(self):
|
|
shutil.rmtree(self.temp_dir)
|
|
|
|
def test_users_injection(self):
|
|
"""
|
|
When a users.yml exists with defined users, the script should inject a 'users'
|
|
mapping in the generated YAML, mapping each username to a Jinja2 reference.
|
|
"""
|
|
script_path = Path(__file__).resolve().parents[2] / "cli" / "generate_applications.py"
|
|
result = subprocess.run([
|
|
"python3", str(script_path),
|
|
"--roles-dir", str(self.roles_dir),
|
|
"--output-file", str(self.output_file)
|
|
], capture_output=True, text=True)
|
|
self.assertEqual(result.returncode, 0, msg=result.stderr)
|
|
data = yaml.safe_load(self.output_file.read_text())
|
|
|
|
apps = data.get('defaults_applications', {})
|
|
# Only the app with users should be present
|
|
self.assertIn('app_with_users', apps)
|
|
|
|
# 'users' section should be present and correct
|
|
users_map = apps['app_with_users']['users']
|
|
expected = {'alice': '{{ users["alice"] }}', 'bob': '{{ users["bob"] }}'}
|
|
self.assertEqual(users_map, expected)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|