fix: update dataset/query catalog on DB changes (#32829)

This commit is contained in:
Beto Dealmeida
2025-03-26 08:56:02 -04:00
committed by GitHub
parent 5222f940cc
commit 68a81c3989
2 changed files with 102 additions and 4 deletions

View File

@@ -580,3 +580,65 @@ def test_update_other_fields_dont_affect_oauth(
add_pvm.assert_not_called()
database_needs_oauth2.purge_oauth2_tokens.assert_not_called()
def test_update_with_catalog_change(mocker: MockerFixture) -> None:
"""
Test that assets are updated when the main catalog changes.
"""
old_database = mocker.MagicMock(allow_multi_catalog=False)
old_database.get_default_catalog.return_value = "project-A"
old_database.id = 1
new_database = mocker.MagicMock(allow_multi_catalog=False)
new_database.get_default_catalog.return_value = "project-B"
database_dao = mocker.patch("superset.commands.database.update.DatabaseDAO")
database_dao.find_by_id.return_value = old_database
database_dao.update.return_value = new_database
mocker.patch("superset.commands.database.update.SyncPermissionsCommand")
mocker.patch.object(
UpdateDatabaseCommand,
"validate",
)
update_catalog_attribute = mocker.patch.object(
UpdateDatabaseCommand,
"_update_catalog_attribute",
)
UpdateDatabaseCommand(1, {}).run()
update_catalog_attribute.assert_called_once_with(1, "project-B")
def test_update_without_catalog_change(mocker: MockerFixture) -> None:
"""
Test that assets are not updated when the main catalog doesn't change.
"""
old_database = mocker.MagicMock(allow_multi_catalog=False)
old_database.database_name = "Ye Old DB"
old_database.get_default_catalog.return_value = "project-A"
old_database.id = 1
new_database = mocker.MagicMock(allow_multi_catalog=False)
new_database.database_name = "Fancy new DB"
new_database.get_default_catalog.return_value = "project-A"
database_dao = mocker.patch("superset.commands.database.update.DatabaseDAO")
database_dao.find_by_id.return_value = old_database
database_dao.update.return_value = new_database
mocker.patch("superset.commands.database.update.SyncPermissionsCommand")
mocker.patch.object(
UpdateDatabaseCommand,
"validate",
)
update_catalog_attribute = mocker.patch.object(
UpdateDatabaseCommand,
"_update_catalog_attribute",
)
UpdateDatabaseCommand(1, {}).run()
update_catalog_attribute.assert_not_called()