diff options
author | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 22:34:23 +0300 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 22:34:23 +0300 |
commit | 6438df3a1e0fb944485cebf07976160184697d72 (patch) | |
tree | 00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /spec/finders/packages | |
parent | 42bcd54d971da7ef2854b896a7b34f4ef8601067 (diff) |
Add latest changes from gitlab-org/gitlab@13-8-stable-eev13.8.0-rc42
Diffstat (limited to 'spec/finders/packages')
5 files changed, 164 insertions, 77 deletions
diff --git a/spec/finders/packages/debian/distributions_finder_spec.rb b/spec/finders/packages/debian/distributions_finder_spec.rb new file mode 100644 index 00000000000..f141b13e394 --- /dev/null +++ b/spec/finders/packages/debian/distributions_finder_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::Debian::DistributionsFinder do + it_behaves_like 'Debian Distributions Finder', :debian_project_distribution, true + it_behaves_like 'Debian Distributions Finder', :debian_group_distribution, false + + context 'with nil container' do + let(:service) { described_class.new(nil) } + + subject { service.execute.to_a } + + it 'raises error' do + expect { subject }.to raise_error ArgumentError, "Unexpected container type of 'NilClass'" + end + end + + context 'with unexpected container type' do + let(:service) { described_class.new(:invalid) } + + subject { service.execute.to_a } + + it 'raises error' do + expect { subject }.to raise_error ArgumentError, "Unexpected container type of 'Symbol'" + end + end +end diff --git a/spec/finders/packages/group_packages_finder_spec.rb b/spec/finders/packages/group_packages_finder_spec.rb index 0db69de65a5..8dd53b9c3f9 100644 --- a/spec/finders/packages/group_packages_finder_spec.rb +++ b/spec/finders/packages/group_packages_finder_spec.rb @@ -127,12 +127,6 @@ RSpec.describe Packages::GroupPackagesFinder do it { is_expected.to match_array([package1, package2]) } end - context 'does not include packages without version number' do - let_it_be(:package_without_version) { create(:maven_package, project: project, version: nil) } - - it { is_expected.not_to include(package_without_version) } - end - context 'with package_name' do let_it_be(:named_package) { create(:maven_package, project: project, name: 'maven') } let(:params) { { package_name: package_name } } @@ -151,6 +145,8 @@ RSpec.describe Packages::GroupPackagesFinder do end end end + + it_behaves_like 'concerning versionless param' end context 'group has package of all types' do diff --git a/spec/finders/packages/maven/package_finder_spec.rb b/spec/finders/packages/maven/package_finder_spec.rb index 239e8c10f52..b955c331f28 100644 --- a/spec/finders/packages/maven/package_finder_spec.rb +++ b/spec/finders/packages/maven/package_finder_spec.rb @@ -1,57 +1,81 @@ # frozen_string_literal: true + require 'spec_helper' RSpec.describe ::Packages::Maven::PackageFinder do - let(:user) { create(:user) } - let(:group) { create(:group) } - let(:project) { create(:project, namespace: group) } - let(:package) { create(:maven_package, project: project) } + let_it_be(:user) { create(:user) } + let_it_be(:group) { create(:group) } + let_it_be(:project) { create(:project, namespace: group) } + let_it_be(:package) { create(:maven_package, project: project) } + + let(:param_path) { nil } + let(:param_project) { nil } + let(:param_group) { nil } + let(:finder) { described_class.new(param_path, user, project: param_project, group: param_group) } before do group.add_developer(user) end describe '#execute!' do - context 'within the project' do - it 'returns a package' do - finder = described_class.new(package.maven_metadatum.path, user, project: project) - - expect(finder.execute!).to eq(package) - end + subject { finder.execute! } - it 'raises an error' do - finder = described_class.new('com/example/my-app/1.0-SNAPSHOT', user, project: project) + shared_examples 'handling valid and invalid paths' do + context 'with a valid path' do + let(:param_path) { package.maven_metadatum.path } - expect { finder.execute! }.to raise_error(ActiveRecord::RecordNotFound) + it { is_expected.to eq(package) } end - end - context 'across all projects' do - it 'returns a package' do - finder = described_class.new(package.maven_metadatum.path, user) + context 'with an invalid path' do + let(:param_path) { 'com/example/my-app/1.0-SNAPSHOT' } - expect(finder.execute!).to eq(package) + it 'raises an error' do + expect { subject }.to raise_error(ActiveRecord::RecordNotFound) + end end + end - it 'raises an error' do - finder = described_class.new('com/example/my-app/1.0-SNAPSHOT', user) + context 'within the project' do + let(:param_project) { project } - expect { finder.execute! }.to raise_error(ActiveRecord::RecordNotFound) - end + it_behaves_like 'handling valid and invalid paths' end context 'within a group' do - it 'returns a package' do - finder = described_class.new(package.maven_metadatum.path, user, group: group) + let(:param_group) { group } - expect(finder.execute!).to eq(package) - end + it_behaves_like 'handling valid and invalid paths' + end + context 'across all projects' do it 'raises an error' do - finder = described_class.new('com/example/my-app/1.0-SNAPSHOT', user, group: group) + 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) } - expect { finder.execute! }.to raise_error(ActiveRecord::RecordNotFound) + let(:param_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 + + it { is_expected.to eq(package2) } end end end diff --git a/spec/finders/packages/nuget/package_finder_spec.rb b/spec/finders/packages/nuget/package_finder_spec.rb index 9295d0c7a2f..10b5f6c8ec2 100644 --- a/spec/finders/packages/nuget/package_finder_spec.rb +++ b/spec/finders/packages/nuget/package_finder_spec.rb @@ -2,74 +2,117 @@ require 'spec_helper' RSpec.describe Packages::Nuget::PackageFinder do - let_it_be(:package1) { create(:nuget_package) } - let_it_be(:project) { package1.project } + let_it_be(:user) { create(:user) } + let_it_be(:group) { create(:group) } + let_it_be(:subgroup) { create(:group, parent: group) } + let_it_be(:project) { create(:project, namespace: subgroup) } + let_it_be(:package1) { create(:nuget_package, project: project) } let_it_be(:package2) { create(:nuget_package, name: package1.name, version: '2.0.0', project: project) } let_it_be(:package3) { create(:nuget_package, name: 'Another.Dummy.Package', project: project) } + let_it_be(:other_package_1) { create(:nuget_package, name: package1.name, version: package1.version) } + let_it_be(:other_package_2) { create(:nuget_package, name: package1.name, version: package2.version) } let(:package_name) { package1.name } let(:package_version) { nil } let(:limit) { 50 } describe '#execute!' do - subject { described_class.new(project, package_name: package_name, package_version: package_version, limit: limit).execute } + subject { described_class.new(user, target, package_name: package_name, package_version: package_version, limit: limit).execute } - it { is_expected.to match_array([package1, package2]) } + shared_examples 'handling all the conditions' do + it { is_expected.to match_array([package1, package2]) } - context 'with lower case package name' do - let(:package_name) { package1.name.downcase } + context 'with lower case package name' do + let(:package_name) { package1.name.downcase } - it { is_expected.to match_array([package1, package2]) } - end + it { is_expected.to match_array([package1, package2]) } + end - context 'with unknown package name' do - let(:package_name) { 'foobar' } + context 'with unknown package name' do + let(:package_name) { 'foobar' } - it { is_expected.to be_empty } - end + it { is_expected.to be_empty } + end - context 'with valid version' do - let(:package_version) { '2.0.0' } + context 'with valid version' do + let(:package_version) { '2.0.0' } - it { is_expected.to match_array([package2]) } - end + it { is_expected.to match_array([package2]) } + end - context 'with unknown version' do - let(:package_version) { 'foobar' } + context 'with unknown version' do + let(:package_version) { 'foobar' } - it { is_expected.to be_empty } - end + it { is_expected.to be_empty } + end + + context 'with limit hit' do + let_it_be(:package4) { create(:nuget_package, name: package1.name, project: project) } + let_it_be(:package5) { create(:nuget_package, name: package1.name, project: project) } + let_it_be(:package6) { create(:nuget_package, name: package1.name, project: project) } + let(:limit) { 2 } + + it { is_expected.to match_array([package5, package6]) } + end + + context 'with downcase package name' do + let(:package_name) { package1.name.downcase } + + it { is_expected.to match_array([package1, package2]) } + end - context 'with limit hit' do - let_it_be(:package4) { create(:nuget_package, name: package1.name, project: project) } - let_it_be(:package5) { create(:nuget_package, name: package1.name, project: project) } - let_it_be(:package6) { create(:nuget_package, name: package1.name, project: project) } - let(:limit) { 2 } + context 'with prefix wildcard' do + let(:package_name) { "%#{package1.name[3..-1]}" } - it { is_expected.to match_array([package5, package6]) } + it { is_expected.to match_array([package1, package2]) } + end + + context 'with suffix wildcard' do + let(:package_name) { "#{package1.name[0..-3]}%" } + + it { is_expected.to match_array([package1, package2]) } + end + + context 'with surrounding wildcards' do + let(:package_name) { "%#{package1.name[3..-3]}%" } + + it { is_expected.to match_array([package1, package2]) } + end end - context 'with downcase package name' do - let(:package_name) { package1.name.downcase } + context 'with a project' do + let(:target) { project } - it { is_expected.to match_array([package1, package2]) } + before do + project.add_developer(user) + end + + it_behaves_like 'handling all the conditions' end - context 'with prefix wildcard' do - let(:package_name) { "%#{package1.name[3..-1]}" } + context 'with a subgroup' do + let(:target) { subgroup } - it { is_expected.to match_array([package1, package2]) } + before do + subgroup.add_developer(user) + end + + it_behaves_like 'handling all the conditions' end - context 'with suffix wildcard' do - let(:package_name) { "#{package1.name[0..-3]}%" } + context 'with a group' do + let(:target) { group } - it { is_expected.to match_array([package1, package2]) } + before do + group.add_developer(user) + end + + it_behaves_like 'handling all the conditions' end - context 'with surrounding wildcards' do - let(:package_name) { "%#{package1.name[3..-3]}%" } + context 'with nil' do + let(:target) { nil } - it { is_expected.to match_array([package1, package2]) } + it { is_expected.to be_empty } end end end diff --git a/spec/finders/packages/packages_finder_spec.rb b/spec/finders/packages/packages_finder_spec.rb index 925b003bb8e..77a171db144 100644 --- a/spec/finders/packages/packages_finder_spec.rb +++ b/spec/finders/packages/packages_finder_spec.rb @@ -81,10 +81,6 @@ RSpec.describe ::Packages::PackagesFinder do it { is_expected.to match_array([conan_package, maven_package]) } end - context 'does not include packages without version number' do - let_it_be(:package_without_version) { create(:maven_package, project: project, version: nil) } - - it { is_expected.not_to include(package_without_version) } - end + it_behaves_like 'concerning versionless param' end end |