2020-07-28 23:09:34 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
RSpec.describe Packages::Maven::FindOrCreatePackageService do
|
|
|
|
let_it_be(:project) { create(:project) }
|
|
|
|
let_it_be(:user) { create(:user) }
|
2020-10-24 23:57:45 +05:30
|
|
|
|
|
|
|
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}" }
|
2020-07-28 23:09:34 +05:30
|
|
|
|
|
|
|
describe '#execute' do
|
2020-10-24 23:57:45 +05:30
|
|
|
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
|
2020-07-28 23:09:34 +05:30
|
|
|
|
2020-10-24 23:57:45 +05:30
|
|
|
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]
|
2020-07-28 23:09:34 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-10-24 23:57:45 +05:30
|
|
|
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
|
2020-07-28 23:09:34 +05:30
|
|
|
|
2020-10-24 23:57:45 +05:30
|
|
|
context 'without existing package' do
|
|
|
|
it_behaves_like 'create package'
|
|
|
|
end
|
2020-07-28 23:09:34 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|