import pytest from backend.database import MIGRATIONS, Database, MigrationRunner from tools.database import main def test_status_uses_configured_data_directory(tmp_path, monkeypatch, capsys) -> None: monkeypatch.setenv("APP_ENV", "test") monkeypatch.setenv("APP_DATA_DIR", str(tmp_path)) monkeypatch.delenv("APP_DATABASE_PATH", raising=False) assert main(["status"]) == 0 assert capsys.readouterr().out.strip() == "available=true schema_version=0" assert (tmp_path / "xiaobai.db").exists() def test_status_reads_an_existing_schema_without_mutating_history( tmp_path, monkeypatch, capsys ) -> None: database_path = tmp_path / "existing.db" MigrationRunner(Database(database_path)).upgrade(MIGRATIONS) monkeypatch.setenv("APP_ENV", "test") monkeypatch.setenv("APP_DATABASE_PATH", str(database_path)) assert main(["status"]) == 0 assert capsys.readouterr().out.strip() == "available=true schema_version=12" def test_downgrade_requires_explicit_confirmation(tmp_path, monkeypatch) -> None: monkeypatch.setenv("APP_ENV", "test") monkeypatch.setenv("APP_DATA_DIR", str(tmp_path)) with pytest.raises(SystemExit, match="confirm-downgrade"): main(["downgrade", "--target", "0"])