mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-06 10:19:48 +00:00
101 lines
2.9 KiB
Ruby
101 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe ::Gitlab::BeyondIdentity::Client, feature_category: :source_code_management do
|
|
let_it_be_with_reload(:integration) { create(:beyond_identity_integration) }
|
|
|
|
let(:stubbed_response) do
|
|
{ 'authorized' => true }.to_json
|
|
end
|
|
|
|
let(:params) { { key_id: 'key-id', committer_email: 'email@example.com' } }
|
|
let(:status) { 200 }
|
|
|
|
let!(:request) do
|
|
stub_request(:get, ::Gitlab::BeyondIdentity::Client::API_URL).with(
|
|
query: params,
|
|
headers: { 'Content-Type' => 'application/json', Authorization: "Bearer #{integration.token}" }
|
|
).to_return(
|
|
status: status,
|
|
body: stubbed_response
|
|
)
|
|
end
|
|
|
|
subject(:client) { described_class.new(integration) }
|
|
|
|
context 'when integration is not activated' do
|
|
it 'raises a config error' do
|
|
integration.active = false
|
|
|
|
expect do
|
|
client.execute(params)
|
|
end.to raise_error(::Gitlab::BeyondIdentity::Client::Error).with_message(
|
|
'integration is not activated'
|
|
)
|
|
|
|
expect(request).not_to have_been_requested
|
|
end
|
|
end
|
|
|
|
it 'executes successfully' do
|
|
expect(client.execute(params)).to eq({ 'authorized' => true })
|
|
expect(request).to have_been_requested
|
|
end
|
|
|
|
context 'with invalid response' do
|
|
let(:stubbed_response) { 'invalid' }
|
|
|
|
it 'executes successfully' do
|
|
expect { client.execute(params) }.to raise_error(
|
|
::Gitlab::BeyondIdentity::Client::ApiError
|
|
).with_message('invalid response format')
|
|
end
|
|
end
|
|
|
|
context 'with an error response' do
|
|
let(:stubbed_response) do
|
|
{ 'error' => { 'message' => 'gpg_key is invalid' } }.to_json
|
|
end
|
|
|
|
let(:status) { 400 }
|
|
|
|
it 'returns an error' do
|
|
expect { client.execute(params) }.to raise_error do |error|
|
|
expect(error).to be_a(::Gitlab::BeyondIdentity::Client::ApiError)
|
|
expect(error.message).to eq('gpg_key is invalid')
|
|
expect(error.code).to eq(status)
|
|
expect(error).not_to be_acceptable_error
|
|
end
|
|
end
|
|
|
|
context 'when the error is acceptable' do
|
|
let(:status) { 404 }
|
|
|
|
it 'returns an error' do
|
|
expect { client.execute(params) }.to raise_error do |error|
|
|
expect(error).to be_a(::Gitlab::BeyondIdentity::Client::ApiError)
|
|
expect(error.message).to eq('gpg_key is invalid')
|
|
expect(error.code).to eq(status)
|
|
expect(error).to be_acceptable_error
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when key is unauthorized' do
|
|
let(:stubbed_response) do
|
|
{ 'authorized' => false, 'message' => 'key is unauthorized' }.to_json
|
|
end
|
|
|
|
it 'returns an error' do
|
|
expect { client.execute(params) }.to raise_error do |error|
|
|
expect(error).to be_a(::Gitlab::BeyondIdentity::Client::ApiError)
|
|
expect(error.message).to eq('key is unauthorized')
|
|
expect(error.code).to eq(status)
|
|
expect(error).not_to be_acceptable_error
|
|
end
|
|
end
|
|
end
|
|
end
|