Add endpoint to allow users to move lists

parent 4f45d113
class Projects::BoardListsController < Projects::ApplicationController class Projects::BoardListsController < Projects::ApplicationController
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
def create def create
list = Boards::Lists::CreateService.new(project, list_params).execute list = Boards::Lists::CreateService.new(project, list_params).execute
...@@ -11,9 +13,29 @@ class Projects::BoardListsController < Projects::ApplicationController ...@@ -11,9 +13,29 @@ class Projects::BoardListsController < Projects::ApplicationController
end end
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 private
def record_not_found(exception)
render json: { error: exception.message }, status: :not_found
end
def list_params def list_params
params.require(:list).permit(:label_id) params.require(:list).permit(:label_id)
end end
def move_params
params.require(:list).permit(:position).merge(id: params[:id])
end
end end
...@@ -857,7 +857,7 @@ Rails.application.routes.draw do ...@@ -857,7 +857,7 @@ Rails.application.routes.draw do
end end
resource :board, only: [:show] do resource :board, only: [:show] do
resources :lists, only: [:create], controller: :board_lists resources :lists, only: [:create, :update], controller: :board_lists
end end
resources :todos, only: [:create] resources :todos, only: [:create]
......
...@@ -46,4 +46,56 @@ describe Projects::BoardListsController do ...@@ -46,4 +46,56 @@ describe Projects::BoardListsController do
end end
end 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 end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment