from __future__ import annotations import tempfile from pathlib import Path from django.test import TestCase from pobsync.config.load import load_global_config, load_host_config from pobsync_backend.config_repository import export_runtime_configs from pobsync_backend.models import GlobalConfig, HostConfig class ConfigRepositoryTests(TestCase): def test_exports_database_configs_to_engine_yaml(self) -> None: with tempfile.TemporaryDirectory() as tmp: prefix = Path(tmp) GlobalConfig.objects.create( name="default", backup_root="/backups", pobsync_home=str(prefix), ssh_user="backup", ssh_port=2222, rsync_args=["--archive"], excludes_default=["/proc/***"], retention_daily=7, retention_weekly=4, retention_monthly=3, retention_yearly=1, data={ "backup_root": "/ignored", "pobsync_home": "/ignored", "ssh": {"user": "ignored", "port": 22, "options": []}, "unknown": "must-not-leak", "retention_defaults": {"daily": 99, "weekly": 99, "monthly": 99, "yearly": 99}, }, ) HostConfig.objects.create( host="web-01", address="web-01.example.test", ssh_user="root", includes=[], excludes_add=["/tmp/***"], retention_daily=7, retention_weekly=4, retention_monthly=3, retention_yearly=1, config={ "host": "ignored", "address": "ignored", "retention": {"daily": 99, "weekly": 99, "monthly": 99, "yearly": 99}, "excludes_add": ["/ignored/***"], "unknown": "must-not-leak", }, ) written = export_runtime_configs(prefix=prefix, host="web-01") self.assertEqual(len(written), 2) global_cfg = load_global_config(prefix / "config" / "global.yaml") host_cfg = load_host_config(prefix / "config" / "hosts" / "web-01.yaml") self.assertEqual(global_cfg["backup_root"], "/backups") self.assertEqual(global_cfg["pobsync_home"], str(prefix)) self.assertEqual(global_cfg["ssh"]["user"], "backup") self.assertEqual(global_cfg["ssh"]["port"], 2222) self.assertEqual(global_cfg["retention_defaults"]["daily"], 7) self.assertEqual(host_cfg["host"], "web-01") self.assertEqual(host_cfg["address"], "web-01.example.test") self.assertEqual(host_cfg["retention"]["daily"], 7) self.assertEqual(host_cfg["excludes_add"], ["/tmp/***"]) self.assertNotIn("unknown", global_cfg) self.assertNotIn("unknown", host_cfg)