diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-08-01 17:11:56 -0300 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-08-17 12:58:58 -0300 |
commit | 0fb9210dbb38cd45fc8da052317a9aaf830e1db9 (patch) | |
tree | 62a34f98cb2eae7d87352654789a916c3e3427da | |
parent | 4f45d11363c4bedb9a68fc461d931abf6f93b5f0 (diff) | |
download | gitlab-ce-0fb9210dbb38cd45fc8da052317a9aaf830e1db9.tar.gz |
Add endpoint to allow users to move lists
-rw-r--r-- | app/controllers/projects/board_lists_controller.rb | 22 | ||||
-rw-r--r-- | config/routes.rb | 2 | ||||
-rw-r--r-- | spec/controllers/projects/board_lists_controller_spec.rb | 52 |
3 files changed, 75 insertions, 1 deletions
diff --git a/app/controllers/projects/board_lists_controller.rb b/app/controllers/projects/board_lists_controller.rb index 8100ff7f05d..6783341c266 100644 --- a/app/controllers/projects/board_lists_controller.rb +++ b/app/controllers/projects/board_lists_controller.rb @@ -1,4 +1,6 @@ class Projects::BoardListsController < Projects::ApplicationController + rescue_from ActiveRecord::RecordNotFound, with: :record_not_found + def create list = Boards::Lists::CreateService.new(project, list_params).execute @@ -11,9 +13,29 @@ class Projects::BoardListsController < Projects::ApplicationController end end + def update + service = Boards::Lists::MoveService.new(project, move_params) + + respond_to do |format| + if service.execute + format.json { head :ok } + else + format.json { head :unprocessable_entity } + end + end + end + private + def record_not_found(exception) + render json: { error: exception.message }, status: :not_found + end + def list_params params.require(:list).permit(:label_id) end + + def move_params + params.require(:list).permit(:position).merge(id: params[:id]) + end end diff --git a/config/routes.rb b/config/routes.rb index 1495b130b6e..bcf457ca023 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -857,7 +857,7 @@ Rails.application.routes.draw do end resource :board, only: [:show] do - resources :lists, only: [:create], controller: :board_lists + resources :lists, only: [:create, :update], 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 index 906edeb1c17..c34e815c164 100644 --- a/spec/controllers/projects/board_lists_controller_spec.rb +++ b/spec/controllers/projects/board_lists_controller_spec.rb @@ -46,4 +46,56 @@ describe Projects::BoardListsController do end end end + + describe 'PATCH #update' do + let!(:planning) { create(:list, board: project.board, position: 1) } + let!(:development) { create(:list, board: project.board, position: 2) } + + context 'with valid position' do + it 'returns a successful 200 response' do + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: planning.to_param, + list: { position: 2 }, + format: :json + + expect(response).to have_http_status(200) + end + + it 'moves the list to the desired position' do + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: planning.to_param, + list: { position: 2 }, + format: :json + + expect(planning.reload.position).to eq 2 + end + end + + context 'with invalid position' do + it 'returns a unprocessable entity 422 response' do + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: planning.to_param, + list: { position: 6 }, + format: :json + + expect(response).to have_http_status(422) + end + end + + context 'with invalid list id' do + it 'returns a not found 404 response' do + patch :update, namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: 999, + list: { position: 2 }, + format: :json + + expect(response).to have_http_status(404) + end + end + end + end end |