Add search filter option on project api for authorized projects.

This commit is contained in:
Marin Jankovski 2015-01-12 11:08:53 +01:00
parent 31bcd04711
commit 8689ce1efe
4 changed files with 31 additions and 4 deletions

View file

@ -25,7 +25,7 @@ v 7.7.0
- -
- -
- -
- - Add API project search filter option for authorized projects
- -
- -
- Fix File blame not respecting branch selection - Fix File blame not respecting branch selection

View file

@ -13,6 +13,7 @@ Parameters:
- `archived` (optional) - if passed, limit by archived status - `archived` (optional) - if passed, limit by archived status
- `order_by` (optional) - Return requests ordered by `id`, `name`, `created_at` or `last_activity_at` fields - `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 - `sort` (optional) - Return requests sorted in `asc` or `desc` order
- `search` (optional) - Return list of authorized projects according to a search criteria
```json ```json
[ [

View file

@ -15,9 +15,6 @@ module API
# Get a projects list for authenticated user # Get a projects list for authenticated user
# #
# Parameters:
# archived (optional) - if passed, limit by archived status
#
# Example Request: # Example Request:
# GET /projects # GET /projects
get do get do
@ -37,6 +34,10 @@ module API
@projects = @projects.where(archived: parse_boolean(params[:archived])) @projects = @projects.where(archived: parse_boolean(params[:archived]))
end end
if params[:search].present?
@projects = @projects.search(params[:search])
end
@projects = paginate @projects @projects = paginate @projects
present @projects, with: Entities::Project present @projects, with: Entities::Project
end end

View file

@ -7,6 +7,8 @@ describe API::API, api: true do
let(:user3) { create(:user) } let(:user3) { create(:user) }
let(:admin) { create(:admin) } let(:admin) { create(:admin) }
let(:project) { create(:project, creator_id: user.id, namespace: user.namespace) } 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(: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_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) } 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['name'].should == project.name
json_response.first['owner']['username'].should == user.username json_response.first['owner']['username'].should == user.username
end 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
end end