Update Boards::CreateService to handle with the has_many association
This commit is contained in:
parent
95a5cc9285
commit
e46a4aabd9
4 changed files with 25 additions and 25 deletions
|
@ -1,16 +1,21 @@
|
|||
module Boards
|
||||
class CreateService < Boards::BaseService
|
||||
def execute
|
||||
create_board! unless project.board.present?
|
||||
project.board
|
||||
if project.boards.empty?
|
||||
create_board!
|
||||
else
|
||||
project.boards.first
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_board!
|
||||
project.create_board
|
||||
project.board.lists.create(list_type: :backlog)
|
||||
project.board.lists.create(list_type: :done)
|
||||
board = project.boards.create
|
||||
board.lists.create(list_type: :backlog)
|
||||
board.lists.create(list_type: :done)
|
||||
|
||||
board
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
FactoryGirl.define do
|
||||
factory :board do
|
||||
project factory: :empty_project
|
||||
|
||||
after(:create) do |board|
|
||||
board.lists.create(list_type: :backlog)
|
||||
board.lists.create(list_type: :done)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -124,12 +124,4 @@ FactoryGirl.define do
|
|||
)
|
||||
end
|
||||
end
|
||||
|
||||
factory :project_with_board, parent: :empty_project do
|
||||
after(:create) do |project|
|
||||
project.create_board
|
||||
project.board.lists.create(list_type: :backlog)
|
||||
project.board.lists.create(list_type: :done)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,33 +2,31 @@ require 'spec_helper'
|
|||
|
||||
describe Boards::CreateService, services: true do
|
||||
describe '#execute' do
|
||||
let(:project) { create(:empty_project) }
|
||||
|
||||
subject(:service) { described_class.new(project, double) }
|
||||
|
||||
context 'when project does not have a board' do
|
||||
let(:project) { create(:empty_project, board: nil) }
|
||||
|
||||
it 'creates a new board' do
|
||||
expect { service.execute }.to change(Board, :count).by(1)
|
||||
end
|
||||
|
||||
it 'creates default lists' do
|
||||
service.execute
|
||||
board = service.execute
|
||||
|
||||
expect(project.board.lists.size).to eq 2
|
||||
expect(project.board.lists.first).to be_backlog
|
||||
expect(project.board.lists.last).to be_done
|
||||
expect(board.lists.size).to eq 2
|
||||
expect(board.lists.first).to be_backlog
|
||||
expect(board.lists.last).to be_done
|
||||
end
|
||||
end
|
||||
|
||||
context 'when project has a board' do
|
||||
let!(:project) { create(:project_with_board) }
|
||||
|
||||
it 'does not create a new board' do
|
||||
expect { service.execute }.not_to change(Board, :count)
|
||||
before do
|
||||
create(:board, project: project)
|
||||
end
|
||||
|
||||
it 'does not create board lists' do
|
||||
expect { service.execute }.not_to change(project.board.lists, :count)
|
||||
it 'does not create a new board' do
|
||||
expect { service.execute }.not_to change(project.boards, :count)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue