@@ -1974,6 +1974,52 @@ def test_user_with_bare_minimum_permissions(connection: _psycopg.Connection) ->
19741974 )
19751975
19761976
1977+ def test_user_with_permissions_via_role (connection : _psycopg .Connection ) -> None :
1978+ schema = "sweet_schema"
1979+ with _cur .get_cursor (connection , logged = True ) as cur :
1980+ cur .execute (f"CREATE SCHEMA { schema } ;" )
1981+ cur .execute (f"REVOKE CREATE ON SCHEMA { schema } FROM PUBLIC;" )
1982+ cur .execute ("DROP ROLE IF EXISTS owner_role;" )
1983+ cur .execute ("CREATE ROLE owner_role CREATEROLE;" )
1984+ cur .execute ("GRANT CREATE, USAGE ON SCHEMA sweet_schema TO owner_role;" )
1985+ cur .execute ("DROP USER IF EXISTS sweet_user;" )
1986+ cur .execute ("CREATE USER sweet_user;" )
1987+ cur .execute ("GRANT owner_role TO sweet_user;" )
1988+ cur .execute ("SET ROLE owner_role;" )
1989+ factories .create_table_for_repacking (
1990+ connection = connection ,
1991+ cur = cur ,
1992+ table_name = "to_repack" ,
1993+ rows = 10 ,
1994+ schema = schema ,
1995+ )
1996+ table_before = _collect_table_info (
1997+ table = "to_repack" ,
1998+ connection = connection ,
1999+ schema = schema ,
2000+ )
2001+ cur .execute ("SET ROLE sweet_user;" )
2002+ repack = Psycopack (
2003+ table = "to_repack" ,
2004+ batch_size = 1 ,
2005+ conn = connection ,
2006+ cur = cur ,
2007+ schema = schema ,
2008+ )
2009+ repack .full ()
2010+ table_after = _collect_table_info (
2011+ table = "to_repack" ,
2012+ connection = connection ,
2013+ schema = schema ,
2014+ )
2015+ _assert_repack (
2016+ table_before = table_before ,
2017+ table_after = table_after ,
2018+ repack = repack ,
2019+ cur = cur ,
2020+ )
2021+
2022+
19772023def test_when_repack_is_reinstantiated_after_swapping (
19782024 connection : _psycopg .Connection ,
19792025) -> None :
0 commit comments