From 8689ce1efef8438debeec2a3a6d669f4d5a435c4 Mon Sep 17 00:00:00 2001 From: Marin Jankovski <maxlazio@gmail.com> Date: Mon, 12 Jan 2015 11:08:53 +0100 Subject: [PATCH] Add search filter option on project api for authorized projects. --- CHANGELOG | 2 +- doc/api/projects.md | 1 + lib/api/projects.rb | 7 ++++--- spec/requests/api/projects_spec.rb | 25 +++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 6e61a14f0..02ce71fdf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -25,7 +25,7 @@ v 7.7.0 - - - - - + - Add API project search filter option for authorized projects - - - Fix File blame not respecting branch selection diff --git a/doc/api/projects.md b/doc/api/projects.md index 22d3c828a..027a8ec2e 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -13,6 +13,7 @@ Parameters: - `archived` (optional) - if passed, limit by archived status - `order_by` (optional) - Return requests ordered by `id`, `name`, `created_at` or `last_activity_at` fields - `sort` (optional) - Return requests sorted in `asc` or `desc` order +- `search` (optional) - Return list of authorized projects according to a search criteria ```json [ diff --git a/lib/api/projects.rb b/lib/api/projects.rb index e1cc23488..b9c95c785 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -15,9 +15,6 @@ module API # Get a projects list for authenticated user # - # Parameters: - # archived (optional) - if passed, limit by archived status - # # Example Request: # GET /projects get do @@ -37,6 +34,10 @@ module API @projects = @projects.where(archived: parse_boolean(params[:archived])) end + if params[:search].present? + @projects = @projects.search(params[:search]) + end + @projects = paginate @projects present @projects, with: Entities::Project end diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 79865f15f..dfc96c9df 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -7,6 +7,8 @@ describe API::API, api: true do let(:user3) { create(:user) } let(:admin) { create(:admin) } let(:project) { create(:project, creator_id: user.id, namespace: user.namespace) } + let(:project2) { create(:project, path: 'project2', creator_id: user.id, namespace: user.namespace) } + let(:project3) { create(:project, path: 'project3', creator_id: user.id, namespace: user.namespace) } let(:snippet) { create(:project_snippet, author: user, project: project, title: 'example') } let(:project_member) { create(:project_member, user: user, project: project, access_level: ProjectMember::MASTER) } let(:project_member2) { create(:project_member, user: user3, project: project, access_level: ProjectMember::DEVELOPER) } @@ -29,6 +31,29 @@ describe API::API, api: true do json_response.first['name'].should == project.name json_response.first['owner']['username'].should == user.username end + + context "and using search" do + it "should return searched project" do + get api("/projects", user), { search: project.name } + response.status.should eq(200) + json_response.should be_an Array + json_response.length.should eq(1) + end + end + + context "and using sorting" do + before do + project2 + project3 + end + + it "should return the correct order when sorted by id" do + get api("/projects", user), { order_by: 'id', sort: 'desc'} + response.status.should eq(200) + json_response.should be_an Array + json_response.first['id'].should eq(3) + end + end end end -- 2.30.9