Add :owned param to ProjectFinder

And use it in the API.
This commit is contained in:
Toon Claes 2017-05-26 16:31:37 +02:00
parent 5654ac877d
commit db679788e4
5 changed files with 18 additions and 9 deletions

View file

@ -7,6 +7,7 @@
# project_ids_relation: int[] - project ids to use # project_ids_relation: int[] - project ids to use
# params: # params:
# trending: boolean # trending: boolean
# owned: boolean
# non_public: boolean # non_public: boolean
# starred: boolean # starred: boolean
# sort: string # sort: string
@ -47,8 +48,12 @@ class ProjectsFinder < UnionFinder
def init_collection def init_collection
projects = [] projects = []
projects << current_user.authorized_projects if current_user if params[:owned].present?
projects << Project.unscoped.public_to_user(current_user) unless params[:non_public].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 projects
end end

View file

@ -152,7 +152,7 @@ module API
get ":id/projects" do get ":id/projects" do
group = find_group!(params[:id]) group = find_group!(params[:id])
projects = GroupProjectsFinder.new(group: group, current_user: current_user, params: project_finder_params).execute 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 entity = params[:simple] ? Entities::BasicProjectDetails : Entities::Project
present paginate(projects), with: entity, current_user: current_user present paginate(projects), with: entity, current_user: current_user
end end

View file

@ -256,16 +256,13 @@ module API
# project helpers # project helpers
def filter_projects(projects) def reorder_projects(projects)
if params[:owned]
projects = projects.merge(current_user.owned_projects)
end
projects.reorder(params[:order_by] => params[:sort]) projects.reorder(params[:order_by] => params[:sort])
end end
def project_finder_params def project_finder_params
finder_params = {} finder_params = {}
finder_params[:owned] = true if params[:owned].present?
finder_params[:non_public] = true if params[:membership].present? finder_params[:non_public] = true if params[:membership].present?
finder_params[:starred] = true if params[:starred].present? finder_params[:starred] = true if params[:starred].present?
finder_params[:visibility_level] = Gitlab::VisibilityLevel.level_value(params[:visibility]) if params[:visibility] finder_params[:visibility_level] = Gitlab::VisibilityLevel.level_value(params[:visibility]) if params[:visibility]

View file

@ -69,7 +69,7 @@ module API
def present_projects(options = {}) def present_projects(options = {})
projects = ProjectsFinder.new(current_user: current_user, params: project_finder_params).execute 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_statistics if params[:statistics]
projects = projects.with_issues_enabled if params[:with_issues_enabled] projects = projects.with_issues_enabled if params[:with_issues_enabled]
projects = projects.with_merge_requests_enabled if params[:with_merge_requests_enabled] projects = projects.with_merge_requests_enabled if params[:with_merge_requests_enabled]

View file

@ -137,6 +137,13 @@ describe ProjectsFinder do
it { is_expected.to eq([public_project]) } it { is_expected.to eq([public_project]) }
end 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 describe 'filter by non_public' do
let(:params) { { non_public: true } } let(:params) { { non_public: true } }
before do before do