From ed9943d0130f4a581156afcf038f2b51fd9cea9f Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 1 Aug 2016 16:23:16 -0300 Subject: [PATCH] Add endpoint to allow users to create a new board list --- .../projects/board_lists_controller.rb | 19 +++++++ config/routes.rb | 4 +- .../projects/board_lists_controller_spec.rb | 49 +++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 app/controllers/projects/board_lists_controller.rb create mode 100644 spec/controllers/projects/board_lists_controller_spec.rb diff --git a/app/controllers/projects/board_lists_controller.rb b/app/controllers/projects/board_lists_controller.rb new file mode 100644 index 00000000000..8100ff7f05d --- /dev/null +++ b/app/controllers/projects/board_lists_controller.rb @@ -0,0 +1,19 @@ +class Projects::BoardListsController < Projects::ApplicationController + def create + list = Boards::Lists::CreateService.new(project, list_params).execute + + respond_to do |format| + if list.valid? + format.json { render json: list.as_json(only: [:id, :list_type, :position], methods: [:title], include: { label: { only: [:id, :title, :color] } }) } + else + format.json { render json: list.errors, status: :unprocessable_entity } + end + end + end + + private + + def list_params + params.require(:list).permit(:label_id) + end +end diff --git a/config/routes.rb b/config/routes.rb index 8e39993493c..1495b130b6e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -856,7 +856,9 @@ Rails.application.routes.draw do end end - resource :board, only: [:show] + resource :board, only: [:show] do + resources :lists, only: [:create], controller: :board_lists + end resources :todos, only: [:create] diff --git a/spec/controllers/projects/board_lists_controller_spec.rb b/spec/controllers/projects/board_lists_controller_spec.rb new file mode 100644 index 00000000000..906edeb1c17 --- /dev/null +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +describe Projects::BoardListsController do + let(:project) { create(:project_with_board) } + let(:user) { create(:user) } + + before do + project.team << [user, :master] + sign_in(user) + end + + describe 'POST #create' do + context 'with valid params' do + let(:label) { create(:label, project: project, name: 'Development') } + + it 'returns a successful 200 response' do + post :create, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list: { label_id: label.id }, + format: :json + + expect(response).to have_http_status(200) + end + + it 'returns the created list' do + post :create, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list: { label_id: label.id }, + format: :json + + expect(response).to match_response_schema('list') + end + end + + context 'with invalid params' do + it 'returns an error' do + post :create, namespace_id: project.namespace.to_param, + project_id: project.to_param, + list: { label_id: nil }, + format: :json + + parsed_response = JSON.parse(response.body) + + expect(parsed_response['label']).to contain_exactly "can't be blank" + expect(response).to have_http_status(422) + end + end + end +end