diff options
Diffstat (limited to 'spec/support/helpers/access_matchers_helpers.rb')
-rw-r--r-- | spec/support/helpers/access_matchers_helpers.rb | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/spec/support/helpers/access_matchers_helpers.rb b/spec/support/helpers/access_matchers_helpers.rb index 9100f245d36..035653172c1 100644 --- a/spec/support/helpers/access_matchers_helpers.rb +++ b/spec/support/helpers/access_matchers_helpers.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true module AccessMatchersHelpers + include Gitlab::Utils::StrongMemoize + USER_ACCESSOR_METHOD_NAME = 'user' def provide_user(role, membership = nil) @@ -61,11 +63,6 @@ module AccessMatchersHelpers # (or defined by `method_name`) method generated by `let` definition in example group before it's used by `subject`. # This override is per concrete example only because the example group class gets re-created for each example. instance_eval(<<~CODE, __FILE__, __LINE__ + 1) - if instance_variable_get(:@__#{USER_ACCESSOR_METHOD_NAME}_patched) - raise ArgumentError, 'An access matcher be_allowed_for/be_denied_for can be used only once per example (`it` block)' - end - instance_variable_set(:@__#{USER_ACCESSOR_METHOD_NAME}_patched, true) - def #{USER_ACCESSOR_METHOD_NAME} @#{USER_ACCESSOR_METHOD_NAME} ||= User.find(#{user.id}) end @@ -81,6 +78,13 @@ module AccessMatchersHelpers end end + def reset_matcher_environment + instance_eval(<<~CODE, __FILE__, __LINE__ + 1) + clear_memoization(:#{USER_ACCESSOR_METHOD_NAME}) + undef #{USER_ACCESSOR_METHOD_NAME} if defined? user + CODE + end + def run_matcher(action, role, membership, owned_objects) raise_if_non_block_expectation!(action) @@ -91,5 +95,7 @@ module AccessMatchersHelpers else action.call end + + reset_matcher_environment end end |