Update Boards::Lists::CreateService to create lists for a specific board

parent a2c48547
module Boards module Boards
class BaseService < ::BaseService class BaseService < ::BaseService
delegate :board, to: :project
end end
end end
module Boards module Boards
module Lists module Lists
class CreateService < Boards::BaseService class CreateService < Boards::BaseService
def execute def execute(board)
List.transaction do List.transaction do
label = project.labels.find(params[:label_id]) label = project.labels.find(params[:label_id])
position = next_position position = next_position(board)
create_list(label, position) create_list(board, label, position)
end end
end end
private private
def next_position def next_position(board)
max_position = board.lists.movable.maximum(:position) max_position = board.lists.movable.maximum(:position)
max_position.nil? ? 0 : max_position.succ max_position.nil? ? 0 : max_position.succ
end end
def create_list(label, position) def create_list(board, label, position)
board.lists.create(label: label, list_type: :label, position: position) board.lists.create(label: label, list_type: :label, position: position)
end end
end end
......
...@@ -2,8 +2,8 @@ require 'spec_helper' ...@@ -2,8 +2,8 @@ require 'spec_helper'
describe Boards::Lists::CreateService, services: true do describe Boards::Lists::CreateService, services: true do
describe '#execute' do describe '#execute' do
let(:project) { create(:project_with_board) } let(:project) { create(:empty_project) }
let(:board) { project.board } let(:board) { create(:board, project: project) }
let(:user) { create(:user) } let(:user) { create(:user) }
let(:label) { create(:label, project: project, name: 'in-progress') } let(:label) { create(:label, project: project, name: 'in-progress') }
...@@ -11,7 +11,7 @@ describe Boards::Lists::CreateService, services: true do ...@@ -11,7 +11,7 @@ describe Boards::Lists::CreateService, services: true do
context 'when board lists is empty' do context 'when board lists is empty' do
it 'creates a new list at beginning of the list' do it 'creates a new list at beginning of the list' do
list = service.execute list = service.execute(board)
expect(list.position).to eq 0 expect(list.position).to eq 0
end end
...@@ -19,7 +19,7 @@ describe Boards::Lists::CreateService, services: true do ...@@ -19,7 +19,7 @@ describe Boards::Lists::CreateService, services: true do
context 'when board lists has backlog, and done lists' do context 'when board lists has backlog, and done lists' do
it 'creates a new list at beginning of the list' do it 'creates a new list at beginning of the list' do
list = service.execute list = service.execute(board)
expect(list.position).to eq 0 expect(list.position).to eq 0
end end
...@@ -30,7 +30,7 @@ describe Boards::Lists::CreateService, services: true do ...@@ -30,7 +30,7 @@ describe Boards::Lists::CreateService, services: true do
create(:list, board: board, position: 0) create(:list, board: board, position: 0)
create(:list, board: board, position: 1) create(:list, board: board, position: 1)
list = service.execute list = service.execute(board)
expect(list.position).to eq 2 expect(list.position).to eq 2
end end
...@@ -40,7 +40,7 @@ describe Boards::Lists::CreateService, services: true do ...@@ -40,7 +40,7 @@ describe Boards::Lists::CreateService, services: true do
it 'creates a new list at end of the label lists' do it 'creates a new list at end of the label lists' do
list1 = create(:list, board: board, position: 0) list1 = create(:list, board: board, position: 0)
list2 = service.execute list2 = service.execute(board)
expect(list1.reload.position).to eq 0 expect(list1.reload.position).to eq 0
expect(list2.reload.position).to eq 1 expect(list2.reload.position).to eq 1
...@@ -52,7 +52,7 @@ describe Boards::Lists::CreateService, services: true do ...@@ -52,7 +52,7 @@ describe Boards::Lists::CreateService, services: true do
label = create(:label, name: 'in-development') label = create(:label, name: 'in-development')
service = described_class.new(project, user, label_id: label.id) service = described_class.new(project, user, label_id: label.id)
expect { service.execute }.to raise_error(ActiveRecord::RecordNotFound) expect { service.execute(board) }.to raise_error(ActiveRecord::RecordNotFound)
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment