From 997dda50f4567cf218df80c0fd5fe64afb18bf2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eva=20Kadlecova=CC=81?= Date: Sun, 9 Sep 2018 20:08:21 +0200 Subject: [PATCH] Add system note when due date is changed --- app/helpers/system_note_helper.rb | 3 ++- app/models/system_note_metadata.rb | 2 +- .../issuable/common_system_notes_service.rb | 5 ++++ app/services/system_note_service.rb | 20 ++++++++++++++++ .../38208-due-dates-system-notes.yml | 5 ++++ spec/services/system_note_service_spec.rb | 24 +++++++++++++++++++ 6 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/38208-due-dates-system-notes.yml diff --git a/app/helpers/system_note_helper.rb b/app/helpers/system_note_helper.rb index 5b4a141dbcf..b0826e23e31 100644 --- a/app/helpers/system_note_helper.rb +++ b/app/helpers/system_note_helper.rb @@ -21,7 +21,8 @@ module SystemNoteHelper 'outdated' => 'pencil-square', 'duplicate' => 'issue-duplicate', 'locked' => 'lock', - 'unlocked' => 'lock-open' + 'unlocked' => 'lock-open', + 'due_date' => 'calendar' }.freeze def system_note_icon_name(note) diff --git a/app/models/system_note_metadata.rb b/app/models/system_note_metadata.rb index 376ef673ca8..6fadbcefa53 100644 --- a/app/models/system_note_metadata.rb +++ b/app/models/system_note_metadata.rb @@ -15,7 +15,7 @@ class SystemNoteMetadata < ActiveRecord::Base commit description merge confidential visible label assignee cross_reference title time_tracking branch milestone discussion task moved opened closed merged duplicate locked unlocked - outdated tag + outdated tag due_date ].freeze validates :note, presence: true diff --git a/app/services/issuable/common_system_notes_service.rb b/app/services/issuable/common_system_notes_service.rb index 028b350ca07..b1efebaf388 100644 --- a/app/services/issuable/common_system_notes_service.rb +++ b/app/services/issuable/common_system_notes_service.rb @@ -17,6 +17,7 @@ module Issuable create_labels_note(old_labels) if issuable.labels != old_labels create_discussion_lock_note if issuable.previous_changes.include?('discussion_locked') create_milestone_note if issuable.previous_changes.include?('milestone_id') + create_due_date_note if issuable.previous_changes.include?('due_date') end private @@ -88,6 +89,10 @@ module Issuable SystemNoteService.change_milestone(issuable, issuable.project, current_user, issuable.milestone) end + def create_due_date_note + SystemNoteService.change_due_date(issuable, issuable.project, current_user, issuable.due_date) + end + def create_discussion_lock_note SystemNoteService.discussion_lock(issuable, current_user) end diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index dda89830179..ba6709c010b 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -160,6 +160,26 @@ module SystemNoteService create_note(NoteSummary.new(noteable, project, author, body, action: 'milestone')) end + # Called when the due_date of a Noteable is changed + # + # noteable - Noteable object + # project - Project owning noteable + # author - User performing the change + # due_date - Due date being assigned, or nil + # + # Example Note text: + # + # "removed due date" + # + # "changed due date to September 20, 2018" + # + # Returns the created Note object + def change_due_date(noteable, project, author, due_date) + body = due_date ? "changed due date to #{due_date.to_s(:long)}" : 'removed due date' + + create_note(NoteSummary.new(noteable, project, author, body, action: 'due_date')) + end + # Called when the estimated time of a Noteable is changed # # noteable - Noteable object diff --git a/changelogs/unreleased/38208-due-dates-system-notes.yml b/changelogs/unreleased/38208-due-dates-system-notes.yml new file mode 100644 index 00000000000..60e09ff64de --- /dev/null +++ b/changelogs/unreleased/38208-due-dates-system-notes.yml @@ -0,0 +1,5 @@ +--- +title: Add system note when due date is changed +merge_request: +author: Eva Kadlecova +type: added diff --git a/spec/services/system_note_service_spec.rb b/spec/services/system_note_service_spec.rb index 442de61f69b..4ce324d5671 100644 --- a/spec/services/system_note_service_spec.rb +++ b/spec/services/system_note_service_spec.rb @@ -288,6 +288,30 @@ describe SystemNoteService do end end + describe '.change_due_date' do + subject { described_class.change_due_date(noteable, project, author, due_date) } + + let(:due_date) { Date.today } + + it_behaves_like 'a system note' do + let(:action) { 'due_date' } + end + + context 'when due date added' do + it 'sets the note text' do + expect(subject.note).to eq "changed due date to #{Date.today.to_s(:long)}" + end + end + + context 'when due date removed' do + let(:due_date) { nil } + + it 'sets the note text' do + expect(subject.note).to eq 'removed due date' + end + end + end + describe '.change_status' do subject { described_class.change_status(noteable, project, author, status, source) }