diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-04-20 23:50:22 +0000 |
commit | 9dc93a4519d9d5d7be48ff274127136236a3adb3 (patch) | |
tree | 70467ae3692a0e35e5ea56bcb803eb512a10bedb /spec/models/packages | |
parent | 4b0f34b6d759d6299322b3a54453e930c6121ff0 (diff) | |
download | gitlab-ce-9dc93a4519d9d5d7be48ff274127136236a3adb3.tar.gz |
Add latest changes from gitlab-org/gitlab@13-11-stable-eev13.11.0-rc43
Diffstat (limited to 'spec/models/packages')
-rw-r--r-- | spec/models/packages/debian/file_entry_spec.rb | 98 | ||||
-rw-r--r-- | spec/models/packages/dependency_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/packages/go/module_version_spec.rb | 14 | ||||
-rw-r--r-- | spec/models/packages/maven/metadatum_spec.rb | 14 | ||||
-rw-r--r-- | spec/models/packages/package_spec.rb | 41 |
5 files changed, 152 insertions, 17 deletions
diff --git a/spec/models/packages/debian/file_entry_spec.rb b/spec/models/packages/debian/file_entry_spec.rb new file mode 100644 index 00000000000..7aa16bc0cce --- /dev/null +++ b/spec/models/packages/debian/file_entry_spec.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::Debian::FileEntry, type: :model do + let_it_be(:package_file) { create(:debian_package_file, :dsc) } + + let(:filename) { 'sample_1.2.3~alpha2.dsc' } + let(:size) { 671 } + let(:md5sum) { '3b0817804f669e16cdefac583ad88f0e' } + let(:section) { 'libs' } + let(:priority) { 'optional' } + let(:sha1sum) { '32ecbd674f0bfd310df68484d87752490685a8d6' } + let(:sha256sum) { '844f79825b7e8aaa191e514b58a81f9ac1e58e2180134b0c9512fa66d896d7ba' } + + let(:file_entry) do + described_class.new( + filename: filename, + size: size, + md5sum: md5sum, + section: section, + priority: priority, + sha1sum: sha1sum, + sha256sum: sha256sum, + package_file: package_file + ) + end + + subject { file_entry } + + describe 'validations' do + it { is_expected.to be_valid } + + describe '#filename' do + it { is_expected.to validate_presence_of(:filename) } + it { is_expected.not_to allow_value('Hé').for(:filename) } + end + + describe '#size' do + it { is_expected.to validate_presence_of(:size) } + end + + describe '#md5sum' do + it { is_expected.to validate_presence_of(:md5sum) } + it { is_expected.not_to allow_value('12345678901234567890123456789012').for(:md5sum).with_message('mismatch for sample_1.2.3~alpha2.dsc: 3b0817804f669e16cdefac583ad88f0e != 12345678901234567890123456789012') } + end + + describe '#section' do + it { is_expected.to validate_presence_of(:section) } + end + + describe '#priority' do + it { is_expected.to validate_presence_of(:priority) } + end + + describe '#sha1sum' do + it { is_expected.to validate_presence_of(:sha1sum) } + it { is_expected.not_to allow_value('1234567890123456789012345678901234567890').for(:sha1sum).with_message('mismatch for sample_1.2.3~alpha2.dsc: 32ecbd674f0bfd310df68484d87752490685a8d6 != 1234567890123456789012345678901234567890') } + end + + describe '#sha256sum' do + it { is_expected.to validate_presence_of(:sha256sum) } + it { is_expected.not_to allow_value('1234567890123456789012345678901234567890123456789012345678901234').for(:sha256sum).with_message('mismatch for sample_1.2.3~alpha2.dsc: 844f79825b7e8aaa191e514b58a81f9ac1e58e2180134b0c9512fa66d896d7ba != 1234567890123456789012345678901234567890123456789012345678901234') } + end + + describe '#package_file' do + it { is_expected.to validate_presence_of(:package_file) } + end + end + + describe '#component' do + subject { file_entry.component } + + context 'without section' do + let(:section) { nil } + + it { is_expected.to eq 'main' } + end + + context 'with empty section' do + let(:section) { '' } + + it { is_expected.to eq 'main' } + end + + context 'with ruby section' do + let(:section) { 'ruby' } + + it { is_expected.to eq 'main' } + end + + context 'with contrib/ruby section' do + let(:section) { 'contrib/ruby' } + + it { is_expected.to eq 'contrib' } + end + end +end diff --git a/spec/models/packages/dependency_spec.rb b/spec/models/packages/dependency_spec.rb index fa6b0fd1848..4437cad46cd 100644 --- a/spec/models/packages/dependency_spec.rb +++ b/spec/models/packages/dependency_spec.rb @@ -54,7 +54,7 @@ RSpec.describe Packages::Dependency, type: :model do context 'with too big parameter' do let(:size) { (Packages::Dependency::MAX_CHUNKED_QUERIES_COUNT * chunk_size) + 1 } - let(:names_and_version_patterns) { Hash[(1..size).map { |v| [v, v] }] } + let(:names_and_version_patterns) { (1..size).to_h { |v| [v, v] } } it { expect { subject }.to raise_error(ArgumentError, 'Too many names_and_version_patterns') } end diff --git a/spec/models/packages/go/module_version_spec.rb b/spec/models/packages/go/module_version_spec.rb index c4c6a07d9e9..7fa416d8537 100644 --- a/spec/models/packages/go/module_version_spec.rb +++ b/spec/models/packages/go/module_version_spec.rb @@ -3,19 +3,9 @@ require 'spec_helper' RSpec.describe Packages::Go::ModuleVersion, type: :model do - let_it_be(:user) { create :user } - let_it_be(:project) { create :project_empty_repo, creator: user, path: 'my-go-lib' } - let_it_be(:mod) { create :go_module, project: project } + include_context 'basic Go module' - before :all do - create :go_module_commit, :files, project: project, tag: 'v1.0.0', files: { 'README.md' => 'Hi' } - create :go_module_commit, :module, project: project, tag: 'v1.0.1' - create :go_module_commit, :package, project: project, tag: 'v1.0.2', path: 'pkg' - create :go_module_commit, :module, project: project, tag: 'v1.0.3', name: 'mod' - create :go_module_commit, :files, project: project, files: { 'y.go' => "package a\n" } - create :go_module_commit, :module, project: project, name: 'v2' - create :go_module_commit, :files, project: project, tag: 'v2.0.0', files: { 'v2/x.go' => "package a\n" } - end + let_it_be(:mod) { create :go_module, project: project } shared_examples '#files' do |desc, *entries| it "returns #{desc}" do diff --git a/spec/models/packages/maven/metadatum_spec.rb b/spec/models/packages/maven/metadatum_spec.rb index 94a0e558985..0000543cb18 100644 --- a/spec/models/packages/maven/metadatum_spec.rb +++ b/spec/models/packages/maven/metadatum_spec.rb @@ -54,7 +54,7 @@ RSpec.describe Packages::Maven::Metadatum, type: :model do let_it_be(:metadatum3) { create(:maven_metadatum, package: package) } let_it_be(:metadatum4) { create(:maven_metadatum, package: package) } - subject { Packages::Maven::Metadatum.for_package_ids(package.id).order_created } + subject { described_class.for_package_ids(package.id).order_created } it { is_expected.to eq([metadatum1, metadatum2, metadatum3, metadatum4]) } end @@ -64,10 +64,20 @@ RSpec.describe Packages::Maven::Metadatum, type: :model do let_it_be(:metadatum2) { create(:maven_metadatum, package: package, app_name: 'two') } let_it_be(:metadatum3) { create(:maven_metadatum, package: package, app_name: 'three') } - subject { Packages::Maven::Metadatum.for_package_ids(package.id).pluck_app_name } + subject { described_class.for_package_ids(package.id).pluck_app_name } it { is_expected.to match_array([metadatum1, metadatum2, metadatum3].map(&:app_name)) } end + + describe '.with_path' do + let_it_be(:metadatum1) { create(:maven_metadatum, package: package, path: 'one') } + let_it_be(:metadatum2) { create(:maven_metadatum, package: package, path: 'two') } + let_it_be(:metadatum3) { create(:maven_metadatum, package: package, path: 'three') } + + subject { described_class.with_path('two') } + + it { is_expected.to match_array([metadatum2]) } + end end end end diff --git a/spec/models/packages/package_spec.rb b/spec/models/packages/package_spec.rb index 82997acee3f..cf52749a186 100644 --- a/spec/models/packages/package_spec.rb +++ b/spec/models/packages/package_spec.rb @@ -99,6 +99,34 @@ RSpec.describe Packages::Package, type: :model do end end + describe '.for_projects' do + let_it_be(:package1) { create(:maven_package) } + let_it_be(:package2) { create(:maven_package) } + let_it_be(:package3) { create(:maven_package) } + + let(:projects) { ::Project.id_in([package1.project_id, package2.project_id]) } + + subject { described_class.for_projects(projects.select(:id)) } + + it 'returns package1 and package2' do + expect(projects).not_to receive(:any?) + + expect(subject).to match_array([package1, package2]) + end + + context 'with maven_packages_group_level_improvements disabled' do + before do + stub_feature_flags(maven_packages_group_level_improvements: false) + end + + it 'returns package1 and package2' do + expect(projects).to receive(:any?).and_call_original + + expect(subject).to match_array([package1, package2]) + end + end + end + describe 'validations' do subject { build(:package) } @@ -339,7 +367,14 @@ RSpec.describe Packages::Package, type: :model do it { is_expected.to validate_presence_of(:version) } it { is_expected.to allow_value('1.2.3').for(:version) } it { is_expected.to allow_value('1.3.350').for(:version) } - it { is_expected.not_to allow_value('1.3.350-20201230123456').for(:version) } + it { is_expected.to allow_value('1.3.350-20201230123456').for(:version) } + it { is_expected.to allow_value('1.2.3-rc1').for(:version) } + it { is_expected.to allow_value('1.2.3g').for(:version) } + it { is_expected.to allow_value('1.2').for(:version) } + it { is_expected.to allow_value('1.2.bananas').for(:version) } + it { is_expected.to allow_value('v1.2.4-build').for(:version) } + it { is_expected.to allow_value('d50d836eb3de6177ce6c7a5482f27f9c2c84b672').for(:version) } + it { is_expected.to allow_value('this_is_a_string_only').for(:version) } it { is_expected.not_to allow_value('..1.2.3').for(:version) } it { is_expected.not_to allow_value(' 1.2.3').for(:version) } it { is_expected.not_to allow_value("1.2.3 \r\t").for(:version) } @@ -621,10 +656,12 @@ RSpec.describe Packages::Package, type: :model do describe '.displayable' do let_it_be(:hidden_package) { create(:maven_package, :hidden) } let_it_be(:processing_package) { create(:maven_package, :processing) } + let_it_be(:error_package) { create(:maven_package, :error) } subject { described_class.displayable } - it 'does not include hidden packages', :aggregate_failures do + it 'does not include non-displayable packages', :aggregate_failures do + is_expected.to include(error_package) is_expected.not_to include(hidden_package) is_expected.not_to include(processing_package) end |