Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/namespace_spec.rb')
-rw-r--r--spec/models/namespace_spec.rb133
1 files changed, 110 insertions, 23 deletions
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb
index 71ce3afda44..2e8d22cb9db 100644
--- a/spec/models/namespace_spec.rb
+++ b/spec/models/namespace_spec.rb
@@ -336,6 +336,26 @@ RSpec.describe Namespace do
expect(described_class.without_project_namespaces).to match_array([namespace, namespace1, namespace2, namespace1sub, namespace2sub, user_namespace, project_namespace.parent])
end
end
+
+ describe '.with_shared_runners_enabled' do
+ subject { described_class.with_shared_runners_enabled }
+
+ context 'when shared runners are enabled for namespace' do
+ let!(:namespace_inheriting_shared_runners) { create(:namespace, shared_runners_enabled: true) }
+
+ it "returns a namespace inheriting shared runners" do
+ is_expected.to include(namespace_inheriting_shared_runners)
+ end
+ end
+
+ context 'when shared runners are disabled for namespace' do
+ let!(:namespace_not_inheriting_shared_runners) { create(:namespace, shared_runners_enabled: false) }
+
+ it "does not return a namespace not inheriting shared runners" do
+ is_expected.not_to include(namespace_not_inheriting_shared_runners)
+ end
+ end
+ end
end
describe 'delegate' do
@@ -439,19 +459,54 @@ RSpec.describe Namespace do
context 'traversal_ids on create' do
shared_examples 'default traversal_ids' do
- let(:namespace) { build(:namespace) }
-
- before do
- namespace.save!
- namespace.reload
- end
+ let!(:namespace) { create(:group) }
+ let!(:child_namespace) { create(:group, parent: namespace) }
- it { expect(namespace.traversal_ids).to eq [namespace.id] }
+ it { expect(namespace.reload.traversal_ids).to eq [namespace.id] }
+ it { expect(child_namespace.reload.traversal_ids).to eq [namespace.id, child_namespace.id] }
+ it { expect(namespace.sync_events.count).to eq 1 }
+ it { expect(child_namespace.sync_events.count).to eq 1 }
end
it_behaves_like 'default traversal_ids'
end
+ context 'traversal_ids on update' do
+ let!(:namespace1) { create(:group) }
+ let!(:namespace2) { create(:group) }
+
+ it 'updates the traversal_ids when the parent_id is changed' do
+ expect do
+ namespace1.update!(parent: namespace2)
+ end.to change { namespace1.reload.traversal_ids }.from([namespace1.id]).to([namespace2.id, namespace1.id])
+ end
+
+ it 'creates a Namespaces::SyncEvent using triggers' do
+ Namespaces::SyncEvent.delete_all
+ namespace1.update!(parent: namespace2)
+ expect(namespace1.reload.sync_events.count).to eq(1)
+ end
+
+ it 'creates sync_events using database trigger on the table' do
+ expect { Group.update_all(traversal_ids: [-1]) }.to change(Namespaces::SyncEvent, :count).by(2)
+ end
+
+ it 'does not create sync_events using database trigger on the table when only the parent_id has changed' do
+ expect { Group.update_all(parent_id: -1) }.not_to change(Namespaces::SyncEvent, :count)
+ end
+
+ it 'triggers the callback sync_traversal_ids on the namespace' do
+ allow(namespace1).to receive(:run_callbacks).and_call_original
+ expect(namespace1).to receive(:run_callbacks).with(:sync_traversal_ids)
+ namespace1.update!(parent: namespace2)
+ end
+
+ it 'calls schedule_sync_event_worker on the updated namespace' do
+ expect(namespace1).to receive(:schedule_sync_event_worker)
+ namespace1.update!(parent: namespace2)
+ end
+ end
+
describe "after_commit :expire_child_caches" do
let(:namespace) { create(:group) }
@@ -675,6 +730,24 @@ RSpec.describe Namespace do
end
end
+ describe '#any_project_with_shared_runners_enabled?' do
+ subject { namespace.any_project_with_shared_runners_enabled? }
+
+ let!(:project_not_inheriting_shared_runners) do
+ create(:project, namespace: namespace, shared_runners_enabled: false)
+ end
+
+ context 'when a child project has shared runners enabled' do
+ let!(:project_inheriting_shared_runners) { create(:project, namespace: namespace, shared_runners_enabled: true) }
+
+ it { is_expected.to eq true }
+ end
+
+ context 'when all child projects have shared runners disabled' do
+ it { is_expected.to eq false }
+ end
+ end
+
describe '.search' do
let_it_be(:first_group) { create(:group, name: 'my first namespace', path: 'old-path') }
let_it_be(:parent_group) { create(:group, name: 'my parent namespace', path: 'parent-path') }
@@ -744,30 +817,30 @@ RSpec.describe Namespace do
create(:project,
namespace: namespace,
statistics: build(:project_statistics,
- namespace: namespace,
- repository_size: 101,
- wiki_size: 505,
- lfs_objects_size: 202,
- build_artifacts_size: 303,
+ namespace: namespace,
+ repository_size: 101,
+ wiki_size: 505,
+ lfs_objects_size: 202,
+ build_artifacts_size: 303,
pipeline_artifacts_size: 707,
- packages_size: 404,
- snippets_size: 605,
- uploads_size: 808))
+ packages_size: 404,
+ snippets_size: 605,
+ uploads_size: 808))
end
let(:project2) do
create(:project,
namespace: namespace,
statistics: build(:project_statistics,
- namespace: namespace,
- repository_size: 10,
- wiki_size: 50,
- lfs_objects_size: 20,
- build_artifacts_size: 30,
+ namespace: namespace,
+ repository_size: 10,
+ wiki_size: 50,
+ lfs_objects_size: 20,
+ build_artifacts_size: 30,
pipeline_artifacts_size: 70,
- packages_size: 40,
- snippets_size: 60,
- uploads_size: 80))
+ packages_size: 40,
+ snippets_size: 60,
+ uploads_size: 80))
end
it "sums all project storage counters in the namespace" do
@@ -2216,6 +2289,20 @@ RSpec.describe Namespace do
expect(namespace.sync_events.count).to eq(2)
end
+ it 'creates a namespaces_sync_event for the parent and all the descendent namespaces' do
+ children_namespaces = create_list(:group, 2, parent_id: namespace.id)
+ grand_children_namespaces = create_list(:group, 2, parent_id: children_namespaces.first.id)
+ expect(Namespaces::ProcessSyncEventsWorker).to receive(:perform_async).exactly(:once)
+ Namespaces::SyncEvent.delete_all
+
+ expect do
+ namespace.update!(parent_id: new_namespace1.id)
+ end.to change(Namespaces::SyncEvent, :count).by(5)
+
+ expected_ids = [namespace.id] + children_namespaces.map(&:id) + grand_children_namespaces.map(&:id)
+ expect(Namespaces::SyncEvent.pluck(:namespace_id)).to match_array(expected_ids)
+ end
+
it 'enqueues ProcessSyncEventsWorker' do
expect(Namespaces::ProcessSyncEventsWorker).to receive(:perform_async)