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
|
||||
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
|
||||
::Boards::CreateService.new(project, current_user).execute
|
||||
|
|
|
@ -416,7 +416,7 @@ resources :namespaces, path: '/', constraints: { id: /[a-zA-Z.0-9_\-]+/ }, only:
|
|||
end
|
||||
end
|
||||
|
||||
resource :board, only: [:show] do
|
||||
resources :boards, only: [:index, :show] do
|
||||
scope module: :boards do
|
||||
resources :issues, only: [:update]
|
||||
|
||||
|
|
|
@ -9,6 +9,53 @@ describe Projects::BoardsController do
|
|||
sign_in(user)
|
||||
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
|
||||
it 'creates a new board when project does not have one' do
|
||||
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