@@ -374,159 +374,6 @@ def _mutate_config(gateway: str, config: Config):
374374# Grants Integration Tests
375375
376376
377- def test_grants_apply_on_table (
378- engine_adapter : PostgresEngineAdapter , ctx : TestContext , config : Config
379- ):
380- with create_users (engine_adapter , "reader" , "writer" , "admin" ) as roles :
381- table = ctx .table ("grants_test_table" )
382- engine_adapter .create_table (
383- table , {"id" : exp .DataType .build ("INT" ), "name" : exp .DataType .build ("VARCHAR(50)" )}
384- )
385-
386- engine_adapter .execute (f"INSERT INTO { table } VALUES (1, 'test')" )
387-
388- grants_config = {
389- "SELECT" : [roles ["reader" ]["username" ], roles ["admin" ]["username" ]],
390- "INSERT" : [roles ["writer" ]["username" ], roles ["admin" ]["username" ]],
391- "DELETE" : [roles ["admin" ]["username" ]],
392- }
393-
394- engine_adapter ._apply_grants_config (table , grants_config )
395-
396- schema_name = table .db
397- for role_data in roles .values ():
398- engine_adapter .execute (
399- f'GRANT USAGE ON SCHEMA "{ schema_name } " TO "{ role_data ["username" ]} "'
400- )
401-
402- current_grants = engine_adapter ._get_current_grants_config (table )
403-
404- assert "SELECT" in current_grants
405- assert roles ["reader" ]["username" ] in current_grants ["SELECT" ]
406- assert roles ["admin" ]["username" ] in current_grants ["SELECT" ]
407-
408- assert "INSERT" in current_grants
409- assert roles ["writer" ]["username" ] in current_grants ["INSERT" ]
410- assert roles ["admin" ]["username" ] in current_grants ["INSERT" ]
411-
412- assert "DELETE" in current_grants
413- assert roles ["admin" ]["username" ] in current_grants ["DELETE" ]
414-
415- # Reader should be able to SELECT but not INSERT
416- with engine_adapter_for_role (roles ["reader" ], ctx , config ) as reader_adapter :
417- result = reader_adapter .fetchone (f"SELECT COUNT(*) FROM { table } " )
418- assert result == (1 ,), "Reader should be able to SELECT from table"
419-
420- with engine_adapter_for_role (roles ["reader" ], ctx , config ) as reader_adapter :
421- with pytest .raises (Exception ):
422- reader_adapter .execute (f"INSERT INTO { table } VALUES (2, 'test2')" )
423-
424- # Writer should be able to INSERT but not SELECT
425- with engine_adapter_for_role (roles ["writer" ], ctx , config ) as writer_adapter :
426- writer_adapter .execute (f"INSERT INTO { table } VALUES (3, 'test3')" )
427-
428- with engine_adapter_for_role (roles ["writer" ], ctx , config ) as writer_adapter :
429- with pytest .raises (Exception ):
430- writer_adapter .fetchone (f"SELECT COUNT(*) FROM { table } " )
431-
432- # Admin should be able to SELECT, INSERT, and DELETE
433- with engine_adapter_for_role (roles ["admin" ], ctx , config ) as admin_adapter :
434- result = admin_adapter .fetchone (f"SELECT COUNT(*) FROM { table } " )
435- assert result == (2 ,), "Admin should be able to SELECT from table"
436-
437- admin_adapter .execute (f"INSERT INTO { table } VALUES (4, 'test4')" )
438- admin_adapter .execute (f"DELETE FROM { table } WHERE id = 4" )
439-
440-
441- def test_grants_apply_on_view (
442- engine_adapter : PostgresEngineAdapter , ctx : TestContext , config : Config
443- ):
444- with create_users (engine_adapter , "reader" , "admin" ) as roles :
445- base_table = ctx .table ("grants_base_table" )
446- engine_adapter .create_table (
447- base_table ,
448- {"id" : exp .DataType .build ("INT" ), "value" : exp .DataType .build ("VARCHAR(50)" )},
449- )
450-
451- view_table = ctx .table ("grants_test_view" )
452- engine_adapter .create_view (view_table , exp .select ().from_ (base_table ))
453-
454- # Grant schema access for authentication tests
455- test_schema = view_table .db
456- for role_credentials in roles .values ():
457- engine_adapter .execute (
458- f'GRANT USAGE ON SCHEMA "{ test_schema } " TO "{ role_credentials ["username" ]} "'
459- )
460-
461- grants_config = {"SELECT" : [roles ["reader" ]["username" ], roles ["admin" ]["username" ]]}
462-
463- engine_adapter ._apply_grants_config (view_table , grants_config )
464-
465- current_grants = engine_adapter ._get_current_grants_config (view_table )
466- assert "SELECT" in current_grants
467- assert roles ["reader" ]["username" ] in current_grants ["SELECT" ]
468- assert roles ["admin" ]["username" ] in current_grants ["SELECT" ]
469-
470- # Test actual authentication - reader should be able to SELECT from view
471- with engine_adapter_for_role (roles ["reader" ], ctx , config ) as reader_adapter :
472- reader_adapter .fetchone (f"SELECT COUNT(*) FROM { view_table } " )
473-
474-
475- def test_grants_revoke (engine_adapter : PostgresEngineAdapter , ctx : TestContext , config : Config ):
476- with create_users (engine_adapter , "reader" , "writer" ) as roles :
477- table = ctx .table ("grants_revoke_test" )
478- engine_adapter .create_table (table , {"id" : exp .DataType .build ("INT" )})
479- engine_adapter .execute (f"INSERT INTO { table } VALUES (1)" )
480-
481- # Grant schema access for authentication tests
482- test_schema = table .db
483- for role_credentials in roles .values ():
484- engine_adapter .execute (
485- f'GRANT USAGE ON SCHEMA "{ test_schema } " TO "{ role_credentials ["username" ]} "'
486- )
487-
488- initial_grants = {
489- "SELECT" : [roles ["reader" ]["username" ], roles ["writer" ]["username" ]],
490- "INSERT" : [roles ["writer" ]["username" ]],
491- }
492- engine_adapter ._apply_grants_config (table , initial_grants )
493-
494- initial_current_grants = engine_adapter ._get_current_grants_config (table )
495- assert roles ["reader" ]["username" ] in initial_current_grants .get ("SELECT" , [])
496- assert roles ["writer" ]["username" ] in initial_current_grants .get ("SELECT" , [])
497- assert roles ["writer" ]["username" ] in initial_current_grants .get ("INSERT" , [])
498-
499- # Verify reader can SELECT before revoke
500- with engine_adapter_for_role (roles ["reader" ], ctx , config ) as reader_adapter :
501- reader_adapter .fetchone (f"SELECT COUNT(*) FROM { table } " )
502-
503- revoke_grants = {
504- "SELECT" : [roles ["reader" ]["username" ]],
505- "INSERT" : [roles ["writer" ]["username" ]],
506- }
507- engine_adapter ._revoke_grants_config (table , revoke_grants )
508-
509- current_grants_after = engine_adapter ._get_current_grants_config (table )
510-
511- assert roles ["reader" ]["username" ] not in current_grants_after .get ("SELECT" , [])
512- assert roles ["writer" ]["username" ] in current_grants_after .get ("SELECT" , [])
513- assert roles ["writer" ]["username" ] not in current_grants_after .get ("INSERT" , [])
514-
515- # Verify reader can NO LONGER SELECT after revoke
516- with engine_adapter_for_role (roles ["reader" ], ctx , config ) as reader_adapter :
517- with pytest .raises (Exception ):
518- reader_adapter .fetchone (f"SELECT COUNT(*) FROM { table } " )
519-
520- # Verify writer can still SELECT but not INSERT after revoke
521- with engine_adapter_for_role (roles ["writer" ], ctx , config ) as writer_adapter :
522- result = writer_adapter .fetchone (f"SELECT COUNT(*) FROM { table } " )
523- assert result is not None
524- assert result [0 ] == 1
525- with engine_adapter_for_role (roles ["writer" ], ctx , config ) as writer_adapter :
526- with pytest .raises (Exception ):
527- writer_adapter .execute (f"INSERT INTO { table } VALUES (2)" )
528-
529-
530377def test_grants_sync (engine_adapter : PostgresEngineAdapter , ctx : TestContext , config : Config ):
531378 with create_users (engine_adapter , "user1" , "user2" , "user3" ) as roles :
532379 table = ctx .table ("grants_sync_test" )
@@ -538,7 +385,7 @@ def test_grants_sync(engine_adapter: PostgresEngineAdapter, ctx: TestContext, co
538385 "SELECT" : [roles ["user1" ]["username" ], roles ["user2" ]["username" ]],
539386 "INSERT" : [roles ["user1" ]["username" ]],
540387 }
541- engine_adapter ._apply_grants_config (table , initial_grants )
388+ engine_adapter .sync_grants_config (table , initial_grants )
542389
543390 initial_current_grants = engine_adapter ._get_current_grants_config (table )
544391 assert roles ["user1" ]["username" ] in initial_current_grants .get ("SELECT" , [])
@@ -549,7 +396,7 @@ def test_grants_sync(engine_adapter: PostgresEngineAdapter, ctx: TestContext, co
549396 "SELECT" : [roles ["user2" ]["username" ], roles ["user3" ]["username" ]],
550397 "UPDATE" : [roles ["user3" ]["username" ]],
551398 }
552- engine_adapter ._sync_grants_config (table , target_grants )
399+ engine_adapter .sync_grants_config (table , target_grants )
553400
554401 final_grants = engine_adapter ._get_current_grants_config (table )
555402
@@ -572,13 +419,13 @@ def test_grants_sync_empty_config(
572419 "SELECT" : [roles ["user" ]["username" ]],
573420 "INSERT" : [roles ["user" ]["username" ]],
574421 }
575- engine_adapter ._apply_grants_config (table , initial_grants )
422+ engine_adapter .sync_grants_config (table , initial_grants )
576423
577424 initial_current_grants = engine_adapter ._get_current_grants_config (table )
578425 assert roles ["user" ]["username" ] in initial_current_grants .get ("SELECT" , [])
579426 assert roles ["user" ]["username" ] in initial_current_grants .get ("INSERT" , [])
580427
581- engine_adapter ._sync_grants_config (table , {})
428+ engine_adapter .sync_grants_config (table , {})
582429
583430 final_grants = engine_adapter ._get_current_grants_config (table )
584431 assert final_grants == {}
@@ -601,7 +448,7 @@ def test_grants_case_insensitive_grantees(
601448 writer = roles ["test_writer" ]["username" ]
602449
603450 grants_config = {"SELECT" : [reader , writer .upper ()]}
604- engine_adapter ._apply_grants_config (table , grants_config )
451+ engine_adapter .sync_grants_config (table , grants_config )
605452
606453 # Grantees are still in lowercase
607454 current_grants = engine_adapter ._get_current_grants_config (table )
@@ -610,7 +457,7 @@ def test_grants_case_insensitive_grantees(
610457
611458 # Revoke writer
612459 grants_config = {"SELECT" : [reader .upper ()]}
613- engine_adapter ._sync_grants_config (table , grants_config )
460+ engine_adapter .sync_grants_config (table , grants_config )
614461
615462 current_grants = engine_adapter ._get_current_grants_config (table )
616463 assert reader in current_grants .get ("SELECT" , [])
0 commit comments