diff --git a/ee/app/services/concerns/epics/sync_as_work_item.rb b/ee/app/services/concerns/epics/sync_as_work_item.rb index 0dd9d6e4949c35393f4b0fb4316dc86af4af0f8b..f3e8087088d2623f1bb62a3e06235c47107e3eec 100644 --- a/ee/app/services/concerns/epics/sync_as_work_item.rb +++ b/ee/app/services/concerns/epics/sync_as_work_item.rb @@ -75,7 +75,7 @@ def sync_color(epic, work_item) work_item_color = work_item.color || work_item.build_color # only set non default color or remove the color if default color is set to epic - if epic.color.to_s == ::Epic::DEFAULT_COLOR.to_s + if epic.color.to_s == ::Epic::DEFAULT_COLOR.to_s && work_item.color.new_record? work_item.color = nil else work_item_color.color = epic.color diff --git a/ee/spec/services/epics/create_service_spec.rb b/ee/spec/services/epics/create_service_spec.rb index a21cea8badb4bf5acc7e5606c46874eafa2070db..00e950cd45046d249882d95a573637d5baa64f9c 100644 --- a/ee/spec/services/epics/create_service_spec.rb +++ b/ee/spec/services/epics/create_service_spec.rb @@ -101,6 +101,14 @@ end end + context 'when epic color is set to default' do + let(:params) { { title: 'some epic', color: ::Epic::DEFAULT_COLOR } } + + it_behaves_like 'syncs all data from an epic to a work item' do + let(:epic) { Epic.last } + end + end + context 'when date params are not set and is_fixed is false' do let!(:params) do { diff --git a/ee/spec/services/epics/update_service_spec.rb b/ee/spec/services/epics/update_service_spec.rb index 867cf0e9bef126d7a8383b35551689c871b7052e..c903be9580773ed9cd75257c8e7cbe6c5ced76d0 100644 --- a/ee/spec/services/epics/update_service_spec.rb +++ b/ee/spec/services/epics/update_service_spec.rb @@ -907,6 +907,18 @@ def update_issuable(update_params) end end + context 'with epic color' do + let_it_be_with_reload(:epic) { create(:epic, group: group, color: '#ffffff') } + + let(:opts) { { color: ::Epic::DEFAULT_COLOR } } + + before do + create(:color, work_item: epic.work_item, color: epic.color) + end + + it_behaves_like 'syncs all data from an epic to a work item' + end + context 'description tasks' do context 'when marking a task as done' do let_it_be(:description) { '- [ ] Task' } @@ -935,9 +947,7 @@ def update_issuable(update_params) context 'when saving to the work item fails' do before do - allow_next_found_instance_of(::WorkItem) do |instance| - allow(instance).to receive(:save!).and_raise(ActiveRecord::RecordInvalid.new) - end + allow(work_item).to receive(:save!).and_raise(ActiveRecord::RecordInvalid.new) end it 'does not update the epic or the work item' do diff --git a/ee/spec/support/shared_examples/services/epic/sync_work_item_shared_examples.rb b/ee/spec/support/shared_examples/services/epic/sync_work_item_shared_examples.rb index 252cab0601e6d996c14d89f5d4b814a2c761428d..e48711ad86edd522fddb73812f2062f6c02acd0c 100644 --- a/ee/spec/support/shared_examples/services/epic/sync_work_item_shared_examples.rb +++ b/ee/spec/support/shared_examples/services/epic/sync_work_item_shared_examples.rb @@ -43,10 +43,10 @@ epic.reload work_item = epic.work_item - if epic.color == Epic::DEFAULT_COLOR - expect(work_item.color).to be_nil - else + if work_item.color.present? expect(work_item.color.color).to eq(epic.color) + else + expect(epic.color).to eq(Epic::DEFAULT_COLOR) end if epic.parent