diff options
Diffstat (limited to 'spec/support/helpers/user_helpers.rb')
-rw-r--r-- | spec/support/helpers/user_helpers.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/spec/support/helpers/user_helpers.rb b/spec/support/helpers/user_helpers.rb new file mode 100644 index 00000000000..30fa5b3ad8d --- /dev/null +++ b/spec/support/helpers/user_helpers.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module UserHelpers + def create_user_from_membership(target, membership) + generate_user_from_membership(:create, target, membership) + end + + def build_user_from_membership(target, membership) + generate_user_from_membership(:build, target, membership) + end + + private + + # @param method [Symbol] FactoryBot methods :create, :build, :build_stubbed + # @param target [Project, Group] membership target + # @param membership [Symbol] accepts the membership levels :guest, :reporter... + # and pseudo levels :non_member and :anonymous + def generate_user_from_membership(method, target, membership) + case membership + when :anonymous + nil + when :non_member + FactoryBot.send(method, :user, name: membership) + when :admin + FactoryBot.send(method, :user, :admin, name: 'admin') + else + # `.tap` can only be used with `create`, and if we want to `build` a user, + # it is more performant than creating a `project_member` or `group_member` + # with a built user + create(:user, name: membership).tap { |u| target.add_member(u, membership) } + end + end +end |