diff options
Diffstat (limited to 'spec/models/namespace_spec.rb')
-rw-r--r-- | spec/models/namespace_spec.rb | 158 |
1 files changed, 111 insertions, 47 deletions
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index 8f5860c799c..54327fc70d9 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -107,34 +107,6 @@ RSpec.describe Namespace do end end end - - context 'when the feature flag `validate_namespace_parent_type` is disabled' do - before do - stub_feature_flags(validate_namespace_parent_type: false) - end - - context 'when the namespace has no parent' do - it 'allows a namespace to have no parent associated with it' do - namespace = build(:namespace) - - expect(namespace).to be_valid - end - end - - context 'when the namespace has a parent' do - it 'allows a namespace to have a group as its parent' do - namespace = build(:namespace, parent: build(:group)) - - expect(namespace).to be_valid - end - - it 'allows a namespace to have another namespace as its parent' do - namespace = build(:namespace, parent: build(:namespace)) - - expect(namespace).to be_valid - end - end - end end describe '#nesting_level_allowed' do @@ -287,13 +259,12 @@ RSpec.describe Namespace do end end - context 'creating a Namespace with nil type' do + context 'unable to create a Namespace with nil type' do + let(:namespace) { nil } let(:namespace_type) { nil } - it 'is the correct type of namespace' do - expect(Namespace.find(namespace.id)).to be_a(Namespace) - expect(namespace.kind).to eq('user') - expect(namespace.user_namespace?).to be_truthy + it 'raises ActiveRecord::NotNullViolation' do + expect { create(:namespace, type: namespace_type, parent: parent) }.to raise_error(ActiveRecord::NotNullViolation) end end @@ -700,20 +671,6 @@ RSpec.describe Namespace do end end - describe '#ancestors_upto' do - let(:parent) { create(:group) } - let(:child) { create(:group, parent: parent) } - let(:child2) { create(:group, parent: child) } - - it 'returns all ancestors when no namespace is given' do - expect(child2.ancestors_upto).to contain_exactly(child, parent) - end - - it 'includes ancestors upto but excluding the given ancestor' do - expect(child2.ancestors_upto(parent)).to contain_exactly(child) - end - end - describe '#move_dir', :request_store do shared_examples "namespace restrictions" do context "when any project has container images" do @@ -1274,6 +1231,38 @@ RSpec.describe Namespace do end end + describe '#use_traversal_ids_for_ancestors_upto?' do + let_it_be(:namespace, reload: true) { create(:namespace) } + + subject { namespace.use_traversal_ids_for_ancestors_upto? } + + context 'when use_traversal_ids_for_ancestors_upto feature flag is true' do + before do + stub_feature_flags(use_traversal_ids_for_ancestors_upto: true) + end + + it { is_expected.to eq true } + + it_behaves_like 'disabled feature flag when traversal_ids is blank' + end + + context 'when use_traversal_ids_for_ancestors_upto feature flag is false' do + before do + stub_feature_flags(use_traversal_ids_for_ancestors_upto: false) + end + + it { is_expected.to eq false } + end + + context 'when use_traversal_ids? feature flag is false' do + before do + stub_feature_flags(use_traversal_ids: false) + end + + it { is_expected.to eq false } + end + end + describe '#users_with_descendants' do let(:user_a) { create(:user) } let(:user_b) { create(:user) } @@ -2066,4 +2055,79 @@ RSpec.describe Namespace do it { is_expected.to be(true) } end end + + it_behaves_like 'it has loose foreign keys' do + let(:factory_name) { :group } + end + + context 'Namespaces::SyncEvent' do + let!(:namespace) { create(:group) } + + let_it_be(:new_namespace1) { create(:group) } + let_it_be(:new_namespace2) { create(:group) } + + context 'when creating the namespace' do + it 'creates a namespaces_sync_event record' do + expect(namespace.sync_events.count).to eq(1) + end + + it 'enqueues ProcessSyncEventsWorker' do + expect(Namespaces::ProcessSyncEventsWorker).to receive(:perform_async) + + create(:namespace) + end + end + + context 'when updating namespace parent_id' do + it 'creates a namespaces_sync_event record' do + expect do + namespace.update!(parent_id: new_namespace1.id) + end.to change(Namespaces::SyncEvent, :count).by(1) + + expect(namespace.sync_events.count).to eq(2) + end + + it 'enqueues ProcessSyncEventsWorker' do + expect(Namespaces::ProcessSyncEventsWorker).to receive(:perform_async) + + namespace.update!(parent_id: new_namespace1.id) + end + end + + context 'when updating namespace other attribute' do + it 'creates a namespaces_sync_event record' do + expect do + namespace.update!(name: 'hello') + end.not_to change(Namespaces::SyncEvent, :count) + end + end + + context 'in the same transaction' do + context 'when updating different parent_id' do + it 'creates two namespaces_sync_event records' do + expect do + Namespace.transaction do + namespace.update!(parent_id: new_namespace1.id) + namespace.update!(parent_id: new_namespace2.id) + end + end.to change(Namespaces::SyncEvent, :count).by(2) + + expect(namespace.sync_events.count).to eq(3) + end + end + + context 'when updating the same parent_id' do + it 'creates one namespaces_sync_event record' do + expect do + Namespace.transaction do + namespace.update!(parent_id: new_namespace1.id) + namespace.update!(parent_id: new_namespace1.id) + end + end.to change(Namespaces::SyncEvent, :count).by(1) + + expect(namespace.sync_events.count).to eq(2) + end + end + end + end end |