This commit is contained in:
Javanaut
2026-04-12 17:53:56 +02:00
parent 4d4272e5e8
commit 8361fc536b
5 changed files with 182 additions and 14 deletions

View File

@@ -7,6 +7,8 @@ import tempfile
import unittest
from unittest.mock import patch
import click
SRC_ROOT = Path(__file__).resolve().parents[2] / "src"
@@ -165,9 +167,16 @@ class DatabaseContextTests(unittest.TestCase):
finally:
connection.close()
reopened_context = databaseContext(str(self.database_path))
with patch("ffx.database.click.confirm", return_value=True) as mocked_confirm, patch(
"ffx.database.click.echo"
) as mocked_echo:
reopened_context = databaseContext(str(self.database_path))
try:
self.assertEqual(DATABASE_VERSION, getDatabaseVersion(reopened_context))
mocked_confirm.assert_called_once()
backup_path = Path(f"{self.database_path}.v2-to-v3.bak")
self.assertTrue(backup_path.exists())
Session = reopened_context["session"]
session = Session()
@@ -188,6 +197,42 @@ class DatabaseContextTests(unittest.TestCase):
finally:
reopened_context["engine"].dispose()
echoedLines = [call.args[0] for call in mocked_echo.call_args_list]
self.assertIn("Database migration required.", echoedLines)
self.assertIn("Current version: 2", echoedLines)
self.assertIn(f"Target version: {DATABASE_VERSION}", echoedLines)
self.assertIn(
" 2 -> 3: ffx.model.migration.step_2_3 [present]",
echoedLines,
)
def test_database_context_aborts_migration_when_confirmation_is_declined(self):
context = databaseContext(str(self.database_path))
try:
Session = context["session"]
session = Session()
try:
version_row = (
session.query(Property)
.filter(Property.key == DATABASE_VERSION_KEY)
.first()
)
version_row.value = "2"
session.commit()
finally:
session.close()
finally:
context["engine"].dispose()
with patch("ffx.database.click.confirm", return_value=False), patch(
"ffx.database.click.echo"
):
with self.assertRaises(click.ClickException) as raisedContext:
databaseContext(str(self.database_path))
self.assertEqual("Database migration aborted by user.", str(raisedContext.exception))
self.assertFalse(Path(f"{self.database_path}.v2-to-v3.bak").exists())
if __name__ == "__main__":
unittest.main()