import subprocess import sys from pathlib import Path from app.settings import load_settings BACKEND = Path(__file__).resolve().parents[1] def run_manage(*args, env, cwd): return subprocess.run([sys.executable, str(BACKEND / "manage.py"), *args], capture_output=True, text=True, env=env, cwd=cwd) def base_env(tmp_path, monkeypatch): env_file = tmp_path / "backup-dashboard.env" monkeypatch.setenv("BACKUP_DASH_ENV_FILE", str(env_file)) monkeypatch.delenv("BACKUP_DASH_DB", raising=False) return env_file, {"BACKUP_DASH_ENV_FILE": str(env_file), "PYTHONPATH": str(BACKEND), "PATH": "/usr/bin:/bin"} def test_env_file_supplies_db_path_and_real_env_wins(tmp_path, monkeypatch): env_file, _ = base_env(tmp_path, monkeypatch) env_file.write_text('# comment\nBACKUP_DASH_DB="/srv/from-file.db"\nBACKUP_DASH_RETENTION_DAYS=120\n') assert load_settings().db_path == Path("/srv/from-file.db") assert load_settings().retention_days == 120 monkeypatch.setenv("BACKUP_DASH_DB", "/srv/from-env.db") assert load_settings().db_path == Path("/srv/from-env.db") def test_manage_refuses_to_create_db_implicitly(tmp_path, monkeypatch): _, env = base_env(tmp_path, monkeypatch) workdir = tmp_path / "somewhere-else" workdir.mkdir() r = run_manage("create-key", "k", env=env, cwd=workdir) assert r.returncode != 0 assert "Database not found" in r.stderr assert not (workdir / "backup-dashboard.db").exists() def test_manage_uses_db_from_env_file(tmp_path, monkeypatch): env_file, env = base_env(tmp_path, monkeypatch) service_db = tmp_path / "service.db" env_file.write_text(f"BACKUP_DASH_DB={service_db}\n") assert run_manage("--create", "list-keys", env=env, cwd=tmp_path).returncode == 0 # service's first start workdir = tmp_path / "somewhere-else" workdir.mkdir() r = run_manage("create-key", "veeam-acme", env=env, cwd=workdir) assert r.returncode == 0, r.stderr assert str(service_db) in r.stderr assert "veeam-acme" in run_manage("list-keys", env=env, cwd=tmp_path).stdout assert not (workdir / "backup-dashboard.db").exists()