Add endpoint to allow users to move lists
This commit is contained in:
parent
4f45d11363
commit
0fb9210dbb
3 changed files with 75 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue