diff options
Diffstat (limited to 'spec/finders/packages/maven/package_finder_spec.rb')
-rw-r--r-- | spec/finders/packages/maven/package_finder_spec.rb | 136 |
1 files changed, 59 insertions, 77 deletions
diff --git a/spec/finders/packages/maven/package_finder_spec.rb b/spec/finders/packages/maven/package_finder_spec.rb index 13c603f1ec4..38fc3b7cce4 100644 --- a/spec/finders/packages/maven/package_finder_spec.rb +++ b/spec/finders/packages/maven/package_finder_spec.rb @@ -17,107 +17,89 @@ RSpec.describe ::Packages::Maven::PackageFinder do group.add_developer(user) end - shared_examples 'Packages::Maven::PackageFinder examples' do - describe '#execute!' do - subject { finder.execute! } + describe '#execute!' do + subject { finder.execute! } - shared_examples 'handling valid and invalid paths' do - context 'with a valid path' do - let(:param_path) { package.maven_metadatum.path } + shared_examples 'handling valid and invalid paths' do + context 'with a valid path' do + let(:param_path) { package.maven_metadatum.path } - it { is_expected.to eq(package) } - end - - context 'with an invalid path' do - let(:param_path) { 'com/example/my-app/1.0-SNAPSHOT' } - - it 'raises an error' do - expect { subject }.to raise_error(ActiveRecord::RecordNotFound) - end - end - - context 'with an uninstallable package' do - let(:param_path) { package.maven_metadatum.path } - - before do - package.update_column(:status, 1) - end - - it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } - end + it { is_expected.to eq(package) } end - context 'within the project' do - let(:project_or_group) { project } + context 'with an invalid path' do + let(:param_path) { 'com/example/my-app/1.0-SNAPSHOT' } - it_behaves_like 'handling valid and invalid paths' - end - - context 'within a group' do - let(:project_or_group) { group } - - it_behaves_like 'handling valid and invalid paths' - end - - context 'across all projects' do it 'raises an error' do expect { subject }.to raise_error(ActiveRecord::RecordNotFound) end end - context 'versionless maven-metadata.xml package' do - let_it_be(:sub_group1) { create(:group, parent: group) } - let_it_be(:sub_group2) { create(:group, parent: group) } - let_it_be(:project1) { create(:project, group: sub_group1) } - let_it_be(:project2) { create(:project, group: sub_group2) } - let_it_be(:project3) { create(:project, group: sub_group1) } - let_it_be(:package_name) { 'foo' } - let_it_be(:package1) { create(:maven_package, project: project1, name: package_name, version: nil) } - let_it_be(:package2) { create(:maven_package, project: project2, name: package_name, version: nil) } - let_it_be(:package3) { create(:maven_package, project: project3, name: package_name, version: nil) } - - let(:project_or_group) { group } - let(:param_path) { package_name } + context 'with an uninstallable package' do + let(:param_path) { package.maven_metadatum.path } before do - sub_group1.add_developer(user) - sub_group2.add_developer(user) - # the package with the most recently published file should be returned - create(:package_file, :xml, package: package2) - end - - context 'without order by package file' do - it { is_expected.to eq(package3) } + package.update_column(:status, 1) end - context 'with order by package file' do - let(:param_order_by_package_file) { true } - - it { is_expected.to eq(package2) } - end + it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } end end - end - context 'when the maven_metadata_by_path_with_optimization_fence feature flag is off' do - before do - stub_feature_flags(maven_metadata_by_path_with_optimization_fence: false) + context 'within the project' do + let(:project_or_group) { project } + + it_behaves_like 'handling valid and invalid paths' end - it_behaves_like 'Packages::Maven::PackageFinder examples' - end + context 'within a group' do + let(:project_or_group) { group } - context 'when the maven_metadata_by_path_with_optimization_fence feature flag is on' do - before do - stub_feature_flags(maven_metadata_by_path_with_optimization_fence: true) + it_behaves_like 'handling valid and invalid paths' end - it_behaves_like 'Packages::Maven::PackageFinder examples' + context 'across all projects' do + it 'raises an error' do + expect { subject }.to raise_error(ActiveRecord::RecordNotFound) + end + end - it 'uses CTE in the query' do - sql = described_class.new(user, group, path: package.maven_metadatum.path).send(:packages).to_sql + context 'versionless maven-metadata.xml package' do + let_it_be(:sub_group1) { create(:group, parent: group) } + let_it_be(:sub_group2) { create(:group, parent: group) } + let_it_be(:project1) { create(:project, group: sub_group1) } + let_it_be(:project2) { create(:project, group: sub_group2) } + let_it_be(:project3) { create(:project, group: sub_group1) } + let_it_be(:package_name) { 'foo' } + let_it_be(:package1) { create(:maven_package, project: project1, name: package_name, version: nil) } + let_it_be(:package2) { create(:maven_package, project: project2, name: package_name, version: nil) } + let_it_be(:package3) { create(:maven_package, project: project3, name: package_name, version: nil) } + + let(:project_or_group) { group } + let(:param_path) { package_name } + + before do + sub_group1.add_developer(user) + sub_group2.add_developer(user) + # the package with the most recently published file should be returned + create(:package_file, :xml, package: package2) + end - expect(sql).to include('WITH "maven_metadata_by_path" AS') + context 'without order by package file' do + it { is_expected.to eq(package3) } + end + + context 'with order by package file' do + let(:param_order_by_package_file) { true } + + it { is_expected.to eq(package2) } + end end end + + it 'uses CTE in the query' do + sql = described_class.new(user, group, path: package.maven_metadatum.path).send(:packages).to_sql + + expect(sql).to include('WITH "maven_metadata_by_path" AS') + end end |