diff options
-rw-r--r-- | app/controllers/projects_controller.rb | 2 | ||||
-rw-r--r-- | changelogs/unreleased/sh-fix-issue-63349.yml | 5 | ||||
-rw-r--r-- | lib/api/projects.rb | 2 | ||||
-rw-r--r-- | spec/controllers/projects_controller_spec.rb | 47 | ||||
-rw-r--r-- | spec/requests/api/projects_spec.rb | 2 |
5 files changed, 55 insertions, 3 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 330e2d0f8a5..feefc7f8137 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -182,7 +182,7 @@ class ProjectsController < Projects::ApplicationController end def housekeeping - ::Projects::HousekeepingService.new(@project).execute + ::Projects::HousekeepingService.new(@project, :gc).execute redirect_to( project_path(@project), diff --git a/changelogs/unreleased/sh-fix-issue-63349.yml b/changelogs/unreleased/sh-fix-issue-63349.yml new file mode 100644 index 00000000000..0e51a6b7b20 --- /dev/null +++ b/changelogs/unreleased/sh-fix-issue-63349.yml @@ -0,0 +1,5 @@ +--- +title: Make Housekeeping button do a full garbage collection +merge_request: 30289 +author: +type: fixed diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 1e14c77b5be..a7d62014509 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -474,7 +474,7 @@ module API authorize_admin_project begin - ::Projects::HousekeepingService.new(user_project).execute + ::Projects::HousekeepingService.new(user_project, :gc).execute rescue ::Projects::HousekeepingService::LeaseTaken => error conflict!(error.message) end diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 8d2412f97ef..4e1cac67d23 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -318,6 +318,53 @@ describe ProjectsController do end end + describe '#housekeeping' do + let(:group) { create(:group) } + let(:project) { create(:project, group: group) } + let(:housekeeping) { Projects::HousekeepingService.new(project) } + + context 'when authenticated as owner' do + before do + group.add_owner(user) + sign_in(user) + + allow(Projects::HousekeepingService).to receive(:new).with(project, :gc).and_return(housekeeping) + end + + it 'forces a full garbage collection' do + expect(housekeeping).to receive(:execute).once + + post :housekeeping, + params: { + namespace_id: project.namespace.path, + id: project.path + } + + expect(response).to have_gitlab_http_status(302) + end + end + + context 'when authenticated as developer' do + let(:developer) { create(:user) } + + before do + group.add_developer(developer) + end + + it 'does not execute housekeeping' do + expect(housekeeping).not_to receive(:execute) + + post :housekeeping, + params: { + namespace_id: project.namespace.path, + id: project.path + } + + expect(response).to have_gitlab_http_status(302) + end + end + end + describe "#update" do render_views diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 5f7d2fa6d9c..c67412a44c1 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -2428,7 +2428,7 @@ describe API::Projects do let(:housekeeping) { Projects::HousekeepingService.new(project) } before do - allow(Projects::HousekeepingService).to receive(:new).with(project).and_return(housekeeping) + allow(Projects::HousekeepingService).to receive(:new).with(project, :gc).and_return(housekeeping) end context 'when authenticated as owner' do |