Commit d1816523 authored by huzaifaiftikhar1's avatar huzaifaiftikhar1

Update 'marked_for_deletion?' method to use global license check

Update 'delay_project_deletions' ability to rely only on global
license check
parent 38ec095b
......@@ -25,15 +25,13 @@ class Projects::ApplicationController < ApplicationController
path = File.join(params[:namespace_id], params[:project_id] || params[:id])
auth_proc = if params[:controller] == "projects" && params[:action] == "restore"
->(project) { !project.pending_delete? }
else
->(project) { !project.pending_delete_or_hidden? }
end
@project = find_routable!(Project, path, request.fullpath, extra_authorization_proc: auth_proc)
end
def auth_proc
->(project) { !project.pending_delete? }
end
def build_canonical_path(project)
params[:namespace_id] = project.namespace.to_param
params[:project_id] = project.to_param
......@@ -94,3 +92,5 @@ class Projects::ApplicationController < ApplicationController
return render_404 unless @project.feature_available?(:issues, current_user)
end
end
Projects::ApplicationController.prepend_mod_with('Projects::ApplicationController')
# frozen_string_literal: true
module EE
module Projects
module ApplicationController
extend ActiveSupport::Concern
extend ::Gitlab::Utils::Override
private
override :auth_proc
def auth_proc
if params[:controller] == "projects" && params[:action] == "restore"
super
else
->(project) { !project.pending_delete_or_hidden? }
end
end
end
end
end
......@@ -733,7 +733,7 @@ module EE
def marked_for_deletion?
marked_for_deletion_at.present? &&
feature_available?(:adjourned_deletion_for_projects_and_groups)
License.feature_available?(:adjourned_deletion_for_projects_and_groups)
end
def ancestor_marked_for_deletion
......
......@@ -14,8 +14,11 @@ module EE
end
condition(:adjourned_project_deletion_available) do
License.feature_available?(:adjourned_deletion_for_projects_and_groups) &&
(::Feature.enabled?(:project_owners_list_project_pending_deletion, default_enabled: :yaml) || can?(:admin_all_resources))
License.feature_available?(:adjourned_deletion_for_projects_and_groups)
end
condition(:project_owners_list_project_pending_deletion) do
(::Feature.enabled?(:project_owners_list_project_pending_deletion, default_enabled: :yaml) || can?(:admin_all_resources))
end
condition(:export_user_permissions_available) do
......@@ -58,8 +61,11 @@ module EE
prevent :create_group_with_default_branch_protection
end
rule { adjourned_project_deletion_available }.policy do
rule { adjourned_project_deletion_available & project_owners_list_project_pending_deletion }.policy do
enable :list_removable_projects
end
rule { adjourned_project_deletion_available }.policy do
enable :delay_project_deletions
end
......
- if project.marked_for_deletion_at? && can?(current_user, :delay_project_deletions)
- if project.marked_for_deletion?
= gl_badge_tag _('pending deletion'), variant: :warning
- elsif project.archived
= gl_badge_tag _('archived'), variant: :warning
......@@ -7,7 +7,7 @@
- issues_count = Projects::AllIssuesCountService.new(project).count
- forks_count = Projects::ForksCountService.new(project).count
- unless project.marked_for_deletion_at?
- unless project.marked_for_deletion?
.sub-section
%h4.danger-title= _('Delete this project')
- if adjourned_deletion && can_delay_project_deletions
......
- if project.marked_for_deletion_at && can?(current_user, :delay_project_deletions)
- if project.marked_for_deletion?
= gl_badge_tag _('pending deletion'), { variant: :warning }, { class: 'gl-display-flex gl-ml-3' }
- elsif project.archived
= gl_badge_tag _('archived'), { variant: :warning }, { class: 'gl-display-flex gl-ml-3' }
......@@ -689,7 +689,7 @@ RSpec.describe ProjectsController do
it do
delete :destroy, params: { namespace_id: project.namespace, id: project }
expect(project.reload.marked_for_deletion?).to be_falsey
expect(project.reload.marked_for_deletion?).to be_truthy
expect(project.reload.marked_for_deletion_at).to be_truthy
expect(project.reload.hidden?).to be_truthy
expect(response).to have_gitlab_http_status(:found)
......@@ -802,7 +802,6 @@ RSpec.describe ProjectsController do
let(:project) { create(:project, namespace: user.namespace) }
before do
controller.instance_variable_set(:@project, project)
sign_in(user)
end
......
......@@ -293,6 +293,24 @@ RSpec.describe GlobalPolicy do
end
end
describe 'delay_project_deletions' do
before do
stub_licensed_features(adjourned_deletion_for_projects_and_groups: licensed?)
end
context 'when licensed feature is enabled' do
let(:licensed?) { true }
it { is_expected.to be_allowed(:delay_project_deletions) }
end
context 'when licensed feature is not enabled' do
let(:licensed?) { false }
it { is_expected.to be_disallowed(:delay_project_deletions) }
end
end
describe ':export_user_permissions', :enable_admin_mode do
using RSpec::Parameterized::TableSyntax
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment