diff --git a/spec/services/packages/npm/create_package_service_spec.rb b/spec/services/packages/npm/create_package_service_spec.rb index 8c4a86b500b57a7197b7234b97dadfa035e704c7..a461e2b0d39aef07808f2389d010e9002a8db7b6 100644 --- a/spec/services/packages/npm/create_package_service_spec.rb +++ b/spec/services/packages/npm/create_package_service_spec.rb @@ -25,10 +25,6 @@ let(:version_data) { params.dig('versions', version) } let(:lease_key) { "packages:npm:create_package_service:packages:#{project.id}_#{package_name}_#{version}" } - shared_examples 'valid service response' do - it { is_expected.to be_success } - end - shared_examples 'valid package' do let(:package) { subject[:package] } @@ -173,28 +169,28 @@ end context 'scoped package' do - it_behaves_like 'valid service response' + it_behaves_like 'returning a success service response' it_behaves_like 'valid package' end context 'when user is no project member' do let_it_be(:user) { create(:user) } - it_behaves_like 'valid service response' + it_behaves_like 'returning a success service response' it_behaves_like 'valid package' end context 'scoped package not following the naming convention' do let(:package_name) { '@any-scope/package' } - it_behaves_like 'valid service response' + it_behaves_like 'returning a success service response' it_behaves_like 'valid package' end context 'unscoped package' do let(:package_name) { 'unscoped-package' } - it_behaves_like 'valid service response' + it_behaves_like 'returning a success service response' it_behaves_like 'valid package' end @@ -202,8 +198,9 @@ let(:package_name) { "@#{namespace.path}/my_package" } let!(:existing_package) { create(:npm_package, project: project, name: package_name, version: '1.0.1') } - it { is_expected.to be_error } - it { is_expected.to have_attributes message: 'Package already exists.', reason: :package_already_exists } + it_behaves_like 'returning an error service response', message: 'Package already exists.' do + it { is_expected.to have_attributes reason: :package_already_exists } + end context 'marked as pending_destruction' do before do @@ -224,8 +221,9 @@ let(:max_file_size) { 5.bytes } shared_examples_for 'max file size validation failure' do - it { is_expected.to be_error } - it { is_expected.to have_attributes message: 'File is too large.', reason: :invalid_parameter } + it_behaves_like 'returning an error service response', message: 'File is too large.' do + it { is_expected.to have_attributes reason: :invalid_parameter } + end end before do @@ -285,8 +283,9 @@ context 'with empty versions' do let(:params) { super().merge!({ versions: {} }) } - it { is_expected.to be_error } - it { is_expected.to have_attributes message: 'Version is empty.', reason: :invalid_parameter } + it_behaves_like 'returning an error service response', message: 'Version is empty.' do + it { is_expected.to have_attributes reason: :invalid_parameter } + end end context 'with invalid versions' do @@ -308,8 +307,9 @@ context 'with empty attachment data' do let(:params) { super().merge({ _attachments: { "#{package_name}-#{version}.tgz" => { data: '' } } }) } - it { is_expected.to be_error } - it { is_expected.to have_attributes message: 'Attachment data is empty.', reason: :invalid_parameter } + it_behaves_like 'returning an error service response', message: 'Attachment data is empty.' do + it { is_expected.to have_attributes reason: :invalid_parameter } + end end it 'obtains a lease to create a new package' do @@ -323,8 +323,9 @@ stub_exclusive_lease_taken(lease_key, timeout: described_class::DEFAULT_LEASE_TIMEOUT) end - it { is_expected.to be_error } - it { is_expected.to have_attributes message: 'Could not obtain package lease. Please try again.', reason: :package_lease_taken } + it_behaves_like 'returning an error service response', message: 'Could not obtain package lease. Please try again.' do + it { is_expected.to have_attributes reason: :package_lease_taken } + end end context 'when feature flag :packages_protected_packages disabled' do @@ -369,8 +370,9 @@ let(:service) { described_class.new(project, current_user, params) } shared_examples 'protected package' do - it { is_expected.to be_error } - it { is_expected.to have_attributes message: 'Package protected.', reason: :package_protected } + it_behaves_like 'returning an error service response', message: 'Package protected.' do + it { is_expected.to have_attributes reason: :package_protected } + end it 'does not create any npm-related package records' do expect { subject }