diff options
Diffstat (limited to 'spec/services/packages/maven/find_or_create_package_service_spec.rb')
-rw-r--r-- | spec/services/packages/maven/find_or_create_package_service_spec.rb | 85 |
1 files changed, 64 insertions, 21 deletions
diff --git a/spec/services/packages/maven/find_or_create_package_service_spec.rb b/spec/services/packages/maven/find_or_create_package_service_spec.rb index c9441324216..4406e4037e2 100644 --- a/spec/services/packages/maven/find_or_create_package_service_spec.rb +++ b/spec/services/packages/maven/find_or_create_package_service_spec.rb @@ -4,34 +4,77 @@ require 'spec_helper' RSpec.describe Packages::Maven::FindOrCreatePackageService do let_it_be(:project) { create(:project) } let_it_be(:user) { create(:user) } - let_it_be(:app_name) { 'my-app' } - let_it_be(:version) { '1.0-SNAPSHOT' } - let_it_be(:path) { "my/company/app/#{app_name}" } - let_it_be(:path_with_version) { "#{path}/#{version}" } - let_it_be(:params) do - { - path: path_with_version, - name: path, - version: version - } - end + + let(:app_name) { 'my-app' } + let(:path) { "sandbox/test/app/#{app_name}" } + let(:version) { '1.0.0' } + let(:file_name) { 'test.jar' } + let(:param_path) { "#{path}/#{version}" } describe '#execute' do - subject { described_class.new(project, user, params).execute } + using RSpec::Parameterized::TableSyntax + + subject { described_class.new(project, user, { path: param_path, file_name: file_name }).execute } + + RSpec.shared_examples 'reuse existing package' do + it { expect { subject}.not_to change { Packages::Package.count } } + + it { is_expected.to eq(existing_package) } + end + + RSpec.shared_examples 'create package' do + it { expect { subject}.to change { Packages::Package.count }.by(1) } + + it 'sets the proper name and version' do + pkg = subject + + expect(pkg.name).to eq(path) + expect(pkg.version).to eq(version) + end + end - context 'without any existing package' do - it 'creates a package' do - expect { subject }.to change { Packages::Package.count }.by(1) + context 'path with version' do + # Note that "path with version" and "file type maven metadata xml" only exists for snapshot versions + # In other words, we will never have an metadata xml upload on a path with version for a non snapshot version + where(:package_exist, :file_type, :snapshot_version, :shared_example_name) do + true | :jar | false | 'reuse existing package' + false | :jar | false | 'create package' + true | :jar | true | 'reuse existing package' + false | :jar | true | 'create package' + true | :maven_xml | true | 'reuse existing package' + false | :maven_xml | true | 'create package' + end + + with_them do + let(:version) { snapshot_version ? '1.0-SNAPSHOT' : '1.0.0' } + let(:file_name) { file_type == :maven_xml ? 'maven-metadata.xml' : 'test.jar' } + + let!(:existing_package) do + if package_exist + create(:maven_package, name: path, version: version, project: project) + end + end + + it_behaves_like params[:shared_example_name] end end - context 'with an existing package' do - let_it_be(:existing_package) { create(:maven_package, name: path, version: version, project: project) } + context 'path without version' do + let(:param_path) { path } + let(:version) { nil } + + context 'maven-metadata.xml file' do + let(:file_name) { 'maven-metadata.xml' } + + context 'with existing package' do + let!(:existing_package) { create(:maven_package, name: path, version: version, project: project) } + + it_behaves_like 'reuse existing package' + end - it { is_expected.to eq existing_package } - it "doesn't create a new package" do - expect { subject } - .to not_change { Packages::Package.count } + context 'without existing package' do + it_behaves_like 'create package' + end end end end |