diff options
Diffstat (limited to 'spec/lib/api/helpers')
-rw-r--r-- | spec/lib/api/helpers/packages/dependency_proxy_helpers_spec.rb | 62 | ||||
-rw-r--r-- | spec/lib/api/helpers/runner_helpers_spec.rb | 71 | ||||
-rw-r--r-- | spec/lib/api/helpers/runner_spec.rb | 69 |
3 files changed, 45 insertions, 157 deletions
diff --git a/spec/lib/api/helpers/packages/dependency_proxy_helpers_spec.rb b/spec/lib/api/helpers/packages/dependency_proxy_helpers_spec.rb index 99b52236771..ae0c0f53acd 100644 --- a/spec/lib/api/helpers/packages/dependency_proxy_helpers_spec.rb +++ b/spec/lib/api/helpers/packages/dependency_proxy_helpers_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' RSpec.describe API::Helpers::Packages::DependencyProxyHelpers do let_it_be(:helper) { Class.new.include(described_class).new } - describe 'redirect_registry_request' do + describe '#redirect_registry_request' do using RSpec::Parameterized::TableSyntax let(:options) { {} } @@ -13,7 +13,7 @@ RSpec.describe API::Helpers::Packages::DependencyProxyHelpers do subject { helper.redirect_registry_request(forward_to_registry, package_type, options) { helper.fallback } } before do - allow(helper).to receive(:options).and_return(for: API::NpmInstancePackages) + allow(helper).to receive(:options).and_return(for: described_class) end shared_examples 'executing fallback' do @@ -34,38 +34,66 @@ RSpec.describe API::Helpers::Packages::DependencyProxyHelpers do subject - expect_snowplow_event(category: 'API::NpmInstancePackages', action: 'npm_request_forward') + expect_snowplow_event(category: described_class.to_s, action: "#{package_type}_request_forward") end end - context 'with npm packages' do - let(:package_type) { :npm } + %i[npm pypi].each do |forwardable_package_type| + context "with #{forwardable_package_type} packages" do + include_context 'dependency proxy helpers context' - where(:application_setting, :forward_to_registry, :example_name) do - true | true | 'executing redirect' - true | false | 'executing fallback' - false | true | 'executing fallback' - false | false | 'executing fallback' - end + let(:package_type) { forwardable_package_type } - with_them do - before do - stub_application_setting(npm_package_requests_forwarding: application_setting) + where(:application_setting, :forward_to_registry, :example_name) do + true | true | 'executing redirect' + true | false | 'executing fallback' + false | true | 'executing fallback' + false | false | 'executing fallback' end - it_behaves_like params[:example_name] + with_them do + before do + allow_fetch_application_setting(attribute: "#{forwardable_package_type}_package_requests_forwarding", return_value: application_setting) + end + + it_behaves_like params[:example_name] + end end end - context 'with non-forwardable packages' do + context 'with non-forwardable package type' do let(:forward_to_registry) { true } before do stub_application_setting(npm_package_requests_forwarding: true) + stub_application_setting(pypi_package_requests_forwarding: true) end - Packages::Package.package_types.keys.without('npm').each do |pkg_type| + Packages::Package.package_types.keys.without('npm', 'pypi').each do |pkg_type| context "#{pkg_type}" do + let(:package_type) { pkg_type.to_sym } + + it 'raises an error' do + expect { subject }.to raise_error(ArgumentError, "Can't find application setting for package_type #{package_type}") + end + end + end + end + + describe '#registry_url' do + subject { helper.registry_url(package_type, package_name: 'test') } + + where(:package_type, :expected_result) do + :npm | 'https://registry.npmjs.org/test' + :pypi | 'https://pypi.org/simple/test/' + end + + with_them do + it { is_expected.to eq(expected_result) } + end + + Packages::Package.package_types.keys.without('npm', 'pypi').each do |pkg_type| + context "with non-forwardable package type #{pkg_type}" do let(:package_type) { pkg_type } it 'raises an error' do diff --git a/spec/lib/api/helpers/runner_helpers_spec.rb b/spec/lib/api/helpers/runner_helpers_spec.rb deleted file mode 100644 index 65b35845aab..00000000000 --- a/spec/lib/api/helpers/runner_helpers_spec.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe API::Helpers::Runner do - let(:ip_address) { '1.2.3.4' } - let(:runner_class) do - Class.new do - include API::Helpers - include API::Helpers::Runner - - attr_accessor :params - - def initialize(params) - @params = params - end - - def ip_address - '1.2.3.4' - end - end - end - - let(:runner_helper) { runner_class.new(runner_params) } - - describe '#get_runner_details_from_request' do - context 'when no runner info is present' do - let(:runner_params) { {} } - - it 'returns the runner IP' do - expect(runner_helper.get_runner_details_from_request).to eq({ ip_address: ip_address }) - end - end - - context 'when runner info is present' do - let(:name) { 'runner' } - let(:version) { '1.2.3' } - let(:revision) { '10.0' } - let(:platform) { 'test' } - let(:architecture) { 'arm' } - let(:config) { { 'gpus' => 'all' } } - let(:runner_params) do - { - 'info' => - { - 'name' => name, - 'version' => version, - 'revision' => revision, - 'platform' => platform, - 'architecture' => architecture, - 'config' => config, - 'ignored' => 1 - } - } - end - - subject(:details) { runner_helper.get_runner_details_from_request } - - it 'extracts the runner details', :aggregate_failures do - expect(details.keys).to match_array(%w(name version revision platform architecture config ip_address)) - expect(details['name']).to eq(name) - expect(details['version']).to eq(version) - expect(details['revision']).to eq(revision) - expect(details['platform']).to eq(platform) - expect(details['architecture']).to eq(architecture) - expect(details['config']).to eq(config) - expect(details['ip_address']).to eq(ip_address) - end - end - end -end diff --git a/spec/lib/api/helpers/runner_spec.rb b/spec/lib/api/helpers/runner_spec.rb deleted file mode 100644 index e55c20b7ab6..00000000000 --- a/spec/lib/api/helpers/runner_spec.rb +++ /dev/null @@ -1,69 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe API::Helpers::Runner do - let(:helper) { Class.new { include API::Helpers::Runner }.new } - - before do - allow(helper).to receive(:env).and_return({}) - end - - describe '#current_job' do - let(:build) { create(:ci_build, :running) } - - it 'handles sticking of a build when a build ID is specified' do - allow(helper).to receive(:params).and_return(id: build.id) - - expect(Gitlab::Database::LoadBalancing::RackMiddleware) - .to receive(:stick_or_unstick) - .with({}, :build, build.id) - - helper.current_job - end - - it 'does not handle sticking if no build ID was specified' do - allow(helper).to receive(:params).and_return({}) - - expect(Gitlab::Database::LoadBalancing::RackMiddleware) - .not_to receive(:stick_or_unstick) - - helper.current_job - end - - it 'returns the build if one could be found' do - allow(helper).to receive(:params).and_return(id: build.id) - - expect(helper.current_job).to eq(build) - end - end - - describe '#current_runner' do - let(:runner) { create(:ci_runner, token: 'foo') } - - it 'handles sticking of a runner if a token is specified' do - allow(helper).to receive(:params).and_return(token: runner.token) - - expect(Gitlab::Database::LoadBalancing::RackMiddleware) - .to receive(:stick_or_unstick) - .with({}, :runner, runner.token) - - helper.current_runner - end - - it 'does not handle sticking if no token was specified' do - allow(helper).to receive(:params).and_return({}) - - expect(Gitlab::Database::LoadBalancing::RackMiddleware) - .not_to receive(:stick_or_unstick) - - helper.current_runner - end - - it 'returns the runner if one could be found' do - allow(helper).to receive(:params).and_return(token: runner.token) - - expect(helper.current_runner).to eq(runner) - end - end -end |