Add endpoint to list issues for a specific board list

This commit is contained in:
Douglas Barbosa Alexandre 2016-08-02 21:19:13 -03:00
parent 52b6a7e966
commit 296bcbd664
4 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,22 @@
class Projects::BoardIssuesController < Projects::ApplicationController
respond_to :json
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
def index
issues = Boards::Issues::ListService.new(project, current_user, filter_params).execute
issues = issues.page(params[:page])
render json: issues.as_json(only: [:id, :title, :confidential], include: { labels: { only: [:id, :title, :color] } })
end
private
def filter_params
params.permit(:list_id)
end
def record_not_found(exception)
render json: { error: exception.message }, status: :not_found
end
end

View File

@ -857,6 +857,7 @@ Rails.application.routes.draw do
end
resource :board, only: [:show] do
resources :issues, only: [:index], controller: :board_issues
resources :lists, only: [:create, :update, :destroy], controller: :board_lists
end

View File

@ -0,0 +1,46 @@
require 'spec_helper'
describe Projects::BoardIssuesController do
let(:project) { create(:project_with_board) }
let(:user) { create(:user) }
before do
project.team << [user, :master]
sign_in(user)
end
describe 'GET #index' do
context 'with valid list id' do
it 'returns issues that have the list label applied' do
label1 = create(:label, project: project, name: 'Planning')
label2 = create(:label, project: project, name: 'Development')
create(:labeled_issue, project: project, labels: [label1])
create(:labeled_issue, project: project, labels: [label2])
create(:labeled_issue, project: project, labels: [label2])
create(:list, board: project.board, label: label1, position: 1)
development = create(:list, board: project.board, label: label2, position: 2)
get :index, namespace_id: project.namespace.to_param,
project_id: project.to_param,
list_id: development.to_param
parsed_response = JSON.parse(response.body)
expect(response).to match_response_schema('issue', array: true)
expect(parsed_response.length).to eq 2
end
end
context 'with invalid list id' do
it 'returns a not found 404 response' do
get :index, namespace_id: project.namespace.to_param,
project_id: project.to_param,
id: 999
expect(response).to have_http_status(404)
end
end
end
end

30
spec/fixtures/api/schemas/issue.json vendored Normal file
View File

@ -0,0 +1,30 @@
{
"type": "object",
"required" : [
"id",
"title",
"confidential"
],
"properties" : {
"id": { "type": "integer" },
"title": { "type": "string" },
"confidential": { "type": "boolean" },
"labels": {
"type": ["array"],
"required": [
"id",
"color",
"title"
],
"properties": {
"id": { "type": "integer" },
"color": {
"type": "string",
"pattern": "^#[0-9A-Fa-f]{3}{1,2}+$"
},
"title": { "type": "string" }
}
}
},
"additionalProperties": false
}