@@ -183,7 +183,12 @@ def test_server_version(make_mocked_engine_adapter: t.Callable, mocker: MockerFi
183183def test_apply_grants_config (make_mocked_engine_adapter : t .Callable ):
184184 adapter = make_mocked_engine_adapter (PostgresEngineAdapter )
185185 relation = exp .to_table ("test_table" , dialect = "postgres" )
186- grants_config = {"SELECT" : ["user1" , "user2" ], "INSERT" : ["admin_user" ]}
186+ grants_config = {
187+ "SELECT" : ["user1" , "user2" ],
188+ "INSERT" : ["admin_user" ],
189+ "UPDATE" : [], # no-op
190+ "DELETE" : [], # no-op
191+ }
187192
188193 adapter ._apply_grants_config (relation , grants_config , DataObjectType .TABLE )
189194
@@ -197,7 +202,12 @@ def test_apply_grants_config(make_mocked_engine_adapter: t.Callable):
197202def test_revoke_grants_config (make_mocked_engine_adapter : t .Callable ):
198203 adapter = make_mocked_engine_adapter (PostgresEngineAdapter )
199204 relation = exp .to_table ("test_table" , dialect = "postgres" )
200- grants_config = {"SELECT" : ["old_user" ], "INSERT" : ["removed_role" ]}
205+ grants_config = {
206+ "SELECT" : ["old_user" ],
207+ "INSERT" : ["removed_role" ],
208+ "UPDATE" : [], # no-op
209+ "DELETE" : [], # no-op
210+ }
201211
202212 adapter ._revoke_grants_config (relation , grants_config , DataObjectType .TABLE )
203213
@@ -242,16 +252,22 @@ def test_sync_grants_config_with_overlaps(
242252):
243253 adapter = make_mocked_engine_adapter (PostgresEngineAdapter )
244254 relation = exp .to_table ("test_schema.test_table" , dialect = "postgres" )
245- new_grants_config = {"SELECT" : ["user1" , "user2" , "user3" ], "INSERT" : ["user2" , "user4" ]}
246255
247256 current_grants = [
248257 ("SELECT" , "user1" ),
249258 ("SELECT" , "user5" ),
250259 ("INSERT" , "user2" ),
251260 ("UPDATE" , "user3" ),
261+ ("DELETE" , "user4" ),
252262 ]
253263 fetchall_mock = mocker .patch .object (adapter , "fetchall" , return_value = current_grants )
254264
265+ new_grants_config = {
266+ "SELECT" : ["user1" , "user2" , "user3" ],
267+ "INSERT" : ["user2" , "user4" ],
268+ # UPDATE will be revoked since it's missing
269+ "DELETE" : [],
270+ }
255271 adapter ._sync_grants_config (relation , new_grants_config )
256272
257273 fetchall_mock .assert_called_once ()
@@ -265,26 +281,13 @@ def test_sync_grants_config_with_overlaps(
265281 )
266282
267283 sql_calls = to_sql_calls (adapter )
268- assert len (sql_calls ) == 4
284+ assert len (sql_calls ) == 5
269285
270286 assert 'GRANT SELECT ON "test_schema"."test_table" TO user2, user3' in sql_calls
271287 assert 'GRANT INSERT ON "test_schema"."test_table" TO user4' in sql_calls
272288 assert 'REVOKE SELECT ON "test_schema"."test_table" FROM user5' in sql_calls
273289 assert 'REVOKE UPDATE ON "test_schema"."test_table" FROM user3' in sql_calls
274-
275-
276- def test_diff_grants_configs (make_mocked_engine_adapter : t .Callable ):
277- new_grants = {"select" : ["USER1" , "USER2" ], "insert" : ["user3" ]}
278- old_grants = {"SELECT" : ["user1" , "user4" ], "UPDATE" : ["user5" ]}
279-
280- adapter = make_mocked_engine_adapter (PostgresEngineAdapter )
281- additions , removals = adapter ._diff_grants_configs (new_grants , old_grants )
282-
283- assert additions ["select" ] == ["USER2" ]
284- assert additions ["insert" ] == ["user3" ]
285-
286- assert removals ["SELECT" ] == ["user4" ]
287- assert removals ["UPDATE" ] == ["user5" ]
290+ assert 'REVOKE DELETE ON "test_schema"."test_table" FROM user4' in sql_calls
288291
289292
290293def test_sync_grants_config_with_default_schema (
@@ -311,3 +314,20 @@ def test_sync_grants_config_with_default_schema(
311314 "WHERE table_schema = 'public' AND table_name = 'test_table' "
312315 "AND grantor = current_role AND grantee <> current_role"
313316 )
317+
318+
319+ def test_diff_grants_configs (make_mocked_engine_adapter : t .Callable ):
320+ new_grants = {"select" : ["USER1" , "USER2" ], "insert" : ["user3" ], "delete" : []}
321+ old_grants = {"SELECT" : ["user1" , "user4" ], "UPDATE" : ["user5" ], "DELETE" : ["user6" ]}
322+
323+ adapter = make_mocked_engine_adapter (PostgresEngineAdapter )
324+ additions , removals = adapter ._diff_grants_configs (new_grants , old_grants )
325+
326+ assert len (additions ) == 2
327+ assert additions ["select" ] == ["USER2" ]
328+ assert additions ["insert" ] == ["user3" ]
329+
330+ assert len (removals ) == 3
331+ assert removals ["SELECT" ] == ["user4" ]
332+ assert removals ["UPDATE" ] == ["user5" ]
333+ assert removals ["DELETE" ] == ["user6" ]
0 commit comments