From 06a5174c69cf7a4dc122fb1258fd1ea65043f1a1 Mon Sep 17 00:00:00 2001 From: Eugenia Grieff <egrieff@gitlab.com> Date: Fri, 16 Aug 2019 16:10:50 +0000 Subject: [PATCH] Update epic start and due date when adding issues - Update an epic start and due dates (if these are not fixed) when adding this epic to a new issue with milestone - Cover the case that uses quick actions in the issue description to add the epic --- app/services/issues/create_service.rb | 2 ++ ee/app/services/ee/issues/create_service.rb | 32 +++++++++++++++++ ...-t-work-when-using-epic-in-a-new-issue.yml | 5 +++ .../services/issues/create_service_spec.rb | 35 ++++++++++++++++++- 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 ee/app/services/ee/issues/create_service.rb create mode 100644 ee/changelogs/unreleased/11750-epic-dates-from-milestones-don-t-work-when-using-epic-in-a-new-issue.yml diff --git a/app/services/issues/create_service.rb b/app/services/issues/create_service.rb index 5793a15e1bc4..8d1df0d87a71 100644 --- a/app/services/issues/create_service.rb +++ b/app/services/issues/create_service.rb @@ -49,3 +49,5 @@ def user_agent_detail_service end end end + +Issues::CreateService.prepend_if_ee('EE::Issues::CreateService') diff --git a/ee/app/services/ee/issues/create_service.rb b/ee/app/services/ee/issues/create_service.rb new file mode 100644 index 000000000000..549d2fdae3f2 --- /dev/null +++ b/ee/app/services/ee/issues/create_service.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module EE + module Issues + module CreateService + extend ::Gitlab::Utils::Override + + override :before_create + def before_create(issue) + handle_issue_epic_link(issue) + + super + end + + def handle_issue_epic_link(issue) + return unless params.key?(:epic) + + epic_param = params.delete(:epic) + + if epic_param + EpicIssues::CreateService.new(epic_param, current_user, { target_issuable: issue }).execute + else + link = EpicIssue.find_by_issue_id(issue.id) + + return unless link + + EpicIssues::DestroyService.new(link, current_user).execute + end + end + end + end +end diff --git a/ee/changelogs/unreleased/11750-epic-dates-from-milestones-don-t-work-when-using-epic-in-a-new-issue.yml b/ee/changelogs/unreleased/11750-epic-dates-from-milestones-don-t-work-when-using-epic-in-a-new-issue.yml new file mode 100644 index 000000000000..9e541c9b71dc --- /dev/null +++ b/ee/changelogs/unreleased/11750-epic-dates-from-milestones-don-t-work-when-using-epic-in-a-new-issue.yml @@ -0,0 +1,5 @@ +--- +title: Update epic dates when creating an issue that adds the epic using commands +merge_request: 15062 +author: +type: fixed diff --git a/ee/spec/services/issues/create_service_spec.rb b/ee/spec/services/issues/create_service_spec.rb index 7611049470c8..7f066b80b1fb 100644 --- a/ee/spec/services/issues/create_service_spec.rb +++ b/ee/spec/services/issues/create_service_spec.rb @@ -2,7 +2,6 @@ describe Issues::CreateService do let(:project) { create(:project) } - let(:opts) do { title: 'Awesome issue', @@ -30,6 +29,7 @@ let(:reporter) { create(:user) } before do + stub_licensed_features(epics: true) project.add_reporter(reporter) end @@ -39,5 +39,38 @@ expect(issue).to be_persisted expect(issue.weight).to eq(9) end + + context 'when epics are enabled' do + let(:group) { create(:group) } + let(:project1) { create(:project, group: group) } + let(:epic) { create(:epic, group: group, start_date_is_fixed: false, due_date_is_fixed: false) } + + before do + stub_licensed_features(epics: true) + group.add_reporter(reporter) + project1.add_reporter(reporter) + end + + context 'when using quick actions' do + context 'with epic and milestone in commands only' do + let(:milestone) { create(:milestone, group: group, start_date: Date.today, due_date: 7.days.from_now) } + let(:opts) do + { + title: 'Awesome issue', + description: %(/epic #{epic.to_reference}\n/milestone #{milestone.to_reference}") + } + end + + it 'sets epic and milestone to issuable and update epic start and due date' do + issue = described_class.new(project1, reporter, opts).execute + + expect(issue.milestone).to eq(milestone) + expect(issue.epic).to eq(epic) + expect(epic.reload.start_date).to eq(milestone.start_date) + expect(epic.due_date).to eq(milestone.due_date) + end + end + end + end end end -- GitLab