import importlib.util import os import sys import tempfile import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] SERVER_PATH = ROOT / "admin-web" / "server.py" def load_server(tmpdir: Path): os.environ["GOTELEGRAM_BACKUP_DIR"] = str(tmpdir / "backups") os.environ["GOTELEGRAM_DIR"] = str(tmpdir / "gotelegram") module_name = "gotelegram_admin_server_test" sys.modules.pop(module_name, None) spec = importlib.util.spec_from_file_location(module_name, SERVER_PATH) module = importlib.util.module_from_spec(spec) assert spec.loader is not None spec.loader.exec_module(module) return module class AdminFeatureTests(unittest.TestCase): def test_backup_path_accepts_only_local_archives(self): with tempfile.TemporaryDirectory() as raw: tmpdir = Path(raw) server = load_server(tmpdir) server.BACKUP_DIR.mkdir(parents=True) good = server.BACKUP_DIR / "gotelegram_backup_20260425_120000.tar.gz" good.write_text("backup", encoding="utf-8") encrypted = server.BACKUP_DIR / "gotelegram_backup_20260425_120001.tar.gz.enc" encrypted.write_text("backup", encoding="utf-8") legacy = server.BACKUP_DIR / "backup_20260425_120002.tar.gz" legacy.write_text("backup", encoding="utf-8") self.assertEqual(server.safe_backup_path(good.name), good.resolve()) self.assertEqual(server.safe_backup_path(encrypted.name), encrypted.resolve()) self.assertEqual(server.safe_backup_path(legacy.name), legacy.resolve()) with self.assertRaises(ValueError): server.safe_backup_path("../outside.tar.gz") with self.assertRaises(ValueError): server.safe_backup_path("gotelegram_backup_20260425_120000.tar.gz.sha256") with self.assertRaises(FileNotFoundError): server.safe_backup_path("missing.tar.gz") def test_backup_schedule_calendar_rejects_unknown_values(self): with tempfile.TemporaryDirectory() as raw: server = load_server(Path(raw)) self.assertEqual(server.backup_schedule_calendar("daily"), "*-*-* 03:20:00") self.assertEqual(server.backup_schedule_calendar("weekly"), "Sun 03:20:00") self.assertEqual(server.backup_schedule_calendar("monthly"), "*-*-01 03:20:00") self.assertIsNone(server.backup_schedule_calendar("off")) with self.assertRaises(ValueError): server.backup_schedule_calendar("hourly") if __name__ == "__main__": unittest.main()