From 926002fdf8d83147cfb577939bd3f8e75da56548 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Mon, 12 Feb 2018 17:29:28 -0800 Subject: [PATCH] Fix Error 500s creating merge requests with external issue tracker When JIRA or Redmine were enabled and the branch name did not match the matching regular expression, the `issue_iid` would be `nil`, preventing users from creating merge requests. Closes #43193 --- app/services/merge_requests/build_service.rb | 8 ++-- .../merge_requests/build_service_spec.rb | 38 ++++++++++++------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index 2ae855d078b..ab6f8ea44a9 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -160,10 +160,12 @@ module MergeRequests merge_request.title = "Resolve \"#{issue.title}\"" if issue.is_a?(Issue) - unless merge_request.title - branch_title = source_branch.downcase.remove(issue_iid.downcase).titleize.humanize + return if merge_request.title.present? + + if issue_iid.present? merge_request.title = "Resolve #{issue_iid}" - merge_request.title += " \"#{branch_title}\"" unless branch_title.empty? + branch_title = source_branch.downcase.remove(issue_iid.downcase).titleize.humanize + merge_request.title += " \"#{branch_title}\"" if branch_title.present? end end diff --git a/spec/services/merge_requests/build_service_spec.rb b/spec/services/merge_requests/build_service_spec.rb index e56d335a7d6..a0d0a4fd81b 100644 --- a/spec/services/merge_requests/build_service_spec.rb +++ b/spec/services/merge_requests/build_service_spec.rb @@ -286,33 +286,43 @@ describe MergeRequests::BuildService do end end - context 'branch starts with JIRA-formatted external issue IID' do - let(:source_branch) { 'EXMPL-12345' } - + describe 'with JIRA enabled' do before do allow(project).to receive(:external_issue_tracker).and_return(true) allow(project).to receive(:issues_enabled?).and_return(false) allow(project).to receive(:external_issue_reference_pattern).and_return(IssueTrackerService.reference_pattern) end - it 'sets the title to the humanized branch title' do - expect(merge_request.title).to eq('Resolve EXMPL-12345') - end - - it 'appends the closes text' do - expect(merge_request.description).to eq('Closes EXMPL-12345') - end - - context 'followed by hyphenated text' do - let(:source_branch) { 'EXMPL-12345-fix-issue' } + context 'branch does not start with JIRA-formatted external issue IID' do + let(:source_branch) { 'test-branch' } it 'sets the title to the humanized branch title' do - expect(merge_request.title).to eq('Resolve EXMPL-12345 "Fix issue"') + expect(merge_request.title).to eq('Test branch') + end + end + + context 'branch starts with JIRA-formatted external issue IID' do + let(:source_branch) { 'EXMPL-12345' } + + it 'sets the title to the humanized branch title' do + expect(merge_request.title).to eq('Resolve EXMPL-12345') end it 'appends the closes text' do expect(merge_request.description).to eq('Closes EXMPL-12345') end + + context 'followed by hyphenated text' do + let(:source_branch) { 'EXMPL-12345-fix-issue' } + + it 'sets the title to the humanized branch title' do + expect(merge_request.title).to eq('Resolve EXMPL-12345 "Fix issue"') + end + + it 'appends the closes text' do + expect(merge_request.description).to eq('Closes EXMPL-12345') + end + end end end end