From 247e11c94865b429c400fd9f0d1730c13b0b0c35 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 27 Jul 2016 18:46:03 -0300 Subject: [PATCH] Add service to create a board list --- app/services/boards/lists/create_service.rb | 22 +++++++++++++++++ spec/factories/boards.rb | 5 ++++ spec/factories/lists.rb | 7 ++++++ .../boards/lists/create_service_spec.rb | 24 +++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 app/services/boards/lists/create_service.rb create mode 100644 spec/factories/boards.rb create mode 100644 spec/factories/lists.rb create mode 100644 spec/services/boards/lists/create_service_spec.rb diff --git a/app/services/boards/lists/create_service.rb b/app/services/boards/lists/create_service.rb new file mode 100644 index 00000000000..c6b74148ee1 --- /dev/null +++ b/app/services/boards/lists/create_service.rb @@ -0,0 +1,22 @@ +module Boards + module Lists + class CreateService + def initialize(project, params = {}) + @board = project.board + @params = params.dup + end + + def execute + board.lists.create(params.merge(position: position)) + end + + private + + attr_reader :board, :params + + def position + board.lists.size + end + end + end +end diff --git a/spec/factories/boards.rb b/spec/factories/boards.rb new file mode 100644 index 00000000000..35c4a0b6f08 --- /dev/null +++ b/spec/factories/boards.rb @@ -0,0 +1,5 @@ +FactoryGirl.define do + factory :board do + project factory: :empty_project + end +end diff --git a/spec/factories/lists.rb b/spec/factories/lists.rb new file mode 100644 index 00000000000..4e493da41a0 --- /dev/null +++ b/spec/factories/lists.rb @@ -0,0 +1,7 @@ +FactoryGirl.define do + factory :list do + board + label + sequence(:position) + end +end diff --git a/spec/services/boards/lists/create_service_spec.rb b/spec/services/boards/lists/create_service_spec.rb new file mode 100644 index 00000000000..f173b0e60fd --- /dev/null +++ b/spec/services/boards/lists/create_service_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper' + +describe Boards::Lists::CreateService, services: true do + describe '#execute' do + let(:project) { create(:project_with_board) } + let(:board) { project.board } + let(:label) { create(:label, name: 'in-progress') } + + it 'creates a new list for board' do + service = described_class.new(project, label_id: label.id) + + expect { service.execute }.to change(board.lists, :count).by(1) + end + + it 'inserts the list to the end of lists' do + create_list(:list, 2, board: board) + service = described_class.new(project, label_id: label.id) + + list = service.execute + + expect(list.position).to eq 2 + end + end +end