@@ -25,7 +25,11 @@ def tearDown(self) -> None:
2525 cur .execute ("DROP SCHEMA IF EXISTS pum_test_data CASCADE;" )
2626 cur .execute ("DROP SCHEMA IF EXISTS pum_custom_migrations_schema CASCADE;" )
2727 cur .execute ("DROP SCHEMA IF EXISTS pum_test_app CASCADE;" )
28+ cur .execute ("DROP SCHEMA IF EXISTS pum_test_data_schema_1 CASCADE;" )
29+ cur .execute ("DROP SCHEMA IF EXISTS pum_test_data_schema_2 CASCADE;" )
2830 cur .execute ("DROP TABLE IF EXISTS public.pum_migrations;" )
31+ cur .execute ("DROP ROLE IF EXISTS pum_test_user;" )
32+ cur .execute ("DROP ROLE IF EXISTS pum_test_viewer;" )
2933
3034 self .tmpdir .cleanup ()
3135 self .tmp = None
@@ -43,7 +47,11 @@ def setUp(self) -> None:
4347 cur .execute ("DROP SCHEMA IF EXISTS pum_test_data CASCADE;" )
4448 cur .execute ("DROP SCHEMA IF EXISTS pum_custom_migrations_schema CASCADE;" )
4549 cur .execute ("DROP SCHEMA IF EXISTS pum_test_app CASCADE;" )
50+ cur .execute ("DROP SCHEMA IF EXISTS pum_test_data_schema_1 CASCADE;" )
51+ cur .execute ("DROP SCHEMA IF EXISTS pum_test_data_schema_2 CASCADE;" )
4652 cur .execute ("DROP TABLE IF EXISTS public.pum_migrations;" )
53+ cur .execute ("DROP ROLE IF EXISTS pum_test_user;" )
54+ cur .execute ("DROP ROLE IF EXISTS pum_test_viewer;" )
4755
4856 self .tmpdir = tempfile .TemporaryDirectory ()
4957 self .tmp = self .tmpdir .name
@@ -465,6 +473,35 @@ def test_upgrade(self) -> None:
465473 upgrader .upgrade (connection = conn )
466474 self .assertEqual (sm .baseline (conn ), Version ("2.0.0" ))
467475
476+ def test_upgrade_with_grant (self ) -> None :
477+ """Test that permissions are granted correctly after upgrade."""
478+ test_dir = Path ("test" ) / "data" / "roles"
479+ cfg = PumConfig .from_yaml (test_dir / ".pum.yaml" )
480+ with psycopg .connect (f"service={ self .pg_service } " ) as conn :
481+ # Install with roles but without granting permissions
482+ Upgrader (cfg ).install (connection = conn , roles = True , grant = False , commit = True )
483+
484+ cur = conn .cursor ()
485+ # Verify viewer role doesn't have SELECT permission initially
486+ cur .execute (
487+ "SELECT has_table_privilege('pum_test_viewer', 'pum_test_data_schema_1.some_table_1', 'SELECT');"
488+ )
489+ self .assertFalse (cur .fetchone ()[0 ])
490+
491+ # Now upgrade with grant=True (even though there are no new changelogs, it should grant permissions)
492+ Upgrader (cfg ).upgrade (connection = conn , grant = True )
493+
494+ # Verify permissions were granted
495+ cur .execute (
496+ "SELECT has_table_privilege('pum_test_viewer', 'pum_test_data_schema_1.some_table_1', 'SELECT');"
497+ )
498+ self .assertTrue (cur .fetchone ()[0 ])
499+
500+ cur .execute (
501+ "SELECT has_table_privilege('pum_test_user', 'pum_test_data_schema_2.some_table_2', 'INSERT');"
502+ )
503+ self .assertTrue (cur .fetchone ()[0 ])
504+
468505
469506if __name__ == "__main__" :
470507 unittest .main ()
0 commit comments