Add index action to Projects::BoardsController to return project boards
This commit is contained in:
parent
b4b8e0ec94
commit
ecf4c10e9c
|
@ -1,9 +1,18 @@
|
||||||
class Projects::BoardsController < Projects::ApplicationController
|
class Projects::BoardsController < Projects::ApplicationController
|
||||||
include IssuableCollections
|
include IssuableCollections
|
||||||
|
|
||||||
respond_to :html
|
|
||||||
|
|
||||||
before_action :authorize_read_board!, only: [:show]
|
before_action :authorize_read_board!, only: [:index, :show]
|
||||||
|
|
||||||
|
def index
|
||||||
|
@boards = ::Boards::ListService.new(project, current_user).execute
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
format.json do
|
||||||
|
render json: @boards.as_json(only: [:id, :name])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
::Boards::CreateService.new(project, current_user).execute
|
::Boards::CreateService.new(project, current_user).execute
|
||||||
|
|
|
@ -416,7 +416,7 @@ resources :namespaces, path: '/', constraints: { id: /[a-zA-Z.0-9_\-]+/ }, only:
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :board, only: [:show] do
|
resources :boards, only: [:index, :show] do
|
||||||
scope module: :boards do
|
scope module: :boards do
|
||||||
resources :issues, only: [:update]
|
resources :issues, only: [:update]
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,53 @@ describe Projects::BoardsController do
|
||||||
sign_in(user)
|
sign_in(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'GET index' do
|
||||||
|
it 'creates a new project board when project does not have one' do
|
||||||
|
expect { list_boards }.to change(project.boards, :count).by(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when format is HTML' do
|
||||||
|
it 'renders template' do
|
||||||
|
list_boards
|
||||||
|
|
||||||
|
expect(response).to render_template :index
|
||||||
|
expect(response.content_type).to eq 'text/html'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when format is JSON' do
|
||||||
|
it 'returns a list of project boards' do
|
||||||
|
create_list(:board, 2, project: project)
|
||||||
|
|
||||||
|
list_boards format: :json
|
||||||
|
|
||||||
|
parsed_response = JSON.parse(response.body)
|
||||||
|
|
||||||
|
expect(response).to match_response_schema('boards')
|
||||||
|
expect(parsed_response.length).to eq 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with unauthorized user' do
|
||||||
|
before do
|
||||||
|
allow(Ability).to receive(:allowed?).with(user, :read_project, project).and_return(true)
|
||||||
|
allow(Ability).to receive(:allowed?).with(user, :read_board, project).and_return(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns a not found 404 response' do
|
||||||
|
list_boards
|
||||||
|
|
||||||
|
expect(response).to have_http_status(404)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def list_boards(format: :html)
|
||||||
|
get :index, namespace_id: project.namespace.to_param,
|
||||||
|
project_id: project.to_param,
|
||||||
|
format: format
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'GET show' do
|
describe 'GET show' do
|
||||||
it 'creates a new board when project does not have one' do
|
it 'creates a new board when project does not have one' do
|
||||||
expect { read_board }.to change(Board, :count).by(1)
|
expect { read_board }.to change(Board, :count).by(1)
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"required" : [
|
||||||
|
"id",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"properties" : {
|
||||||
|
"id": { "type": "integer" },
|
||||||
|
"name": { "type": "string" }
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "board.json" }
|
||||||
|
}
|
Loading…
Reference in New Issue