mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-08-16 17:13:01 +00:00
Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
18
app/events/groups/group_path_changed_event.rb
Normal file
18
app/events/groups/group_path_changed_event.rb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Groups
|
||||||
|
class GroupPathChangedEvent < ::Gitlab::EventStore::Event
|
||||||
|
def schema
|
||||||
|
{
|
||||||
|
'type' => 'object',
|
||||||
|
'properties' => {
|
||||||
|
'group_id' => { 'type' => 'integer' },
|
||||||
|
'root_namespace_id' => { 'type' => 'integer' },
|
||||||
|
'old_path' => { 'type' => 'string' },
|
||||||
|
'new_path' => { 'type' => 'string' }
|
||||||
|
},
|
||||||
|
'required' => %w[group_id root_namespace_id old_path new_path]
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -61,15 +61,18 @@ module Groups
|
|||||||
end
|
end
|
||||||
|
|
||||||
def before_assignment_hook(group, params)
|
def before_assignment_hook(group, params)
|
||||||
# overridden in EE
|
@full_path_before = group.full_path
|
||||||
|
@path_before = group.path
|
||||||
end
|
end
|
||||||
|
|
||||||
def renaming_group_with_container_registry_images?
|
def renaming_group_with_container_registry_images?
|
||||||
|
renaming? && group.has_container_repository_including_subgroups?
|
||||||
|
end
|
||||||
|
|
||||||
|
def renaming?
|
||||||
new_path = params[:path]
|
new_path = params[:path]
|
||||||
|
|
||||||
new_path &&
|
new_path && new_path != @path_before
|
||||||
new_path != group.path &&
|
|
||||||
group.has_container_repository_including_subgroups?
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def container_images_error
|
def container_images_error
|
||||||
@ -83,6 +86,8 @@ module Groups
|
|||||||
end
|
end
|
||||||
|
|
||||||
update_two_factor_requirement_for_subgroups
|
update_two_factor_requirement_for_subgroups
|
||||||
|
|
||||||
|
publish_event
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_two_factor_requirement_for_subgroups
|
def update_two_factor_requirement_for_subgroups
|
||||||
@ -154,6 +159,21 @@ module Groups
|
|||||||
group.errors.add(:update_shared_runners, result[:message])
|
group.errors.add(:update_shared_runners, result[:message])
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def publish_event
|
||||||
|
return unless renaming?
|
||||||
|
|
||||||
|
event = Groups::GroupPathChangedEvent.new(
|
||||||
|
data: {
|
||||||
|
group_id: group.id,
|
||||||
|
root_namespace_id: group.root_ancestor.id,
|
||||||
|
old_path: @full_path_before,
|
||||||
|
new_path: group.full_path
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Gitlab::EventStore.publish(event)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -339,8 +339,44 @@ RSpec.describe Groups::UpdateService do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'EventStore' do
|
||||||
|
let(:service) { described_class.new(group, user, **params) }
|
||||||
|
let(:root_group) { create(:group, path: 'root') }
|
||||||
|
let(:group) do
|
||||||
|
create(:group, parent: root_group, path: 'old-path').tap { |g| g.add_owner(user) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when changing a group path' do
|
||||||
|
let(:new_path) { SecureRandom.hex }
|
||||||
|
let(:params) { { path: new_path } }
|
||||||
|
|
||||||
|
it 'publishes a GroupPathChangedEvent' do
|
||||||
|
old_path = group.full_path
|
||||||
|
|
||||||
|
expect { service.execute }
|
||||||
|
.to publish_event(Groups::GroupPathChangedEvent)
|
||||||
|
.with(
|
||||||
|
group_id: group.id,
|
||||||
|
root_namespace_id: group.root_ancestor.id,
|
||||||
|
old_path: old_path,
|
||||||
|
new_path: "root/#{new_path}"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when not changing a group path' do
|
||||||
|
let(:params) { { name: 'very-new-name' } }
|
||||||
|
|
||||||
|
it 'does not publish a GroupPathChangedEvent' do
|
||||||
|
expect { service.execute }
|
||||||
|
.not_to publish_event(Groups::GroupPathChangedEvent)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'rename group' do
|
context 'rename group' do
|
||||||
let!(:service) { described_class.new(internal_group, user, path: SecureRandom.hex) }
|
let(:new_path) { SecureRandom.hex }
|
||||||
|
let!(:service) { described_class.new(internal_group, user, path: new_path) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
internal_group.add_member(user, Gitlab::Access::MAINTAINER)
|
internal_group.add_member(user, Gitlab::Access::MAINTAINER)
|
||||||
|
Reference in New Issue
Block a user