Add :owned param to ProjectFinder
And use it in the API.
This commit is contained in:
parent
5654ac877d
commit
db679788e4
5 changed files with 18 additions and 9 deletions
|
@ -7,6 +7,7 @@
|
|||
# project_ids_relation: int[] - project ids to use
|
||||
# params:
|
||||
# trending: boolean
|
||||
# owned: boolean
|
||||
# non_public: boolean
|
||||
# starred: boolean
|
||||
# sort: string
|
||||
|
@ -47,8 +48,12 @@ class ProjectsFinder < UnionFinder
|
|||
def init_collection
|
||||
projects = []
|
||||
|
||||
projects << current_user.authorized_projects if current_user
|
||||
projects << Project.unscoped.public_to_user(current_user) unless params[:non_public].present?
|
||||
if params[:owned].present?
|
||||
projects << current_user.owned_projects if current_user
|
||||
else
|
||||
projects << current_user.authorized_projects if current_user
|
||||
projects << Project.unscoped.public_to_user(current_user) unless params[:non_public].present?
|
||||
end
|
||||
|
||||
projects
|
||||
end
|
||||
|
|
|
@ -152,7 +152,7 @@ module API
|
|||
get ":id/projects" do
|
||||
group = find_group!(params[:id])
|
||||
projects = GroupProjectsFinder.new(group: group, current_user: current_user, params: project_finder_params).execute
|
||||
projects = filter_projects(projects)
|
||||
projects = reorder_projects(projects)
|
||||
entity = params[:simple] ? Entities::BasicProjectDetails : Entities::Project
|
||||
present paginate(projects), with: entity, current_user: current_user
|
||||
end
|
||||
|
|
|
@ -256,16 +256,13 @@ module API
|
|||
|
||||
# project helpers
|
||||
|
||||
def filter_projects(projects)
|
||||
if params[:owned]
|
||||
projects = projects.merge(current_user.owned_projects)
|
||||
end
|
||||
|
||||
def reorder_projects(projects)
|
||||
projects.reorder(params[:order_by] => params[:sort])
|
||||
end
|
||||
|
||||
def project_finder_params
|
||||
finder_params = {}
|
||||
finder_params[:owned] = true if params[:owned].present?
|
||||
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]
|
||||
|
|
|
@ -69,7 +69,7 @@ module API
|
|||
|
||||
def present_projects(options = {})
|
||||
projects = ProjectsFinder.new(current_user: current_user, params: project_finder_params).execute
|
||||
projects = filter_projects(projects)
|
||||
projects = reorder_projects(projects)
|
||||
projects = projects.with_statistics if params[:statistics]
|
||||
projects = projects.with_issues_enabled if params[:with_issues_enabled]
|
||||
projects = projects.with_merge_requests_enabled if params[:with_merge_requests_enabled]
|
||||
|
|
|
@ -137,6 +137,13 @@ describe ProjectsFinder do
|
|||
it { is_expected.to eq([public_project]) }
|
||||
end
|
||||
|
||||
describe 'filter by owned' do
|
||||
let(:params) { { owned: true } }
|
||||
let!(:owned_project) { create(:empty_project, :private, namespace: current_user.namespace) }
|
||||
|
||||
it { is_expected.to eq([owned_project]) }
|
||||
end
|
||||
|
||||
describe 'filter by non_public' do
|
||||
let(:params) { { non_public: true } }
|
||||
before do
|
||||
|
|
Loading…
Reference in a new issue