diff options
Diffstat (limited to 'spec/services/members/create_service_spec.rb')
-rw-r--r-- | spec/services/members/create_service_spec.rb | 66 |
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) |