diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 9d1c44db1371c8fd48013b429d85075be59dcf22..4d7e33d7b1129776d8e03dd128c6940f17462e2f 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -148,7 +148,7 @@ class ProjectsController < Projects::ApplicationController def archive return access_denied! unless can?(current_user, :archive_project, @project) - @project.archive! + ::Projects::UpdateService.new(@project, current_user, archived: true).execute respond_to do |format| format.html { redirect_to project_path(@project) } @@ -158,7 +158,7 @@ class ProjectsController < Projects::ApplicationController def unarchive return access_denied! unless can?(current_user, :archive_project, @project) - @project.unarchive! + ::Projects::UpdateService.new(@project, current_user, archived: false).execute respond_to do |format| format.html { redirect_to project_path(@project) } diff --git a/app/models/project.rb b/app/models/project.rb index 16d63639141c9806bf4685bd9a3f93138092b07b..cf6160d9f64d1677da1d71f3ae7734b93c3702e6 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1320,14 +1320,6 @@ class Project < ActiveRecord::Base :visibility_level end - def archive! - update_attribute(:archived, true) - end - - def unarchive! - update_attribute(:archived, false) - end - def change_head(branch) if repository.branch_exists?(branch) repository.before_change_head diff --git a/changelogs/unreleased/jr-archive-hook.yml b/changelogs/unreleased/jr-archive-hook.yml new file mode 100644 index 0000000000000000000000000000000000000000..56c13f1370eb504d172ba275f04bf98c1143e0a2 --- /dev/null +++ b/changelogs/unreleased/jr-archive-hook.yml @@ -0,0 +1,5 @@ +--- +title: Trigger system hooks when project is archived/unarchived +merge_request: 20995 +author: +type: added diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 7adde79d6c349fcceb59e7c864b7c37b4477fed2..5738bf220c63c6c84040a859ef8dafdba9775fb0 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -321,7 +321,7 @@ module API post ':id/archive' do authorize!(:archive_project, user_project) - user_project.archive! + ::Projects::UpdateService.new(user_project, current_user, archived: true).execute present user_project, with: Entities::Project end @@ -332,7 +332,7 @@ module API post ':id/unarchive' do authorize!(:archive_project, user_project) - user_project.unarchive! + ::Projects::UpdateService.new(@project, current_user, archived: false).execute present user_project, with: Entities::Project end diff --git a/spec/features/explore/groups_list_spec.rb b/spec/features/explore/groups_list_spec.rb index ad02b454aeed6184043884de31e69340a3fae830..8ed4051856e1750e1ea9d6fc108c9aeafd4c9f08 100644 --- a/spec/features/explore/groups_list_spec.rb +++ b/spec/features/explore/groups_list_spec.rb @@ -53,14 +53,14 @@ describe 'Explore Groups page', :js do expect(find('.js-groups-list-holder .content-list li:first-child .stats .number-projects')).to have_text("1") # Archive project - empty_project.archive! + ::Projects::UpdateService.new(empty_project, user, archived: true).execute visit explore_groups_path # Check project count expect(find('.js-groups-list-holder .content-list li:first-child .stats .number-projects')).to have_text("0") # Unarchive project - empty_project.unarchive! + ::Projects::UpdateService.new(empty_project, user, archived: false).execute visit explore_groups_path # Check project count diff --git a/spec/features/groups/issues_spec.rb b/spec/features/groups/issues_spec.rb index 97d8776b15a5510f581e8e444127924b863dff0c..176f4a668ffc6f0f64b39a95215f23b0900baedd 100644 --- a/spec/features/groups/issues_spec.rb +++ b/spec/features/groups/issues_spec.rb @@ -52,6 +52,7 @@ describe 'Group issues page' do context 'issues list', :nested_groups do let(:subgroup) { create(:group, parent: group) } let(:subgroup_project) { create(:project, :public, group: subgroup)} + let(:user_in_group) { create(:group_member, :maintainer, user: create(:user), group: group ).user } let!(:issue) { create(:issue, project: project, title: 'root group issue') } let!(:subgroup_issue) { create(:issue, project: subgroup_project, title: 'subgroup issue') } @@ -67,7 +68,7 @@ describe 'Group issues page' do context 'when project is archived' do before do - project.archive! + ::Projects::UpdateService.new(project, user_in_group, archived: true).execute end it 'does not render issue' do diff --git a/spec/finders/labels_finder_spec.rb b/spec/finders/labels_finder_spec.rb index eb2a4576e30cad753f1b15a8e8c75db8be0e444e..f5cec8e349aa2fe7ec9ab332d12bc1cc717d2cec 100644 --- a/spec/finders/labels_finder_spec.rb +++ b/spec/finders/labels_finder_spec.rb @@ -55,7 +55,7 @@ describe LabelsFinder do context 'filtering by group_id' do it 'returns labels available for any non-archived project within the group' do group_1.add_developer(user) - project_1.archive! + ::Projects::UpdateService.new(project_1, user, archived: true).execute finder = described_class.new(user, group_id: group_1.id) expect(finder.execute).to eq [group_label_2, group_label_1, project_label_5] diff --git a/spec/finders/move_to_project_finder_spec.rb b/spec/finders/move_to_project_finder_spec.rb index 1511cb0e04c6d279606bb0e3e30069fefdd29dac..1b3f44cced1fe10ac6f8b7834e1d4c79830c49a3 100644 --- a/spec/finders/move_to_project_finder_spec.rb +++ b/spec/finders/move_to_project_finder_spec.rb @@ -36,7 +36,7 @@ describe MoveToProjectFinder do it 'does not return archived projects' do reporter_project.add_reporter(user) - reporter_project.archive! + ::Projects::UpdateService.new(reporter_project, user, archived: true).execute other_reporter_project = create(:project) other_reporter_project.add_reporter(user) diff --git a/spec/requests/api/internal_spec.rb b/spec/requests/api/internal_spec.rb index b537b6e1667f439816eada3cf7e5d0559539520d..85c93f35c20a1e0aaf0de1c361098dd7bcc3406e 100644 --- a/spec/requests/api/internal_spec.rb +++ b/spec/requests/api/internal_spec.rb @@ -429,7 +429,7 @@ describe API::Internal do context "archived project" do before do project.add_developer(user) - project.archive! + ::Projects::UpdateService.new(project, user, archived: true).execute end context "git pull" do diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 71e3436fa76046885edec03d3539660d5ba80af3..eb41750bf4762b7447104784c3bccb787f33d952 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -1677,7 +1677,7 @@ describe API::Projects do context 'on an archived project' do before do - project.archive! + ::Projects::UpdateService.new(project, user, archived: true).execute end it 'remains archived' do @@ -1713,7 +1713,7 @@ describe API::Projects do context 'on an archived project' do before do - project.archive! + ::Projects::UpdateService.new(project, user, archived: true).execute end it 'unarchives the project' do