Add service to generate default board lists
This commit is contained in:
parent
e23d1706fa
commit
68cfdba701
2 changed files with 76 additions and 0 deletions
36
app/services/boards/lists/generate_service.rb
Normal file
36
app/services/boards/lists/generate_service.rb
Normal file
|
@ -0,0 +1,36 @@
|
|||
module Boards
|
||||
module Lists
|
||||
class GenerateService < Boards::BaseService
|
||||
def execute
|
||||
return false unless board.lists.label.empty?
|
||||
|
||||
List.transaction do
|
||||
label_params.each { |params| create_list(params) }
|
||||
end
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_list(params)
|
||||
label = find_or_create_label(params)
|
||||
CreateService.new(project, user, label_id: label.id).execute
|
||||
end
|
||||
|
||||
def find_or_create_label(params)
|
||||
project.labels.create_with(color: params[:color])
|
||||
.find_or_create_by(name: params[:name])
|
||||
end
|
||||
|
||||
def label_params
|
||||
[
|
||||
{ name: 'Development', color: '#5CB85C' },
|
||||
{ name: 'Testing', color: '#F0AD4E' },
|
||||
{ name: 'Production', color: '#FF5F00' },
|
||||
{ name: 'Ready', color: '#FF0000' }
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
40
spec/services/boards/lists/generate_service_spec.rb
Normal file
40
spec/services/boards/lists/generate_service_spec.rb
Normal file
|
@ -0,0 +1,40 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Boards::Lists::GenerateService, services: true do
|
||||
describe '#execute' do
|
||||
let(:project) { create(:project_with_board) }
|
||||
let(:board) { project.board }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
subject(:service) { described_class.new(project, user) }
|
||||
|
||||
context 'when board lists is empty' do
|
||||
it 'creates the default lists' do
|
||||
expect { service.execute }.to change(board.lists, :count).by(4)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when board lists is not empty' do
|
||||
it 'does not creates the default lists' do
|
||||
create(:list, board: board)
|
||||
|
||||
expect { service.execute }.not_to change(board.lists, :count)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when project labels does not contains any list label' do
|
||||
it 'creates labels' do
|
||||
expect { service.execute }.to change(project.labels, :count).by(4)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when project labels contains some of list label' do
|
||||
it 'creates the missing labels' do
|
||||
create(:label, project: project, name: 'Development')
|
||||
create(:label, project: project, name: 'Ready')
|
||||
|
||||
expect { service.execute }.to change(project.labels, :count).by(2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue