991169ba5a
Group the three upgrade-path suites (legacy->designs, hardware-> properties, pre-migration DB backup) under tests/migrations/ with clearer names. Pure relocation via git mv; each keeps its own self-contained fixtures. No behavior change; 627 passed. ha-relevant: no
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""
|
|
Tests for automatic DB backup before migrations.
|
|
"""
|
|
import os
|
|
|
|
os.environ.setdefault("SECRET_KEY", "test-only-secret-key-not-for-production")
|
|
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from app.db.database import _backup_db
|
|
|
|
|
|
@pytest.fixture()
|
|
def tmp_db(tmp_path: Path):
|
|
db = tmp_path / "homelab.db"
|
|
db.write_bytes(b"SQLite placeholder")
|
|
return db
|
|
|
|
|
|
def test_backup_created_when_db_exists(tmp_db: Path):
|
|
with patch("app.db.database.settings") as mock_settings, \
|
|
patch("app.db.database.APP_VERSION", "1.9"):
|
|
mock_settings.sqlite_path = str(tmp_db)
|
|
_backup_db()
|
|
backup = tmp_db.parent / "homelab.db.back-1.9"
|
|
assert backup.exists()
|
|
assert backup.read_bytes() == b"SQLite placeholder"
|
|
|
|
|
|
def test_backup_skipped_when_db_missing(tmp_path: Path):
|
|
with patch("app.db.database.settings") as mock_settings, \
|
|
patch("app.db.database.APP_VERSION", "1.9"):
|
|
mock_settings.sqlite_path = str(tmp_path / "nonexistent.db")
|
|
_backup_db()
|
|
assert not any(tmp_path.glob("*.back-*"))
|
|
|
|
|
|
def test_backup_idempotent_second_call_no_overwrite(tmp_db: Path):
|
|
with patch("app.db.database.settings") as mock_settings, \
|
|
patch("app.db.database.APP_VERSION", "1.9"):
|
|
mock_settings.sqlite_path = str(tmp_db)
|
|
_backup_db()
|
|
backup = tmp_db.parent / "homelab.db.back-1.9"
|
|
backup.write_bytes(b"original backup")
|
|
_backup_db()
|
|
assert backup.read_bytes() == b"original backup"
|
|
|
|
|
|
def test_backup_version_in_filename(tmp_db: Path):
|
|
with patch("app.db.database.settings") as mock_settings, \
|
|
patch("app.db.database.APP_VERSION", "2.0"):
|
|
mock_settings.sqlite_path = str(tmp_db)
|
|
_backup_db()
|
|
assert (tmp_db.parent / "homelab.db.back-2.0").exists()
|