parent
d184f27ed3
commit
55f4ddad2b
9 changed files with 57 additions and 6 deletions
|
@ -43,7 +43,13 @@ class Admin::ProjectsFinder
|
|||
end
|
||||
|
||||
def by_archived(items)
|
||||
items.non_archived unless params[:archived].present?
|
||||
if params[:archived] == 'only'
|
||||
items.archived
|
||||
elsif params[:archived].blank?
|
||||
items.non_archived
|
||||
else
|
||||
items
|
||||
end
|
||||
end
|
||||
|
||||
def by_personal(items)
|
||||
|
|
|
@ -125,9 +125,18 @@ class ProjectsFinder < UnionFinder
|
|||
end
|
||||
|
||||
def by_archived(projects)
|
||||
# Back-compatibility with the places where `params[:archived]` can be set explicitly to `false`
|
||||
params[:non_archived] = !Gitlab::Utils.to_boolean(params[:archived]) if params.key?(:archived)
|
||||
|
||||
params[:non_archived] ? projects.non_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`
|
||||
if params[:archived] == 'only'
|
||||
projects.archived
|
||||
elsif Gitlab::Utils.to_boolean(params[:archived])
|
||||
projects
|
||||
else
|
||||
projects.non_archived
|
||||
end
|
||||
else
|
||||
projects
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -247,6 +247,7 @@ class Project < ActiveRecord::Base
|
|||
scope :joined, ->(user) { where('namespace_id != ?', user.namespace_id) }
|
||||
scope :starred_by, ->(user) { joins(:users_star_projects).where('users_star_projects.user_id': user.id) }
|
||||
scope :visible_to_user, ->(user) { where(id: user.authorized_projects.select(:id).reorder(nil)) }
|
||||
scope :archived, -> { where(archived: true) }
|
||||
scope :non_archived, -> { where(archived: false) }
|
||||
scope :for_milestones, ->(ids) { joins(:milestones).where('milestones.id' => ids).distinct }
|
||||
scope :with_push, -> { joins(:events).where('events.action = ?', Event::PUSHED) }
|
||||
|
|
|
@ -15,8 +15,11 @@
|
|||
= link_to filter_projects_path(archived: nil), class: ("is-active" unless params[:archived].present?) do
|
||||
Hide archived projects
|
||||
%li
|
||||
= link_to filter_projects_path(archived: true), class: ("is-active" if params[:archived].present?) do
|
||||
= link_to filter_projects_path(archived: true), class: ("is-active" if Gitlab::Utils.to_boolean(params[:archived])) do
|
||||
Show archived projects
|
||||
%li
|
||||
= link_to filter_projects_path(archived: 'only'), class: ("is-active" if params[:archived] == 'only') do
|
||||
Show archived projects only
|
||||
- if current_user
|
||||
%li.divider
|
||||
%li
|
||||
|
|
5
changelogs/unreleased/35994-archived-projects-only.yml
Normal file
5
changelogs/unreleased/35994-archived-projects-only.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add an option to list only archived projects
|
||||
merge_request: 13492
|
||||
author: Mehdi Lahmam (@mehlah)
|
||||
type: added
|
|
@ -36,6 +36,14 @@ describe "Admin::Projects" do
|
|||
expect(page).to have_content(archived_project.name)
|
||||
expect(page).to have_xpath("//span[@class='label label-warning']", text: 'archived')
|
||||
end
|
||||
|
||||
it 'renders only archived projects', js: true do
|
||||
find(:css, '#sort-projects-dropdown').click
|
||||
click_link 'Show archived projects only'
|
||||
|
||||
expect(page).to have_content(archived_project.name)
|
||||
expect(page).not_to have_content(project.name)
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET /admin/projects/:namespace_id/:id" do
|
||||
|
|
|
@ -26,6 +26,13 @@ RSpec.describe 'Dashboard Archived Project' do
|
|||
expect(page).to have_link(archived_project.name)
|
||||
end
|
||||
|
||||
it 'renders only archived projects' do
|
||||
click_link 'Show archived projects only'
|
||||
|
||||
expect(page).to have_content(archived_project.name)
|
||||
expect(page).not_to have_content(project.name)
|
||||
end
|
||||
|
||||
it 'searchs archived projects', :js do
|
||||
click_button 'Last updated'
|
||||
click_link 'Show archived projects'
|
||||
|
|
|
@ -118,6 +118,12 @@ describe Admin::ProjectsFinder do
|
|||
|
||||
it { is_expected.to match_array([archived_project, shared_project, public_project, internal_project, private_project]) }
|
||||
end
|
||||
|
||||
context 'archived=only' do
|
||||
let(:params) { { archived: 'only' } }
|
||||
|
||||
it { is_expected.to eq([archived_project]) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'filter by personal' do
|
||||
|
|
|
@ -123,6 +123,12 @@ describe ProjectsFinder do
|
|||
it { is_expected.to match_array([public_project, internal_project, archived_project]) }
|
||||
end
|
||||
|
||||
describe 'filter by archived only' do
|
||||
let(:params) { { archived: 'only' } }
|
||||
|
||||
it { is_expected.to eq([archived_project]) }
|
||||
end
|
||||
|
||||
describe 'filter by archived for backward compatibility' do
|
||||
let(:params) { { archived: false } }
|
||||
|
||||
|
|
Loading…
Reference in a new issue