summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-05-14 20:25:39 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-05-14 20:25:39 +0000
commit740dc412506f80699cb9f82930d948fa961c6c05 (patch)
treea40e4f17c5db3b5edf27595310fcbae39398e3ae
parentaa4f085184f24272eef48e1da23557459957fbe7 (diff)
parent74710471046cc17163e5e0b3a6973d1f23c46bfa (diff)
downloadgitlab-ce-740dc412506f80699cb9f82930d948fa961c6c05.tar.gz
Merge branch 'project_api_order' into 'master'
Add order option for projects API https://dev.gitlab.org/gitlab/gitlab-ci/issues/222 See merge request !656
-rw-r--r--doc/api/projects.md3
-rw-r--r--lib/api/projects.rb7
-rw-r--r--spec/requests/api/projects_spec.rb9
3 files changed, 18 insertions, 1 deletions
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 971fe96fb8e..17c014019ea 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -32,6 +32,7 @@ Parameters:
- `order_by` (optional) - Return requests ordered by `id`, `name`, `path`, `created_at`, `updated_at` or `last_activity_at` fields. Default is `created_at`
- `sort` (optional) - Return requests sorted in `asc` or `desc` order. Default is `desc`
- `search` (optional) - Return list of authorized projects according to a search criteria
+- `ci_enabled_first` - Return projects ordered by ci_enabled flag. Projects with enabled GitLab CI go first
```json
[
@@ -134,6 +135,7 @@ Parameters:
- `order_by` (optional) - Return requests ordered by `id`, `name`, `path`, `created_at`, `updated_at` or `last_activity_at` fields. Default is `created_at`
- `sort` (optional) - Return requests sorted in `asc` or `desc` order. Default is `desc`
- `search` (optional) - Return list of authorized projects according to a search criteria
+- `ci_enabled_first` - Return projects ordered by ci_enabled flag. Projects with enabled GitLab CI go first
### List ALL projects
@@ -149,6 +151,7 @@ Parameters:
- `order_by` (optional) - Return requests ordered by `id`, `name`, `path`, `created_at`, `updated_at` or `last_activity_at` fields. Default is `created_at`
- `sort` (optional) - Return requests sorted in `asc` or `desc` order. Default is `desc`
- `search` (optional) - Return list of authorized projects according to a search criteria
+- `ci_enabled_first` - Return projects ordered by ci_enabled flag. Projects with enabled GitLab CI go first
### Get single project
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index e3fff79d68f..1f2251c9b9c 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -22,7 +22,12 @@ module API
projects = projects.search(params[:search])
end
- projects.reorder(project_order_by => project_sort)
+ if params[:ci_enabled_first].present?
+ projects.includes(:gitlab_ci_service).
+ reorder("services.active DESC, projects.#{project_order_by} #{project_sort}")
+ else
+ projects.reorder(project_order_by => project_sort)
+ end
end
def project_order_by
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index cc387378d3a..aada7febf6c 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -86,6 +86,15 @@ describe API::API, api: true do
expect(json_response).to be_an Array
expect(json_response.first['id']).to eq(project3.id)
end
+
+ it 'returns projects in the correct order when ci_enabled_first parameter is passed' do
+ [project, project2, project3].each{ |project| project.build_missing_services }
+ project2.gitlab_ci_service.update(active: true, token: "token", project_url: "url")
+ get api('/projects', user), { ci_enabled_first: 'true'}
+ expect(response.status).to eq(200)
+ expect(json_response).to be_an Array
+ expect(json_response.first['id']).to eq(project2.id)
+ end
end
end
end