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