diff --git a/ee/app/services/ee/issues/base_service.rb b/ee/app/services/ee/issues/base_service.rb index 7c9dd4e2f9bef57aefc667669a7b9fa0fb73f936..9a0d2351f370054d602ff0a6ac393ccbc729f516 100644 --- a/ee/app/services/ee/issues/base_service.rb +++ b/ee/app/services/ee/issues/base_service.rb @@ -31,7 +31,8 @@ def handle_epic(issue) def set_epic_param(issue) return unless epic_param_present? - epic = epic_param || find_epic(issue) + epic_id = params.delete(:epic_id) + epic = epic_param || find_epic(issue, epic_id) unless epic params[:epic] = nil @@ -45,8 +46,7 @@ def set_epic_param(issue) params[:epic] = epic end - def find_epic(issue) - epic_id = params.delete(:epic_id) + def find_epic(issue, epic_id) return if epic_id.to_i == 0 group = issue.project.group diff --git a/ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb b/ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb index 3b614bb339bcd2b314628d41a05f673cd2494846..ecda44c87c9d53915bb947d39e94d03b2cf839b5 100644 --- a/ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb +++ b/ee/spec/support/shared_examples/services/issue_epic_shared_examples.rb @@ -61,6 +61,31 @@ end end + context 'when epic param is also present' do + context 'when epic_id belongs to another valid epic' do + let(:other_epic) { create(:epic, group: group) } + let(:params) { { title: 'issue1', epic: epic, epic_id: other_epic.id } } + + it 'creates epic issue link based on the epic param' do + issue = execute + + expect(issue.reload).to be_persisted + expect(issue.epic).to eq(epic) + end + end + + context 'when epic_id is empty' do + let(:params) { { title: 'issue1', epic: epic, epic_id: '' } } + + it 'creates epic issue link based on the epic param' do + issue = execute + + expect(issue.reload).to be_persisted + expect(issue.epic).to eq(epic) + end + end + end + context 'when a project is from a subgroup of the epic group' do before do subgroup = create(:group, parent: group)