summaryrefslogtreecommitdiff
path: root/spec/services/members/create_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/members/create_service_spec.rb')
-rw-r--r--spec/services/members/create_service_spec.rb66
1 files changed, 66 insertions, 0 deletions
diff --git a/spec/services/members/create_service_spec.rb b/spec/services/members/create_service_spec.rb
index 4396a0d3ec3..25437be1e78 100644
--- a/spec/services/members/create_service_spec.rb
+++ b/spec/services/members/create_service_spec.rb
@@ -6,6 +6,7 @@ RSpec.describe Members::CreateService, :aggregate_failures, :clean_gitlab_redis_
let_it_be(:source, reload: true) { create(:project) }
let_it_be(:user) { create(:user) }
let_it_be(:member) { create(:user) }
+ let_it_be(:user_invited_by_id) { create(:user) }
let_it_be(:user_ids) { member.id.to_s }
let_it_be(:access_level) { Gitlab::Access::GUEST }
@@ -49,6 +50,36 @@ RSpec.describe Members::CreateService, :aggregate_failures, :clean_gitlab_redis_
expect(OnboardingProgress.completed?(source.namespace, :user_added)).to be(true)
end
+ context 'when user_id is passed as an integer' do
+ let(:user_ids) { member.id }
+
+ it 'successfully creates member' do
+ expect(execute_service[:status]).to eq(:success)
+ expect(source.users).to include member
+ expect(OnboardingProgress.completed?(source.namespace, :user_added)).to be(true)
+ end
+ end
+
+ context 'with user_ids as an array of integers' do
+ let(:user_ids) { [member.id, user_invited_by_id.id] }
+
+ it 'successfully creates members' do
+ expect(execute_service[:status]).to eq(:success)
+ expect(source.users).to include(member, user_invited_by_id)
+ expect(OnboardingProgress.completed?(source.namespace, :user_added)).to be(true)
+ end
+ end
+
+ context 'with user_ids as an array of strings' do
+ let(:user_ids) { [member.id.to_s, user_invited_by_id.id.to_s] }
+
+ it 'successfully creates members' do
+ expect(execute_service[:status]).to eq(:success)
+ expect(source.users).to include(member, user_invited_by_id)
+ expect(OnboardingProgress.completed?(source.namespace, :user_added)).to be(true)
+ end
+ end
+
context 'when executing on a group' do
let_it_be(:source) { create(:group) }
@@ -112,6 +143,32 @@ RSpec.describe Members::CreateService, :aggregate_failures, :clean_gitlab_redis_
end
end
+ context 'when adding a project_bot' do
+ let_it_be(:project_bot) { create(:user, :project_bot) }
+
+ let(:user_ids) { project_bot.id }
+
+ context 'when project_bot is already a member' do
+ before do
+ source.add_developer(project_bot)
+ end
+
+ it 'does not update the member' do
+ expect(execute_service[:status]).to eq(:error)
+ expect(execute_service[:message]).to eq("#{project_bot.username}: not authorized to update member")
+ expect(OnboardingProgress.completed?(source.namespace, :user_added)).to be(false)
+ end
+ end
+
+ context 'when project_bot is not already a member' do
+ it 'adds the member' do
+ expect(execute_service[:status]).to eq(:success)
+ expect(source.users).to include project_bot
+ expect(OnboardingProgress.completed?(source.namespace, :user_added)).to be(true)
+ end
+ end
+ end
+
context 'when tracking the invite source', :snowplow do
context 'when invite_source is not passed' do
let(:additional_params) { {} }
@@ -191,6 +248,15 @@ RSpec.describe Members::CreateService, :aggregate_failures, :clean_gitlab_redis_
)
end
+ context 'when it is an invite by email passed to user_ids' do
+ let(:user_ids) { 'email@example.org' }
+
+ it 'does not create task issues' do
+ expect(TasksToBeDone::CreateWorker).not_to receive(:perform_async)
+ execute_service
+ end
+ end
+
context 'when passing many user ids' do
before do
stub_licensed_features(multiple_issue_assignees: false)