33 lines
1.1 KiB
Ruby
33 lines
1.1 KiB
Ruby
# 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
|