diff options
Diffstat (limited to 'spec/lib/api/helpers')
-rw-r--r-- | spec/lib/api/helpers/packages_manager_clients_helpers_spec.rb | 127 |
1 files changed, 44 insertions, 83 deletions
diff --git a/spec/lib/api/helpers/packages_manager_clients_helpers_spec.rb b/spec/lib/api/helpers/packages_manager_clients_helpers_spec.rb index 73b67f9e61c..3c40859da21 100644 --- a/spec/lib/api/helpers/packages_manager_clients_helpers_spec.rb +++ b/spec/lib/api/helpers/packages_manager_clients_helpers_spec.rb @@ -3,126 +3,87 @@ require 'spec_helper' RSpec.describe API::Helpers::PackagesManagerClientsHelpers do + include HttpBasicAuthHelpers + let_it_be(:personal_access_token) { create(:personal_access_token) } let_it_be(:username) { personal_access_token.user.username } let_it_be(:helper) { Class.new.include(described_class).new } let(:password) { personal_access_token.token } - describe '#find_job_from_http_basic_auth' do - let_it_be(:user) { personal_access_token.user } - - let(:job) { create(:ci_build, user: user, status: :running) } - let(:password) { job.token } - let(:headers) { { Authorization: basic_http_auth(username, password) } } - - subject { helper.find_job_from_http_basic_auth } - - before do - allow(helper).to receive(:headers).and_return(headers&.with_indifferent_access) - end - - context 'with a valid Authorization header' do - it { is_expected.to eq job } + let(:env) do + { + 'rack.input' => '' + } + end - context 'when the job is not running' do - before do - job.update!(status: :failed) - end + let(:request) { ActionDispatch::Request.new(env) } - it { is_expected.to be nil } - end - end + before do + allow(helper).to receive(:request).and_return(request) + end + shared_examples 'invalid auth header' do context 'with an invalid Authorization header' do - where(:headers) do - [ - [{ Authorization: 'Invalid' }], - [{}], - [nil] - ] + before do + env.merge!(build_auth_headers('Invalid')) end - with_them do - it { is_expected.to be nil } - end - end - - context 'with an unknown Authorization header' do - let(:password) { 'Unknown' } - it { is_expected.to be nil } end end - describe '#find_deploy_token_from_http_basic_auth' do - let_it_be(:deploy_token) { create(:deploy_token) } - let(:token) { deploy_token.token } - let(:headers) { { Authorization: basic_http_auth(deploy_token.username, token) } } - - subject { helper.find_deploy_token_from_http_basic_auth } - - before do - allow(helper).to receive(:headers).and_return(headers&.with_indifferent_access) - end - + shared_examples 'valid auth header' do context 'with a valid Authorization header' do - it { is_expected.to eq deploy_token } - end - - context 'with an invalid Authorization header' do - where(:headers) do - [ - [{ Authorization: 'Invalid' }], - [{}], - [nil] - ] + before do + env.merge!(basic_auth_header(username, password)) end - with_them do + context 'with an unknown password' do + let(:password) { 'Unknown' } + it { is_expected.to be nil } end - end - - context 'with an invalid token' do - let(:token) { 'Unknown' } - it { is_expected.to be nil } + it { is_expected.to eq expected_result } end end - describe '#uploaded_package_file' do - let_it_be(:params) { {} } + describe '#find_job_from_http_basic_auth' do + let_it_be(:user) { personal_access_token.user } + let(:job) { create(:ci_build, user: user, status: :running) } + let(:password) { job.token } - subject { helper.uploaded_package_file } + subject { helper.find_job_from_http_basic_auth } - before do - allow(helper).to receive(:params).and_return(params) + it_behaves_like 'valid auth header' do + let(:expected_result) { job } end - context 'with valid uploaded package file' do - let_it_be(:uploaded_file) { Object.new } + it_behaves_like 'invalid auth header' + context 'when the job is not running' do before do - allow(UploadedFile).to receive(:from_params).and_return(uploaded_file) + job.update!(status: :failed) end - it { is_expected.to be uploaded_file } + it_behaves_like 'valid auth header' do + let(:expected_result) { nil } + end end + end - context 'with invalid uploaded package file' do - before do - allow(UploadedFile).to receive(:from_params).and_return(nil) - end + describe '#find_deploy_token_from_http_basic_auth' do + let_it_be(:deploy_token) { create(:deploy_token) } + let(:token) { deploy_token.token } + let(:username) { deploy_token.username } + let(:password) { token } - it 'fails with bad_request!' do - expect(helper).to receive(:bad_request!) + subject { helper.find_deploy_token_from_http_basic_auth } - expect(subject).to be nil - end + it_behaves_like 'valid auth header' do + let(:expected_result) { deploy_token } end - end - def basic_http_auth(username, password) - ActionController::HttpAuthentication::Basic.encode_credentials(username, password) + it_behaves_like 'invalid auth header' end end |