diff options
Diffstat (limited to 'spec/models/packages')
-rw-r--r-- | spec/models/packages/npm/metadatum_spec.rb | 50 | ||||
-rw-r--r-- | spec/models/packages/package_file_spec.rb | 23 | ||||
-rw-r--r-- | spec/models/packages/package_spec.rb | 24 |
3 files changed, 95 insertions, 2 deletions
diff --git a/spec/models/packages/npm/metadatum_spec.rb b/spec/models/packages/npm/metadatum_spec.rb new file mode 100644 index 00000000000..ff8cce5310e --- /dev/null +++ b/spec/models/packages/npm/metadatum_spec.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Packages::Npm::Metadatum, type: :model do + describe 'relationships' do + it { is_expected.to belong_to(:package).inverse_of(:npm_metadatum) } + end + + describe 'validations' do + describe 'package', :aggregate_failures do + it { is_expected.to validate_presence_of(:package) } + + it 'ensure npm package type' do + metadatum = build(:npm_metadatum) + + metadatum.package = build(:nuget_package) + + expect(metadatum).not_to be_valid + expect(metadatum.errors).to contain_exactly('Package type must be NPM') + end + end + + describe 'package_json', :aggregate_failures do + let(:valid_json) { { 'name' => 'foo', 'version' => 'v1.0', 'dist' => { 'tarball' => 'x', 'shasum' => 'x' } } } + + it { is_expected.to allow_value(valid_json).for(:package_json) } + it { is_expected.to allow_value(valid_json.merge('extra-field': { 'foo': 'bar' })).for(:package_json) } + it { is_expected.to allow_value(with_dist { |dist| dist.merge('extra-field': 'x') }).for(:package_json) } + + %w[name version dist].each do |field| + it { is_expected.not_to allow_value(valid_json.except(field)).for(:package_json) } + end + + %w[tarball shasum].each do |field| + it { is_expected.not_to allow_value(with_dist { |dist| dist.except(field) }).for(:package_json) } + end + + it { is_expected.not_to allow_value({}).for(:package_json) } + + it { is_expected.not_to allow_value(test: 'test' * 10000).for(:package_json) } + + def with_dist + valid_json.tap do |h| + h['dist'] = yield(h['dist']) + end + end + end + end +end diff --git a/spec/models/packages/package_file_spec.rb b/spec/models/packages/package_file_spec.rb index 450656e3e9c..8617793f41d 100644 --- a/spec/models/packages/package_file_spec.rb +++ b/spec/models/packages/package_file_spec.rb @@ -14,7 +14,6 @@ RSpec.describe Packages::PackageFile, type: :model do it { is_expected.to belong_to(:package) } it { is_expected.to have_one(:conan_file_metadatum) } it { is_expected.to have_many(:package_file_build_infos).inverse_of(:package_file) } - it { is_expected.to have_many(:pipelines).through(:package_file_build_infos) } it { is_expected.to have_one(:debian_file_metadatum).inverse_of(:package_file).class_name('Packages::Debian::FileMetadatum') } it { is_expected.to have_one(:helm_file_metadatum).inverse_of(:package_file).class_name('Packages::Helm::FileMetadatum') } end @@ -206,6 +205,28 @@ RSpec.describe Packages::PackageFile, type: :model do end end + describe '#pipelines' do + let_it_be_with_refind(:package_file) { create(:package_file) } + + subject { package_file.pipelines } + + context 'package_file without pipeline' do + it { is_expected.to be_empty } + end + + context 'package_file with pipeline' do + let_it_be(:pipeline) { create(:ci_pipeline) } + let_it_be(:pipeline2) { create(:ci_pipeline) } + + before do + package_file.package_file_build_infos.create!(pipeline: pipeline) + package_file.package_file_build_infos.create!(pipeline: pipeline2) + end + + it { is_expected.to contain_exactly(pipeline, pipeline2) } + end + end + describe '#update_file_store callback' do let_it_be(:package_file) { build(:package_file, :nuget, size: nil) } diff --git a/spec/models/packages/package_spec.rb b/spec/models/packages/package_spec.rb index 2573c01d686..6ee5219819c 100644 --- a/spec/models/packages/package_spec.rb +++ b/spec/models/packages/package_spec.rb @@ -14,13 +14,13 @@ RSpec.describe Packages::Package, type: :model do it { is_expected.to have_many(:dependency_links).inverse_of(:package) } it { is_expected.to have_many(:tags).inverse_of(:package) } it { is_expected.to have_many(:build_infos).inverse_of(:package) } - it { is_expected.to have_many(:pipelines).through(:build_infos) } it { is_expected.to have_one(:conan_metadatum).inverse_of(:package) } it { is_expected.to have_one(:maven_metadatum).inverse_of(:package) } it { is_expected.to have_one(:debian_publication).inverse_of(:package).class_name('Packages::Debian::Publication') } it { is_expected.to have_one(:debian_distribution).through(:debian_publication).source(:distribution).inverse_of(:packages).class_name('Packages::Debian::ProjectDistribution') } it { is_expected.to have_one(:nuget_metadatum).inverse_of(:package) } it { is_expected.to have_one(:rubygems_metadatum).inverse_of(:package) } + it { is_expected.to have_one(:npm_metadatum).inverse_of(:package) } end describe '.with_debian_codename' do @@ -999,6 +999,28 @@ RSpec.describe Packages::Package, type: :model do end end + describe '#pipelines' do + let_it_be_with_refind(:package) { create(:maven_package) } + + subject { package.pipelines } + + context 'package without pipeline' do + it { is_expected.to be_empty } + end + + context 'package with pipeline' do + let_it_be(:pipeline) { create(:ci_pipeline) } + let_it_be(:pipeline2) { create(:ci_pipeline) } + + before do + package.build_infos.create!(pipeline: pipeline) + package.build_infos.create!(pipeline: pipeline2) + end + + it { is_expected.to contain_exactly(pipeline, pipeline2) } + end + end + describe '#tag_names' do let_it_be(:package) { create(:nuget_package) } |