Update endpoints to handle with board list changes
This commit is contained in:
parent
5de4fba6e3
commit
e1f889df64
2 changed files with 42 additions and 33 deletions
|
@ -5,11 +5,11 @@ module Projects
|
|||
before_action :authorize_read_list!, only: [:index]
|
||||
|
||||
def index
|
||||
render json: serialize_as_json(project.board.lists)
|
||||
render json: serialize_as_json(board.lists)
|
||||
end
|
||||
|
||||
def create
|
||||
list = ::Boards::Lists::CreateService.new(project, current_user, list_params).execute
|
||||
list = ::Boards::Lists::CreateService.new(project, current_user, list_params).execute(board)
|
||||
|
||||
if list.valid?
|
||||
render json: serialize_as_json(list)
|
||||
|
@ -19,7 +19,7 @@ module Projects
|
|||
end
|
||||
|
||||
def update
|
||||
list = project.board.lists.movable.find(params[:id])
|
||||
list = board.lists.movable.find(params[:id])
|
||||
service = ::Boards::Lists::MoveService.new(project, current_user, move_params)
|
||||
|
||||
if service.execute(list)
|
||||
|
@ -30,8 +30,8 @@ module Projects
|
|||
end
|
||||
|
||||
def destroy
|
||||
list = project.board.lists.destroyable.find(params[:id])
|
||||
service = ::Boards::Lists::DestroyService.new(project, current_user, params)
|
||||
list = board.lists.destroyable.find(params[:id])
|
||||
service = ::Boards::Lists::DestroyService.new(project, current_user)
|
||||
|
||||
if service.execute(list)
|
||||
head :ok
|
||||
|
@ -43,8 +43,8 @@ module Projects
|
|||
def generate
|
||||
service = ::Boards::Lists::GenerateService.new(project, current_user)
|
||||
|
||||
if service.execute
|
||||
render json: serialize_as_json(project.board.lists.movable)
|
||||
if service.execute(board)
|
||||
render json: serialize_as_json(board.lists.movable)
|
||||
else
|
||||
head :unprocessable_entity
|
||||
end
|
||||
|
@ -60,6 +60,10 @@ module Projects
|
|||
return render_403 unless can?(current_user, :read_list, project)
|
||||
end
|
||||
|
||||
def board
|
||||
@board ||= project.boards.find(params[:board_id])
|
||||
end
|
||||
|
||||
def list_params
|
||||
params.require(:list).permit(:label_id)
|
||||
end
|
||||
|
|
|
@ -13,7 +13,7 @@ describe Projects::Boards::ListsController do
|
|||
|
||||
describe 'GET index' do
|
||||
it 'returns a successful 200 response' do
|
||||
read_board_list user: user
|
||||
read_board_list user: user, board: board
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(response.content_type).to eq 'application/json'
|
||||
|
@ -22,7 +22,7 @@ describe Projects::Boards::ListsController do
|
|||
it 'returns a list of board lists' do
|
||||
create(:list, board: board)
|
||||
|
||||
read_board_list user: user
|
||||
read_board_list user: user, board: board
|
||||
|
||||
parsed_response = JSON.parse(response.body)
|
||||
|
||||
|
@ -37,17 +37,18 @@ describe Projects::Boards::ListsController do
|
|||
end
|
||||
|
||||
it 'returns a forbidden 403 response' do
|
||||
read_board_list user: user
|
||||
read_board_list user: user, board: board
|
||||
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
def read_board_list(user:)
|
||||
def read_board_list(user:, board:)
|
||||
sign_in(user)
|
||||
|
||||
get :index, namespace_id: project.namespace.to_param,
|
||||
project_id: project.to_param,
|
||||
board_id: board.to_param,
|
||||
format: :json
|
||||
end
|
||||
end
|
||||
|
@ -57,13 +58,13 @@ describe Projects::Boards::ListsController do
|
|||
let(:label) { create(:label, project: project, name: 'Development') }
|
||||
|
||||
it 'returns a successful 200 response' do
|
||||
create_board_list user: user, label_id: label.id
|
||||
create_board_list user: user, board: board, label_id: label.id
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'returns the created list' do
|
||||
create_board_list user: user, label_id: label.id
|
||||
create_board_list user: user, board: board, label_id: label.id
|
||||
|
||||
expect(response).to match_response_schema('list')
|
||||
end
|
||||
|
@ -72,7 +73,7 @@ describe Projects::Boards::ListsController do
|
|||
context 'with invalid params' do
|
||||
context 'when label is nil' do
|
||||
it 'returns a not found 404 response' do
|
||||
create_board_list user: user, label_id: nil
|
||||
create_board_list user: user, board: board, label_id: nil
|
||||
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
|
@ -82,7 +83,7 @@ describe Projects::Boards::ListsController do
|
|||
it 'returns a not found 404 response' do
|
||||
label = create(:label, name: 'Development')
|
||||
|
||||
create_board_list user: user, label_id: label.id
|
||||
create_board_list user: user, board: board, label_id: label.id
|
||||
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
|
@ -93,17 +94,18 @@ describe Projects::Boards::ListsController do
|
|||
it 'returns a forbidden 403 response' do
|
||||
label = create(:label, project: project, name: 'Development')
|
||||
|
||||
create_board_list user: guest, label_id: label.id
|
||||
create_board_list user: guest, board: board, label_id: label.id
|
||||
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
def create_board_list(user:, label_id:)
|
||||
def create_board_list(user:, board:, label_id:)
|
||||
sign_in(user)
|
||||
|
||||
post :create, namespace_id: project.namespace.to_param,
|
||||
project_id: project.to_param,
|
||||
board_id: board.to_param,
|
||||
list: { label_id: label_id },
|
||||
format: :json
|
||||
end
|
||||
|
@ -115,13 +117,13 @@ describe Projects::Boards::ListsController do
|
|||
|
||||
context 'with valid position' do
|
||||
it 'returns a successful 200 response' do
|
||||
move user: user, list: planning, position: 1
|
||||
move user: user, board: board, list: planning, position: 1
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'moves the list to the desired position' do
|
||||
move user: user, list: planning, position: 1
|
||||
move user: user, board: board, list: planning, position: 1
|
||||
|
||||
expect(planning.reload.position).to eq 1
|
||||
end
|
||||
|
@ -129,7 +131,7 @@ describe Projects::Boards::ListsController do
|
|||
|
||||
context 'with invalid position' do
|
||||
it 'returns an unprocessable entity 422 response' do
|
||||
move user: user, list: planning, position: 6
|
||||
move user: user, board: board, list: planning, position: 6
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
end
|
||||
|
@ -137,7 +139,7 @@ describe Projects::Boards::ListsController do
|
|||
|
||||
context 'with invalid list id' do
|
||||
it 'returns a not found 404 response' do
|
||||
move user: user, list: 999, position: 1
|
||||
move user: user, board: board, list: 999, position: 1
|
||||
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
|
@ -145,17 +147,18 @@ describe Projects::Boards::ListsController do
|
|||
|
||||
context 'with unauthorized user' do
|
||||
it 'returns a forbidden 403 response' do
|
||||
move user: guest, list: planning, position: 6
|
||||
move user: guest, board: board, list: planning, position: 6
|
||||
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
def move(user:, list:, position:)
|
||||
def move(user:, board:, list:, position:)
|
||||
sign_in(user)
|
||||
|
||||
patch :update, namespace_id: project.namespace.to_param,
|
||||
project_id: project.to_param,
|
||||
board_id: board.to_param,
|
||||
id: list.to_param,
|
||||
list: { position: position },
|
||||
format: :json
|
||||
|
@ -167,19 +170,19 @@ describe Projects::Boards::ListsController do
|
|||
|
||||
context 'with valid list id' do
|
||||
it 'returns a successful 200 response' do
|
||||
remove_board_list user: user, list: planning
|
||||
remove_board_list user: user, board: board, list: planning
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'removes list from board' do
|
||||
expect { remove_board_list user: user, list: planning }.to change(board.lists, :size).by(-1)
|
||||
expect { remove_board_list user: user, board: board, list: planning }.to change(board.lists, :size).by(-1)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with invalid list id' do
|
||||
it 'returns a not found 404 response' do
|
||||
remove_board_list user: user, list: 999
|
||||
remove_board_list user: user, board: board, list: 999
|
||||
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
|
@ -187,17 +190,18 @@ describe Projects::Boards::ListsController do
|
|||
|
||||
context 'with unauthorized user' do
|
||||
it 'returns a forbidden 403 response' do
|
||||
remove_board_list user: guest, list: planning
|
||||
remove_board_list user: guest, board: board, list: planning
|
||||
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
def remove_board_list(user:, list:)
|
||||
def remove_board_list(user:, board:, list:)
|
||||
sign_in(user)
|
||||
|
||||
delete :destroy, namespace_id: project.namespace.to_param,
|
||||
project_id: project.to_param,
|
||||
board_id: board.to_param,
|
||||
id: list.to_param,
|
||||
format: :json
|
||||
end
|
||||
|
@ -206,13 +210,13 @@ describe Projects::Boards::ListsController do
|
|||
describe 'POST generate' do
|
||||
context 'when board lists is empty' do
|
||||
it 'returns a successful 200 response' do
|
||||
generate_default_board_lists user: user
|
||||
generate_default_lists user: user, board: board
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'returns the defaults lists' do
|
||||
generate_default_board_lists user: user
|
||||
generate_default_lists user: user, board: board
|
||||
|
||||
expect(response).to match_response_schema('lists')
|
||||
end
|
||||
|
@ -222,7 +226,7 @@ describe Projects::Boards::ListsController do
|
|||
it 'returns an unprocessable entity 422 response' do
|
||||
create(:list, board: board)
|
||||
|
||||
generate_default_board_lists user: user
|
||||
generate_default_lists user: user, board: board
|
||||
|
||||
expect(response).to have_http_status(422)
|
||||
end
|
||||
|
@ -230,17 +234,18 @@ describe Projects::Boards::ListsController do
|
|||
|
||||
context 'with unauthorized user' do
|
||||
it 'returns a forbidden 403 response' do
|
||||
generate_default_board_lists user: guest
|
||||
generate_default_lists user: guest, board: board
|
||||
|
||||
expect(response).to have_http_status(403)
|
||||
end
|
||||
end
|
||||
|
||||
def generate_default_board_lists(user:)
|
||||
def generate_default_lists(user:, board: board)
|
||||
sign_in(user)
|
||||
|
||||
post :generate, namespace_id: project.namespace.to_param,
|
||||
project_id: project.to_param,
|
||||
board_id: board.to_param,
|
||||
format: :json
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue