diff options
Diffstat (limited to 'spec/finders/packages')
-rw-r--r-- | spec/finders/packages/helm/package_files_finder_spec.rb | 47 | ||||
-rw-r--r-- | spec/finders/packages/maven/package_finder_spec.rb | 136 | ||||
-rw-r--r-- | spec/finders/packages/pypi/package_finder_spec.rb | 10 |
3 files changed, 107 insertions, 86 deletions
diff --git a/spec/finders/packages/helm/package_files_finder_spec.rb b/spec/finders/packages/helm/package_files_finder_spec.rb new file mode 100644 index 00000000000..2b84fd2b2d2 --- /dev/null +++ b/spec/finders/packages/helm/package_files_finder_spec.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe ::Packages::Helm::PackageFilesFinder do + let_it_be(:project1) { create(:project) } + let_it_be(:project2) { create(:project) } + let_it_be(:helm_package) { create(:helm_package, project: project1) } + let_it_be(:helm_package_file) { helm_package.package_files.first } + let_it_be(:debian_package) { create(:debian_package, project: project1) } + + describe '#execute' do + let(:project) { project1 } + let(:channel) { 'stable' } + let(:params) { {} } + + subject { described_class.new(project, channel, params).execute } + + context 'with empty params' do + it { is_expected.to match_array([helm_package_file]) } + end + + context 'with another project' do + let(:project) { project2 } + + it { is_expected.to match_array([]) } + end + + context 'with another channel' do + let(:channel) { 'staging' } + + it { is_expected.to match_array([]) } + end + + context 'with file_name' do + let(:params) { { file_name: helm_package_file.file_name } } + + it { is_expected.to match_array([helm_package_file]) } + end + + context 'with another file_name' do + let(:params) { { file_name: 'foobar.tgz' } } + + it { is_expected.to match_array([]) } + end + end +end 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 diff --git a/spec/finders/packages/pypi/package_finder_spec.rb b/spec/finders/packages/pypi/package_finder_spec.rb index 7d9eb8a5cd1..f065bd21f6d 100644 --- a/spec/finders/packages/pypi/package_finder_spec.rb +++ b/spec/finders/packages/pypi/package_finder_spec.rb @@ -31,15 +31,7 @@ RSpec.describe Packages::Pypi::PackageFinder do context 'within a group' do let(:scope) { group } - it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } - - context 'user with access' do - before do - project.add_developer(user) - end - - it { is_expected.to eq(package2) } - end + it { is_expected.to eq(package2) } end end end |