Merge branch 'fix-project-api-archived' into 'master'
Fix archived parameter for projects API Closes #32301 See merge request gitlab-org/gitlab-ce!20566
This commit is contained in:
commit
7f0431dd85
|
@ -16,6 +16,7 @@
|
|||
# personal: boolean
|
||||
# search: string
|
||||
# non_archived: boolean
|
||||
# archived: 'only' or boolean
|
||||
#
|
||||
class ProjectsFinder < UnionFinder
|
||||
include CustomAttributesFilter
|
||||
|
@ -130,7 +131,7 @@ class ProjectsFinder < UnionFinder
|
|||
def by_archived(projects)
|
||||
if params[:non_archived]
|
||||
projects.non_archived
|
||||
elsif params.key?(:archived) # Back-compatibility with the places where `params[:archived]` can be set explicitly to `false`
|
||||
elsif params.key?(:archived)
|
||||
if params[:archived] == 'only'
|
||||
projects.archived
|
||||
elsif Gitlab::Utils.to_boolean(params[:archived])
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix archived parameter for projects API
|
||||
merge_request: 20566
|
||||
author: Peter Marko
|
||||
type: fixed
|
|
@ -385,7 +385,7 @@ module API
|
|||
finder_params[:non_public] = true if params[:membership].present?
|
||||
finder_params[:starred] = true if params[:starred].present?
|
||||
finder_params[:visibility_level] = Gitlab::VisibilityLevel.level_value(params[:visibility]) if params[:visibility]
|
||||
finder_params[:archived] = params[:archived]
|
||||
finder_params[:archived] = archived_param unless params[:archived].nil?
|
||||
finder_params[:search] = params[:search] if params[:search]
|
||||
finder_params[:user] = params.delete(:user) if params[:user]
|
||||
finder_params[:custom_attributes] = params[:custom_attributes] if params[:custom_attributes]
|
||||
|
@ -496,5 +496,11 @@ module API
|
|||
|
||||
exception.status == 500
|
||||
end
|
||||
|
||||
def archived_param
|
||||
return 'only' if params[:archived]
|
||||
|
||||
params[:archived]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -30,7 +30,7 @@ module API
|
|||
end
|
||||
|
||||
params :filter_params do
|
||||
optional :archived, type: Boolean, default: false, desc: 'Limit by archived status'
|
||||
optional :archived, type: Boolean, desc: 'Limit by archived status'
|
||||
optional :visibility, type: String, values: Gitlab::VisibilityLevel.string_values,
|
||||
desc: 'Limit by visibility'
|
||||
optional :search, type: String, desc: 'Return list of projects matching the search criteria'
|
||||
|
|
|
@ -237,6 +237,39 @@ describe API::Projects do
|
|||
end
|
||||
end
|
||||
|
||||
context 'and using archived' do
|
||||
let!(:archived_project) { create(:project, creator_id: user.id, namespace: user.namespace, archived: true) }
|
||||
|
||||
it 'returns archived projects' do
|
||||
get api('/projects?archived=true', user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(Project.public_or_visible_to_user(user).where(archived: true).size)
|
||||
expect(json_response.map { |project| project['id'] }).to include(archived_project.id)
|
||||
end
|
||||
|
||||
it 'returns non-archived projects' do
|
||||
get api('/projects?archived=false', user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.length).to eq(Project.public_or_visible_to_user(user).where(archived: false).size)
|
||||
expect(json_response.map { |project| project['id'] }).not_to include(archived_project.id)
|
||||
end
|
||||
|
||||
it 'returns every project' do
|
||||
get api('/projects', user)
|
||||
|
||||
expect(response).to have_gitlab_http_status(200)
|
||||
expect(response).to include_pagination_headers
|
||||
expect(json_response).to be_an Array
|
||||
expect(json_response.map { |project| project['id'] }).to contain_exactly(*Project.public_or_visible_to_user(user).pluck(:id))
|
||||
end
|
||||
end
|
||||
|
||||
context 'and using search' do
|
||||
it_behaves_like 'projects response' do
|
||||
let(:filter) { { search: project.name } }
|
||||
|
|
Loading…
Reference in New Issue