1414from openedx_authz .engine .filter import Filter
1515from openedx_authz .engine .utils import migrate_policy_between_enforcers
1616
17- global_enforcer = AuthzEnforcer .get_enforcer ()
18-
1917
2018class PolicyLoadingTestSetupMixin (TestCase ):
2119 """Mixin providing policy loading test utilities."""
@@ -65,6 +63,7 @@ def _seed_database_with_policies(self):
6563 during application deployment, separate from runtime policy loading.
6664 """
6765 # Always start with completely clean state
66+ global_enforcer = AuthzEnforcer .get_enforcer ()
6867 global_enforcer .clear_policy ()
6968
7069 migrate_policy_between_enforcers (
@@ -87,6 +86,7 @@ def _load_policies_for_scope(self, scope: str = None):
8786 scope: The scope to load policies for (e.g., 'lib^*' for all libraries).
8887 If None, loads all policies using load_policy().
8988 """
89+ global_enforcer = AuthzEnforcer .get_enforcer ()
9090 if scope is None :
9191 global_enforcer .load_policy ()
9292 else :
@@ -99,6 +99,7 @@ def _load_policies_for_user_context(self, scopes: list[str] = None):
9999 Args:
100100 scopes: List of scopes the user is operating in.
101101 """
102+ global_enforcer = AuthzEnforcer .get_enforcer ()
102103 global_enforcer .clear_policy ()
103104
104105 if scopes :
@@ -116,6 +117,7 @@ def _load_policies_for_role_management(self, role_name: str = None):
116117 Args:
117118 role_name: Specific role to load policies for, if any.
118119 """
120+ global_enforcer = AuthzEnforcer .get_enforcer ()
119121 global_enforcer .clear_policy ()
120122
121123 if role_name :
@@ -131,6 +133,7 @@ def _add_test_policies_for_multiple_scopes(self):
131133 This adds course and organization policies in addition to existing
132134 library policies to create a realistic multi-scope environment.
133135 """
136+ global_enforcer = AuthzEnforcer .get_enforcer ()
134137 test_policies = [
135138 # Course policies
136139 ["role^course_instructor" , "act^edit_course" , "course^*" , "allow" ],
@@ -172,7 +175,7 @@ def setUp(self):
172175
173176 def tearDown (self ):
174177 """Clean up after each test to ensure isolation."""
175- global_enforcer .clear_policy ()
178+ AuthzEnforcer . get_enforcer () .clear_policy ()
176179 super ().tearDown ()
177180
178181 @ddt_data (
@@ -191,6 +194,7 @@ def test_scope_based_policy_loading(self, scope):
191194 - Only scope-relevant policies are loaded
192195 - Policy count matches expected for scope
193196 """
197+ global_enforcer = AuthzEnforcer .get_enforcer ()
194198 expected_policy_count = self ._count_policies_in_file (scope_pattern = scope )
195199 initial_policy_count = len (global_enforcer .get_policy ())
196200
@@ -221,6 +225,7 @@ def test_user_context_policy_loading(self, user_scopes):
221225 - Policies are loaded for user's scopes
222226 - Policy count is reasonable for context
223227 """
228+ global_enforcer = AuthzEnforcer .get_enforcer ()
224229 initial_policy_count = len (global_enforcer .get_policy ())
225230
226231 self ._load_policies_for_user_context (user_scopes )
@@ -241,6 +246,7 @@ def test_role_specific_policy_loading(self, role_name):
241246 - Role-specific policies are loaded
242247 - Loaded policies contain expected role
243248 """
249+ global_enforcer = AuthzEnforcer .get_enforcer ()
244250 initial_policy_count = len (global_enforcer .get_policy ())
245251
246252 self ._load_policies_for_role_management (role_name )
@@ -263,6 +269,7 @@ def test_policy_loading_lifecycle(self):
263269 - Policy counts change appropriately between stages
264270 - No policies exist at startup
265271 """
272+ global_enforcer = AuthzEnforcer .get_enforcer ()
266273 startup_policy_count = len (global_enforcer .get_policy ())
267274
268275 self .assertEqual (startup_policy_count , 0 )
@@ -293,6 +300,7 @@ def test_empty_enforcer_behavior(self):
293300 - Policy queries return empty results
294301 - No enforcement decisions are possible
295302 """
303+ global_enforcer = AuthzEnforcer .get_enforcer ()
296304 initial_policy_count = len (global_enforcer .get_policy ())
297305 all_policies = global_enforcer .get_policy ()
298306 all_grouping_policies = global_enforcer .get_grouping_policy ()
@@ -320,6 +328,7 @@ def test_filtered_policy_loading_variations(self, policy_filter):
320328 - Filtered loading works without errors
321329 - Appropriate policies are loaded based on filter
322330 """
331+ global_enforcer = AuthzEnforcer .get_enforcer ()
323332 initial_policy_count = len (global_enforcer .get_policy ())
324333
325334 global_enforcer .clear_policy ()
@@ -337,6 +346,7 @@ def test_policy_clear_and_reload(self):
337346 - Cleared enforcer has no policies
338347 - Reloading produces same count as initial load
339348 """
349+ global_enforcer = AuthzEnforcer .get_enforcer ()
340350 self ._load_policies_for_scope ("lib^*" )
341351 initial_load_count = len (global_enforcer .get_policy ())
342352
@@ -360,6 +370,7 @@ def test_filtered_loading_by_role(self, role_name):
360370 - Filtered count matches policies in file for that role
361371 - All loaded policies contain the specified role
362372 """
373+ global_enforcer = AuthzEnforcer .get_enforcer ()
363374 expected_count = self ._count_policies_in_file (role = role_name )
364375
365376 self ._load_policies_for_role_management (role_name )
@@ -377,6 +388,7 @@ def test_multi_scope_filtering(self):
377388 - Combined scope filter loads sum of individual scopes
378389 - Total load equals sum of all scope policies
379390 """
391+ global_enforcer = AuthzEnforcer .get_enforcer ()
380392 lib_scope = "lib^*"
381393 course_scope = "course^*"
382394 org_scope = "org^*"
0 commit comments