diff options
Diffstat (limited to 'spec/models/integrations/packagist_spec.rb')
-rw-r--r-- | spec/models/integrations/packagist_spec.rb | 84 |
1 files changed, 55 insertions, 29 deletions
diff --git a/spec/models/integrations/packagist_spec.rb b/spec/models/integrations/packagist_spec.rb index e078debd126..e00de0f7418 100644 --- a/spec/models/integrations/packagist_spec.rb +++ b/spec/models/integrations/packagist_spec.rb @@ -3,50 +3,76 @@ require 'spec_helper' RSpec.describe Integrations::Packagist do - let(:packagist_params) do - { - active: true, - project: project, - properties: { - username: packagist_username, - token: packagist_token, - server: packagist_server - } - } - end - - let(:packagist_hook_url) do - "#{packagist_server}/api/update-package?username=#{packagist_username}&apiToken=#{packagist_token}" - end - - let(:packagist_token) { 'verySecret' } - let(:packagist_username) { 'theUser' } - let(:packagist_server) { 'https://packagist.example.com' } - let(:project) { create(:project) } - it_behaves_like Integrations::HasWebHook do - let(:integration) { described_class.new(packagist_params) } - let(:hook_url) { "#{packagist_server}/api/update-package?username={username}&apiToken={token}" } + let_it_be(:project) { create(:project) } + + let(:integration) { build(:packagist_integration, project: project) } + let(:hook_url) { "#{integration.server}/api/update-package?username={username}&apiToken={token}" } end it_behaves_like Integrations::ResetSecretFields do - let(:integration) { described_class.new(packagist_params) } + let(:integration) { build(:packagist_integration) } end describe '#execute' do - let(:user) { create(:user) } - let(:project) { create(:project, :repository) } - let(:push_sample_data) { Gitlab::DataBuilder::Push.build_sample(project, user) } - let(:packagist_integration) { described_class.create!(packagist_params) } + let(:project) { build(:project) } + let(:integration) { build(:packagist_integration, project: project) } + + let(:packagist_hook_url) do + "#{integration.server}/api/update-package?username=#{integration.username}&apiToken=#{integration.token}" + end before do stub_request(:post, packagist_hook_url) end it 'calls Packagist API' do - packagist_integration.execute(push_sample_data) + user = create(:user) + push_sample_data = Gitlab::DataBuilder::Push.build_sample(project, user) + integration.execute(push_sample_data) expect(a_request(:post, packagist_hook_url)).to have_been_made.once end end + + describe '#test' do + let(:integration) { build(:packagist_integration) } + let(:test_data) { { foo: 'bar' } } + + subject(:result) { integration.test(test_data) } + + context 'when test request executes without errors' do + before do + allow(integration).to receive(:execute).with(test_data).and_return( + ServiceResponse.success(message: 'success message', payload: { http_status: http_status }) + ) + end + + context 'when response is a 200' do + let(:http_status) { 200 } + + it 'return failure result' do + is_expected.to eq(success: false, result: 'success message') + end + end + + context 'when response is a 202' do + let(:http_status) { 202 } + + it 'return success result' do + is_expected.to eq(success: true, result: 'success message') + end + end + end + + context 'when test request executes with errors' do + before do + allow(integration).to receive(:execute).with(test_data).and_raise(StandardError, 'error message') + end + + it 'return failure result' do + is_expected.to eq(success: false, result: 'error message') + end + end + end end |