From d7ec3e1dda1d017c723adfd73532be7eadf254fe Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Tue, 7 May 2019 22:50:43 -0700 Subject: Fix Error 500 when inviting user already present A project admin attempting to invite an already-invited user will see a confusing Error 500 message. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/61574 --- app/services/members/create_service.rb | 4 +++- changelogs/unreleased/sh-fix-invited-members.yml | 5 +++++ spec/services/members/create_service_spec.rb | 11 +++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/sh-fix-invited-members.yml diff --git a/app/services/members/create_service.rb b/app/services/members/create_service.rb index f6bad74736c..06874d3ce1c 100644 --- a/app/services/members/create_service.rb +++ b/app/services/members/create_service.rb @@ -23,7 +23,9 @@ module Members members.each do |member| if member.errors.any? - errors << "#{member.user.username}: #{member.errors.full_messages.to_sentence}" + # Invited users may not have an associated user + errors << "#{member.user.username}: " if member.user.present? + errors << member.errors.full_messages.to_sentence else after_execute(member: member) end diff --git a/changelogs/unreleased/sh-fix-invited-members.yml b/changelogs/unreleased/sh-fix-invited-members.yml new file mode 100644 index 00000000000..96e43e1aa53 --- /dev/null +++ b/changelogs/unreleased/sh-fix-invited-members.yml @@ -0,0 +1,5 @@ +--- +title: Fix Error 500 when inviting user already present +merge_request: 28198 +author: +type: fixed diff --git a/spec/services/members/create_service_spec.rb b/spec/services/members/create_service_spec.rb index 2c4fb131ed9..76f0f6b104f 100644 --- a/spec/services/members/create_service_spec.rb +++ b/spec/services/members/create_service_spec.rb @@ -47,4 +47,15 @@ describe Members::CreateService do expect(result[:message]).to include(project_user.username) expect(project.users).not_to include project_user end + + it 'does not add a member with an existing invite' do + invited_member = create(:project_member, :invited, project: project) + + params = { user_ids: invited_member.invite_email, + access_level: Gitlab::Access::GUEST } + result = described_class.new(user, params).execute(project) + + expect(result[:status]).to eq(:error) + expect(result[:message]).to eq('Invite email has already been taken') + end end -- cgit v1.2.1