Removes all labels from project boards when moving and issue to done

This commit is contained in:
Douglas Barbosa Alexandre 2016-10-05 14:50:44 -03:00
parent 104c4f88cd
commit 8b15e328a6
2 changed files with 20 additions and 16 deletions

View File

@ -53,7 +53,7 @@ module Boards
if moving_to_list.movable? if moving_to_list.movable?
moving_from_list.label_id moving_from_list.label_id
else else
board.lists.movable.pluck(:label_id) project.boards.joins(:lists).merge(List.movable).pluck(:label_id)
end end
Array(label_ids).compact Array(label_ids).compact

View File

@ -4,16 +4,16 @@ describe Boards::Issues::MoveService, services: true do
describe '#execute' do describe '#execute' do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:empty_project) } let(:project) { create(:empty_project) }
let(:board) { create(:board, project: project) } let(:board1) { create(:board, project: project) }
let(:bug) { create(:label, project: project, name: 'Bug') } let(:bug) { create(:label, project: project, name: 'Bug') }
let(:development) { create(:label, project: project, name: 'Development') } let(:development) { create(:label, project: project, name: 'Development') }
let(:testing) { create(:label, project: project, name: 'Testing') } let(:testing) { create(:label, project: project, name: 'Testing') }
let!(:backlog) { create(:backlog_list, board: board) } let!(:backlog) { create(:backlog_list, board: board1) }
let!(:list1) { create(:list, board: board, label: development, position: 0) } let!(:list1) { create(:list, board: board1, label: development, position: 0) }
let!(:list2) { create(:list, board: board, label: testing, position: 1) } let!(:list2) { create(:list, board: board1, label: testing, position: 1) }
let!(:done) { create(:done_list, board: board) } let!(:done) { create(:done_list, board: board1) }
before do before do
project.team << [user, :developer] project.team << [user, :developer]
@ -22,7 +22,7 @@ describe Boards::Issues::MoveService, services: true do
context 'when moving from backlog' do context 'when moving from backlog' do
it 'adds the label of the list it goes to' do it 'adds the label of the list it goes to' do
issue = create(:labeled_issue, project: project, labels: [bug]) issue = create(:labeled_issue, project: project, labels: [bug])
params = { board_id: board.id, from_list_id: backlog.id, to_list_id: list1.id } params = { board_id: board1.id, from_list_id: backlog.id, to_list_id: list1.id }
described_class.new(project, user, params).execute(issue) described_class.new(project, user, params).execute(issue)
@ -33,7 +33,7 @@ describe Boards::Issues::MoveService, services: true do
context 'when moving to backlog' do context 'when moving to backlog' do
it 'removes all list-labels' do it 'removes all list-labels' do
issue = create(:labeled_issue, project: project, labels: [bug, development, testing]) issue = create(:labeled_issue, project: project, labels: [bug, development, testing])
params = { board_id: board.id, from_list_id: list1.id, to_list_id: backlog.id } params = { board_id: board1.id, from_list_id: list1.id, to_list_id: backlog.id }
described_class.new(project, user, params).execute(issue) described_class.new(project, user, params).execute(issue)
@ -44,7 +44,7 @@ describe Boards::Issues::MoveService, services: true do
context 'when moving from backlog to done' do context 'when moving from backlog to done' do
it 'closes the issue' do it 'closes the issue' do
issue = create(:labeled_issue, project: project, labels: [bug]) issue = create(:labeled_issue, project: project, labels: [bug])
params = { board_id: board.id, from_list_id: backlog.id, to_list_id: done.id } params = { board_id: board1.id, from_list_id: backlog.id, to_list_id: done.id }
described_class.new(project, user, params).execute(issue) described_class.new(project, user, params).execute(issue)
issue.reload issue.reload
@ -56,7 +56,7 @@ describe Boards::Issues::MoveService, services: true do
context 'when moving an issue between lists' do context 'when moving an issue between lists' do
let(:issue) { create(:labeled_issue, project: project, labels: [bug, development]) } let(:issue) { create(:labeled_issue, project: project, labels: [bug, development]) }
let(:params) { { board_id: board.id, from_list_id: list1.id, to_list_id: list2.id } } let(:params) { { board_id: board1.id, from_list_id: list1.id, to_list_id: list2.id } }
it 'delegates the label changes to Issues::UpdateService' do it 'delegates the label changes to Issues::UpdateService' do
expect_any_instance_of(Issues::UpdateService).to receive(:execute).with(issue).once expect_any_instance_of(Issues::UpdateService).to receive(:execute).with(issue).once
@ -72,8 +72,12 @@ describe Boards::Issues::MoveService, services: true do
end end
context 'when moving to done' do context 'when moving to done' do
let(:issue) { create(:labeled_issue, project: project, labels: [bug, development, testing]) } let(:board2) { create(:board, project: project) }
let(:params) { { board_id: board.id, from_list_id: list2.id, to_list_id: done.id } } let(:regression) { create(:label, project: project, name: 'Regression') }
let!(:list3) { create(:list, board: board2, label: regression, position: 1) }
let(:issue) { create(:labeled_issue, project: project, labels: [bug, development, testing, regression]) }
let(:params) { { board_id: board1.id, from_list_id: list2.id, to_list_id: done.id } }
it 'delegates the close proceedings to Issues::CloseService' do it 'delegates the close proceedings to Issues::CloseService' do
expect_any_instance_of(Issues::CloseService).to receive(:execute).with(issue).once expect_any_instance_of(Issues::CloseService).to receive(:execute).with(issue).once
@ -81,7 +85,7 @@ describe Boards::Issues::MoveService, services: true do
described_class.new(project, user, params).execute(issue) described_class.new(project, user, params).execute(issue)
end end
it 'removes all list-labels and close the issue' do it 'removes all list-labels from project boards and close the issue' do
described_class.new(project, user, params).execute(issue) described_class.new(project, user, params).execute(issue)
issue.reload issue.reload
@ -92,7 +96,7 @@ describe Boards::Issues::MoveService, services: true do
context 'when moving from done' do context 'when moving from done' do
let(:issue) { create(:labeled_issue, :closed, project: project, labels: [bug]) } let(:issue) { create(:labeled_issue, :closed, project: project, labels: [bug]) }
let(:params) { { board_id: board.id, from_list_id: done.id, to_list_id: list2.id } } let(:params) { { board_id: board1.id, from_list_id: done.id, to_list_id: list2.id } }
it 'delegates the re-open proceedings to Issues::ReopenService' do it 'delegates the re-open proceedings to Issues::ReopenService' do
expect_any_instance_of(Issues::ReopenService).to receive(:execute).with(issue).once expect_any_instance_of(Issues::ReopenService).to receive(:execute).with(issue).once
@ -112,7 +116,7 @@ describe Boards::Issues::MoveService, services: true do
context 'when moving from done to backlog' do context 'when moving from done to backlog' do
it 'reopens the issue' do it 'reopens the issue' do
issue = create(:labeled_issue, :closed, project: project, labels: [bug]) issue = create(:labeled_issue, :closed, project: project, labels: [bug])
params = { board_id: board.id, from_list_id: done.id, to_list_id: backlog.id } params = { board_id: board1.id, from_list_id: done.id, to_list_id: backlog.id }
described_class.new(project, user, params).execute(issue) described_class.new(project, user, params).execute(issue)
issue.reload issue.reload
@ -124,7 +128,7 @@ describe Boards::Issues::MoveService, services: true do
context 'when moving to same list' do context 'when moving to same list' do
let(:issue) { create(:labeled_issue, project: project, labels: [bug, development]) } let(:issue) { create(:labeled_issue, project: project, labels: [bug, development]) }
let(:params) { { board_id: board.id, from_list_id: list1.id, to_list_id: list1.id } } let(:params) { { board_id: board1.id, from_list_id: list1.id, to_list_id: list1.id } }
it 'returns false' do it 'returns false' do
expect(described_class.new(project, user, params).execute(issue)).to eq false expect(described_class.new(project, user, params).execute(issue)).to eq false