summaryrefslogtreecommitdiff
path: root/spec/support/helpers/user_helpers.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/helpers/user_helpers.rb')
-rw-r--r--spec/support/helpers/user_helpers.rb33
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