diff options
Diffstat (limited to 'spec/controllers/projects_controller_spec.rb')
-rw-r--r-- | spec/controllers/projects_controller_spec.rb | 59 |
1 files changed, 48 insertions, 11 deletions
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index bc58eaa1d6f..51f8a3b1197 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -2,7 +2,7 @@ require('spec_helper') -RSpec.describe ProjectsController do +RSpec.describe ProjectsController, feature_category: :projects do include ExternalAuthorizationServiceHelpers include ProjectForksHelper using RSpec::Parameterized::TableSyntax @@ -629,29 +629,66 @@ RSpec.describe ProjectsController do describe '#housekeeping' do let_it_be(:group) { create(:group) } - let_it_be(:project) { create(:project, group: group) } + let(:housekeeping_service_dbl) { instance_double(Repositories::HousekeepingService) } + let(:params) do + { + namespace_id: project.namespace.path, + id: project.path, + prune: prune + } + end + let(:prune) { nil } + let_it_be(:project) { create(:project, group: group) } let(:housekeeping) { Repositories::HousekeepingService.new(project) } + subject { post :housekeeping, params: params } + context 'when authenticated as owner' do before do group.add_owner(user) sign_in(user) - allow(Repositories::HousekeepingService).to receive(:new).with(project, :gc).and_return(housekeeping) + allow(Repositories::HousekeepingService).to receive(:new).with(project, :eager).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 - } + params: { + namespace_id: project.namespace.path, + id: project.path + } expect(response).to have_gitlab_http_status(:found) end + + it 'logs an audit event' do + expect(housekeeping).to receive(:execute).once.and_yield + + expect(::Gitlab::Audit::Auditor).to receive(:audit).with(a_hash_including( + name: 'manually_trigger_housekeeping', + author: user, + scope: project, + target: project, + message: "Housekeeping task: eager" + )) + + subject + end + + context 'and requesting prune' do + let(:prune) { true } + + it 'enqueues pruning' do + allow(Repositories::HousekeepingService).to receive(:new).with(project, :prune).and_return(housekeeping_service_dbl) + expect(housekeeping_service_dbl).to receive(:execute) + + subject + expect(response).to have_gitlab_http_status(:found) + end + end end context 'when authenticated as developer' do @@ -665,10 +702,10 @@ RSpec.describe ProjectsController do expect(housekeeping).not_to receive(:execute) post :housekeeping, - params: { - namespace_id: project.namespace.path, - id: project.path - } + params: { + namespace_id: project.namespace.path, + id: project.path + } expect(response).to have_gitlab_http_status(:found) end |