diff options
Diffstat (limited to 'spec/models/namespace_spec.rb')
-rw-r--r-- | spec/models/namespace_spec.rb | 85 |
1 files changed, 84 insertions, 1 deletions
diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index 373f3a89e14..ea1ce067e4d 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -156,7 +156,7 @@ RSpec.describe Namespace do end end - describe 'scopes' do + describe 'scopes', :aggregate_failures do let_it_be(:namespace1) { create(:group, name: 'Namespace 1', path: 'namespace-1') } let_it_be(:namespace2) { create(:group, name: 'Namespace 2', path: 'namespace-2') } let_it_be(:namespace1sub) { create(:group, name: 'Sub Namespace', path: 'sub-namespace', parent: namespace1) } @@ -181,6 +181,15 @@ RSpec.describe Namespace do expect(described_class.filter_by_path(namespace1.path.upcase)).to eq([namespace1]) end end + + describe '.sorted_by_similarity_and_parent_id_desc' do + it 'returns exact matches and top level groups first' do + expect(described_class.sorted_by_similarity_and_parent_id_desc(namespace1.path)).to eq([namespace1, namespace2, namespace2sub, namespace1sub, namespace]) + expect(described_class.sorted_by_similarity_and_parent_id_desc(namespace2.path)).to eq([namespace2, namespace1, namespace2sub, namespace1sub, namespace]) + expect(described_class.sorted_by_similarity_and_parent_id_desc(namespace2sub.name)).to eq([namespace2sub, namespace1sub, namespace2, namespace1, namespace]) + expect(described_class.sorted_by_similarity_and_parent_id_desc('Namespace')).to eq([namespace2, namespace1, namespace2sub, namespace1sub, namespace]) + end + end end describe 'delegate' do @@ -965,6 +974,14 @@ RSpec.describe Namespace do end end + shared_examples 'disabled feature flag when traversal_ids is blank' do + before do + namespace.traversal_ids = [] + end + + it { is_expected.to eq false } + end + describe '#use_traversal_ids?' do let_it_be(:namespace, reload: true) { create(:namespace) } @@ -976,6 +993,8 @@ RSpec.describe Namespace do end it { is_expected.to eq true } + + it_behaves_like 'disabled feature flag when traversal_ids is blank' end context 'when use_traversal_ids feature flag is false' do @@ -987,6 +1006,62 @@ RSpec.describe Namespace do end end + describe '#use_traversal_ids_for_root_ancestor?' do + let_it_be(:namespace, reload: true) { create(:namespace) } + + subject { namespace.use_traversal_ids_for_root_ancestor? } + + context 'when use_traversal_ids_for_root_ancestor feature flag is true' do + before do + stub_feature_flags(use_traversal_ids_for_root_ancestor: 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_root_ancestor feature flag is false' do + before do + stub_feature_flags(use_traversal_ids_for_root_ancestor: false) + end + + it { is_expected.to eq false } + end + end + + describe '#use_traversal_ids_for_ancestors?' do + let_it_be(:namespace, reload: true) { create(:namespace) } + + subject { namespace.use_traversal_ids_for_ancestors? } + + context 'when use_traversal_ids_for_ancestors? feature flag is true' do + before do + stub_feature_flags(use_traversal_ids_for_ancestors: 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? feature flag is false' do + before do + stub_feature_flags(use_traversal_ids_for_ancestors: 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) } @@ -1058,6 +1133,14 @@ RSpec.describe Namespace do end include_examples '#all_projects' + + # Using #self_and_descendant instead of #self_and_descendant_ids can produce + # very slow queries. + it 'calls self_and_descendant_ids' do + namespace = create(:group) + expect(namespace).to receive(:self_and_descendant_ids) + namespace.all_projects + end end context 'with use_traversal_ids feature flag disabled' do |