From 44aa6b90ddde3a7babc6ed9f50d73040d6184789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81bner=20Silva=20de=20Oliveira?= Date: Fri, 21 Mar 2014 06:18:19 -0300 Subject: [PATCH 1/4] added api method to return labels of a given project --- lib/api/entities.rb | 4 ++++ lib/api/projects.rb | 9 +++++++++ spec/requests/api/labels_spec.rb | 26 ++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 spec/requests/api/labels_spec.rb diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 8b4519af2d..9fa8506926 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -187,5 +187,9 @@ module API end end end + + class Label < Grape::Entity + expose :name + end end end diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 4d48d2194f..40b5ce86c9 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -215,6 +215,15 @@ module API @users = paginate @users present @users, with: Entities::User end + + # Get a labels list + # + # Example Request: + # GET /users + get ':id/labels' do + @labels = user_project.issues_labels + present @labels, with: Entities::Label + end end end end diff --git a/spec/requests/api/labels_spec.rb b/spec/requests/api/labels_spec.rb new file mode 100644 index 0000000000..ba5efb6c60 --- /dev/null +++ b/spec/requests/api/labels_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +describe API::API do + include ApiHelpers + before(:each) { ActiveRecord::Base.observers.enable(:user_observer) } + after(:each) { ActiveRecord::Base.observers.disable(:user_observer) } + + let(:user) { create(:user) } + let!(:project) { create(:project, namespace: user.namespace ) } + let!(:issue) { create(:issue, author: user, assignee: user, project: project, :label_list => "label1, label2") } + before { project.team << [user, :reporter] } + + + describe "GET /projects/:id/labels" do + it "should return project labels" do + get api("/projects/#{project.id}/labels", user) + response.status.should == 200 + json_response.should be_an Array + json_response.first['name'].should == 'label1' + json_response.last['name'].should == 'label2' + end + end + + +end + From 85b5812bc21623c6a11ed92f482ac8282ec12fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81bner=20Silva=20de=20Oliveira?= Date: Sat, 22 Mar 2014 17:29:13 -0300 Subject: [PATCH 2/4] moving labels specs to projects_spec file --- spec/requests/api/labels_spec.rb | 26 -------------------------- spec/requests/api/projects_spec.rb | 13 +++++++++++++ 2 files changed, 13 insertions(+), 26 deletions(-) delete mode 100644 spec/requests/api/labels_spec.rb diff --git a/spec/requests/api/labels_spec.rb b/spec/requests/api/labels_spec.rb deleted file mode 100644 index ba5efb6c60..0000000000 --- a/spec/requests/api/labels_spec.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'spec_helper' - -describe API::API do - include ApiHelpers - before(:each) { ActiveRecord::Base.observers.enable(:user_observer) } - after(:each) { ActiveRecord::Base.observers.disable(:user_observer) } - - let(:user) { create(:user) } - let!(:project) { create(:project, namespace: user.namespace ) } - let!(:issue) { create(:issue, author: user, assignee: user, project: project, :label_list => "label1, label2") } - before { project.team << [user, :reporter] } - - - describe "GET /projects/:id/labels" do - it "should return project labels" do - get api("/projects/#{project.id}/labels", user) - response.status.should == 200 - json_response.should be_an Array - json_response.first['name'].should == 'label1' - json_response.last['name'].should == 'label2' - end - end - - -end - diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 149c5bffcd..7fe6563965 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -13,6 +13,7 @@ describe API::API do let(:snippet) { create(:project_snippet, author: user, project: project, title: 'example') } let(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) } let(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) } + let(:issue_with_labels) { create(:issue, author: user, assignee: user, project: project, :label_list => "label1, label2") } describe "GET /projects" do before { project } @@ -632,4 +633,16 @@ describe API::API do end end end + + describe "GET /projects/:id/labels" do + before { issue_with_labels } + + it "should return project labels" do + get api("/projects/#{project.id}/labels", user) + response.status.should == 200 + json_response.should be_an Array + json_response.first['name'].should == issue_with_labels.labels.first.name + json_response.last['name'].should == issue_with_labels.labels.last.name + end + end end From e153469f31db106d0720e357a5e22431635f2b9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81bner=20Silva=20de=20Oliveira?= Date: Sun, 23 Mar 2014 19:07:18 -0300 Subject: [PATCH 3/4] changed doc comment for get labels of a project --- lib/api/projects.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 40b5ce86c9..9d290c75ba 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -216,10 +216,12 @@ module API present @users, with: Entities::User end - # Get a labels list + # Get a project labels # + # Parameters: + # id (required) - The ID of a project # Example Request: - # GET /users + # GET /projects/:id/labels get ':id/labels' do @labels = user_project.issues_labels present @labels, with: Entities::Label From 19938156d89ea980596fd5b1d72856f3defb228a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81bner=20Silva=20de=20Oliveira?= Date: Sun, 23 Mar 2014 19:20:17 -0300 Subject: [PATCH 4/4] documentation for api method which get labels of a project --- doc/api/projects.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/doc/api/projects.md b/doc/api/projects.md index 6e82ddd990..54618d7c04 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -621,3 +621,29 @@ Parameters: + query (required) - A string contained in the project name + per_page (optional) - number of projects to return per page + page (optional) - the page to retrieve + + +## Labels + +### List project labels + +Get a list of project labels. + +``` +GET /projects/:id/labels +``` + +Parameters: + ++ `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project + +```json +[ + { + "name":"featute" + }, + { + "name": "bug" + } +] +```