diff options
Diffstat (limited to 'spec/lib/api')
-rw-r--r-- | spec/lib/api/entities/merge_request_basic_spec.rb | 11 | ||||
-rw-r--r-- | spec/lib/api/helpers/runner_helpers_spec.rb | 71 | ||||
-rw-r--r-- | spec/lib/api/helpers/runner_spec.rb | 69 | ||||
-rw-r--r-- | spec/lib/api/helpers_spec.rb | 60 |
4 files changed, 211 insertions, 0 deletions
diff --git a/spec/lib/api/entities/merge_request_basic_spec.rb b/spec/lib/api/entities/merge_request_basic_spec.rb index 8572b067984..b9d6ab7a652 100644 --- a/spec/lib/api/entities/merge_request_basic_spec.rb +++ b/spec/lib/api/entities/merge_request_basic_spec.rb @@ -9,11 +9,22 @@ RSpec.describe ::API::Entities::MergeRequestBasic do let_it_be(:labels) { create_list(:label, 3) } let_it_be(:merge_requests) { create_list(:labeled_merge_request, 10, :unique_branches, labels: labels) } + let_it_be(:entity) { described_class.new(merge_request) } + # This mimics the behavior of the `Grape::Entity` serializer def present(obj) described_class.new(obj).presented end + subject { entity.as_json } + + it 'includes basic fields' do + is_expected.to include( + draft: merge_request.draft?, + work_in_progress: merge_request.draft? + ) + end + context "with :with_api_entity_associations scope" do let(:scope) { MergeRequest.with_api_entity_associations } diff --git a/spec/lib/api/helpers/runner_helpers_spec.rb b/spec/lib/api/helpers/runner_helpers_spec.rb new file mode 100644 index 00000000000..65b35845aab --- /dev/null +++ b/spec/lib/api/helpers/runner_helpers_spec.rb @@ -0,0 +1,71 @@ +# 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 new file mode 100644 index 00000000000..e55c20b7ab6 --- /dev/null +++ b/spec/lib/api/helpers/runner_spec.rb @@ -0,0 +1,69 @@ +# 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 diff --git a/spec/lib/api/helpers_spec.rb b/spec/lib/api/helpers_spec.rb index 87cd0d4388c..6e48ee4c315 100644 --- a/spec/lib/api/helpers_spec.rb +++ b/spec/lib/api/helpers_spec.rb @@ -7,6 +7,66 @@ RSpec.describe API::Helpers do subject { Class.new.include(described_class).new } + describe '#current_user' do + include Rack::Test::Methods + + let(:user) { build(:user, id: 42) } + + let(:helper) do + Class.new(Grape::API::Instance) do + helpers API::APIGuard::HelperMethods + helpers API::Helpers + format :json + + get 'user' do + current_user ? { id: current_user.id } : { found: false } + end + + get 'protected' do + authenticate_by_gitlab_geo_node_token! + end + end + end + + def app + helper + end + + before do + allow(Gitlab::Database::LoadBalancing).to receive(:enable?).and_return(true) + end + + it 'handles sticking when a user could be found' do + allow_any_instance_of(API::Helpers).to receive(:initial_current_user).and_return(user) + + expect(Gitlab::Database::LoadBalancing::RackMiddleware) + .to receive(:stick_or_unstick).with(any_args, :user, 42) + + get 'user' + + expect(Gitlab::Json.parse(last_response.body)).to eq({ 'id' => user.id }) + end + + it 'does not handle sticking if no user could be found' do + allow_any_instance_of(API::Helpers).to receive(:initial_current_user).and_return(nil) + + expect(Gitlab::Database::LoadBalancing::RackMiddleware) + .not_to receive(:stick_or_unstick) + + get 'user' + + expect(Gitlab::Json.parse(last_response.body)).to eq({ 'found' => false }) + end + + it 'returns the user if one could be found' do + allow_any_instance_of(API::Helpers).to receive(:initial_current_user).and_return(user) + + get 'user' + + expect(Gitlab::Json.parse(last_response.body)).to eq({ 'id' => user.id }) + end + end + describe '#find_project' do let(:project) { create(:project) } |