Add index action to Projects::BoardsController to return project boards

parent b4b8e0ec
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: ...@@ -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 ...@@ -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)
......
{
"type": "object",
"required" : [
"id",
"name"
],
"properties" : {
"id": { "type": "integer" },
"name": { "type": "string" }
},
"additionalProperties": false
}
{
"type": "array",
"items": { "$ref": "board.json" }
}
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