Update Boards::CreateService to handle with the has_many association

This commit is contained in:
Douglas Barbosa Alexandre 2016-10-06 16:20:21 -03:00
parent 95a5cc9285
commit e46a4aabd9
4 changed files with 25 additions and 25 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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