diff options
Diffstat (limited to 'spec/services/packages/npm/create_package_service_spec.rb')
-rw-r--r-- | spec/services/packages/npm/create_package_service_spec.rb | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/spec/services/packages/npm/create_package_service_spec.rb b/spec/services/packages/npm/create_package_service_spec.rb index ba5729eaf59..b1beb2adb3b 100644 --- a/spec/services/packages/npm/create_package_service_spec.rb +++ b/spec/services/packages/npm/create_package_service_spec.rb @@ -16,6 +16,7 @@ RSpec.describe Packages::Npm::CreatePackageService do let(:override) { {} } let(:package_name) { "@#{namespace.path}/my-app" } + let(:version_data) { params.dig('versions', '1.0.1') } subject { described_class.new(project, user, params).execute } @@ -25,6 +26,7 @@ RSpec.describe Packages::Npm::CreatePackageService do .to change { Packages::Package.count }.by(1) .and change { Packages::Package.npm.count }.by(1) .and change { Packages::Tag.count }.by(1) + .and change { Packages::Npm::Metadatum.count }.by(1) end it_behaves_like 'assigns the package creator' do @@ -40,6 +42,8 @@ RSpec.describe Packages::Npm::CreatePackageService do expect(package.version).to eq(version) end + it { expect(subject.npm_metadatum.package_json).to eq(version_data) } + it { expect(subject.name).to eq(package_name) } it { expect(subject.version).to eq(version) } @@ -54,6 +58,48 @@ RSpec.describe Packages::Npm::CreatePackageService do expect { subject }.to change { Packages::PackageFileBuildInfo.count }.by(1) end end + + context 'with a too large metadata structure' do + before do + params[:versions][version][:test] = 'test' * 10000 + end + + it 'does not create the package' do + expect { subject }.to raise_error(ActiveRecord::RecordInvalid, 'Validation failed: Package json structure is too large') + .and not_change { Packages::Package.count } + .and not_change { Packages::Package.npm.count } + .and not_change { Packages::Tag.count } + .and not_change { Packages::Npm::Metadatum.count } + end + end + + described_class::PACKAGE_JSON_NOT_ALLOWED_FIELDS.each do |field| + context "with not allowed #{field} field" do + before do + params[:versions][version][field] = 'test' + end + + it 'is persisted without the field' do + expect { subject } + .to change { Packages::Package.count }.by(1) + .and change { Packages::Package.npm.count }.by(1) + .and change { Packages::Tag.count }.by(1) + .and change { Packages::Npm::Metadatum.count }.by(1) + expect(subject.npm_metadatum.package_json[field]).to be_blank + end + end + end + + context 'with packages_npm_abbreviated_metadata disabled' do + before do + stub_feature_flags(packages_npm_abbreviated_metadata: false) + end + + it 'creates a package without metadatum' do + expect { subject } + .not_to change { Packages::Npm::Metadatum.count } + end + end end describe '#execute' do |