Change ProjectFinder so starred can be combined with other filters

The `starred` parameter couldn't be used in combination with `trending` or
`non_public`. But this is changed now.
This commit is contained in:
Toon Claes 2017-05-23 22:38:12 +02:00
parent 8e72ad70bd
commit 0725050802
2 changed files with 12 additions and 3 deletions

View file

@ -31,6 +31,7 @@ class ProjectsFinder < UnionFinder
items = by_ids(items)
items = union(items)
items = by_personal(items)
items = by_starred(items)
items = by_visibilty_level(items)
items = by_tags(items)
items = by_search(items)
@ -45,8 +46,6 @@ class ProjectsFinder < UnionFinder
if params[:trending].present?
projects << Project.trending
elsif params[:starred].present? && current_user
projects << current_user.viewable_starred_projects
else
projects << current_user.authorized_projects if current_user
projects << Project.unscoped.public_to_user(current_user) unless params[:non_public].present?
@ -67,6 +66,10 @@ class ProjectsFinder < UnionFinder
(params[:personal].present? && current_user) ? items.personal(current_user) : items
end
def by_starred(items)
(params[:starred].present? && current_user) ? items.starred_by(current_user) : items
end
def by_visibilty_level(items)
params[:visibility_level].present? ? items.where(visibility_level: params[:visibility_level]) : items
end

View file

@ -146,13 +146,19 @@ describe ProjectsFinder do
it { is_expected.to eq([private_project]) }
end
describe 'filter by viewable_starred_projects' do
describe 'filter by starred' do
let(:params) { { starred: true } }
before do
current_user.toggle_star(public_project)
end
it { is_expected.to eq([public_project]) }
it 'returns only projects the user has access to' do
current_user.toggle_star(private_project)
is_expected.to eq([public_project])
end
end
describe 'sorting' do