Commit 4fea485e authored by Heinrich Lee Yu's avatar Heinrich Lee Yu Committed by Patrick Derichs

Use `stub_full_request` to fix spec failure

Also change test URL sequest to .test TLD
parent 59995d15
...@@ -7,7 +7,7 @@ FactoryBot.define do ...@@ -7,7 +7,7 @@ FactoryBot.define do
sequence(:email_alias) { |n| "user.alias#{n}@example.org" } sequence(:email_alias) { |n| "user.alias#{n}@example.org" }
sequence(:title) { |n| "My title #{n}" } sequence(:title) { |n| "My title #{n}" }
sequence(:filename) { |n| "filename-#{n}.rb" } sequence(:filename) { |n| "filename-#{n}.rb" }
sequence(:url) { |n| "http://example#{n}.org" } sequence(:url) { |n| "http://example#{n}.test" }
sequence(:label_title) { |n| "label#{n}" } sequence(:label_title) { |n| "label#{n}" }
sequence(:branch) { |n| "my-branch-#{n}" } sequence(:branch) { |n| "my-branch-#{n}" }
sequence(:past_time) { |n| 4.hours.ago + (2 * n).seconds } sequence(:past_time) { |n| 4.hours.ago + (2 * n).seconds }
......
...@@ -4,6 +4,7 @@ require 'spec_helper' ...@@ -4,6 +4,7 @@ require 'spec_helper'
describe Ci::Pipeline, :mailer do describe Ci::Pipeline, :mailer do
include ProjectForksHelper include ProjectForksHelper
include StubRequests
let(:user) { create(:user) } let(:user) { create(:user) }
set(:project) { create(:project) } set(:project) { create(:project) }
...@@ -2504,7 +2505,7 @@ describe Ci::Pipeline, :mailer do ...@@ -2504,7 +2505,7 @@ describe Ci::Pipeline, :mailer do
let(:enabled) { true } let(:enabled) { true }
before do before do
WebMock.stub_request(:post, hook.url) stub_full_request(hook.url, method: :post)
end end
context 'with multiple builds' do context 'with multiple builds' do
...@@ -2558,7 +2559,7 @@ describe Ci::Pipeline, :mailer do ...@@ -2558,7 +2559,7 @@ describe Ci::Pipeline, :mailer do
end end
def have_requested_pipeline_hook(status) def have_requested_pipeline_hook(status)
have_requested(:post, hook.url).with do |req| have_requested(:post, stubbed_hostname(hook.url)).with do |req|
json_body = JSON.parse(req.body) json_body = JSON.parse(req.body)
json_body['object_attributes']['status'] == status && json_body['object_attributes']['status'] == status &&
json_body['builds'].length == 2 json_body['builds'].length == 2
......
...@@ -55,31 +55,38 @@ describe WebHookService do ...@@ -55,31 +55,38 @@ describe WebHookService do
describe '#execute' do describe '#execute' do
before do before do
project.hooks << [project_hook] project.hooks << [project_hook]
WebMock.stub_request(:post, project_hook.url)
end end
context 'when token is defined' do context 'when token is defined' do
let(:project_hook) { create(:project_hook, :token) } let(:project_hook) { create(:project_hook, :token) }
it 'POSTs to the webhook URL' do it 'POSTs to the webhook URL' do
stub_full_request(project_hook.url, method: :post)
service_instance.execute service_instance.execute
expect(WebMock).to have_requested(:post, project_hook.url).with(
expect(WebMock).to have_requested(:post, stubbed_hostname(project_hook.url)).with(
headers: headers.merge({ 'X-Gitlab-Token' => project_hook.token }) headers: headers.merge({ 'X-Gitlab-Token' => project_hook.token })
).once ).once
end end
end end
it 'POSTs to the webhook URL' do it 'POSTs to the webhook URL' do
stub_full_request(project_hook.url, method: :post)
service_instance.execute service_instance.execute
expect(WebMock).to have_requested(:post, project_hook.url).with(
expect(WebMock).to have_requested(:post, stubbed_hostname(project_hook.url)).with(
headers: headers headers: headers
).once ).once
end end
it 'POSTs the data as JSON' do it 'POSTs the data as JSON' do
stub_full_request(project_hook.url, method: :post)
service_instance.execute service_instance.execute
expect(WebMock).to have_requested(:post, project_hook.url).with(
expect(WebMock).to have_requested(:post, stubbed_hostname(project_hook.url)).with(
headers: headers headers: headers
).once ).once
end end
...@@ -115,7 +122,7 @@ describe WebHookService do ...@@ -115,7 +122,7 @@ describe WebHookService do
end end
it 'catches exceptions' do it 'catches exceptions' do
WebMock.stub_request(:post, project_hook.url).to_raise(StandardError.new('Some error')) stub_full_request(project_hook.url, method: :post).to_raise(StandardError.new('Some error'))
expect { service_instance.execute }.to raise_error(StandardError) expect { service_instance.execute }.to raise_error(StandardError)
end end
...@@ -125,20 +132,20 @@ describe WebHookService do ...@@ -125,20 +132,20 @@ describe WebHookService do
exceptions.each do |exception_class| exceptions.each do |exception_class|
exception = exception_class.new('Exception message') exception = exception_class.new('Exception message')
WebMock.stub_request(:post, project_hook.url).to_raise(exception) stub_full_request(project_hook.url, method: :post).to_raise(exception)
expect(service_instance.execute).to eq({ status: :error, message: exception.to_s }) expect(service_instance.execute).to eq({ status: :error, message: exception.to_s })
expect { service_instance.execute }.not_to raise_error expect { service_instance.execute }.not_to raise_error
end end
end end
it 'handles 200 status code' do it 'handles 200 status code' do
WebMock.stub_request(:post, project_hook.url).to_return(status: 200, body: 'Success') stub_full_request(project_hook.url, method: :post).to_return(status: 200, body: 'Success')
expect(service_instance.execute).to include({ status: :success, http_status: 200, message: 'Success' }) expect(service_instance.execute).to include({ status: :success, http_status: 200, message: 'Success' })
end end
it 'handles 2xx status codes' do it 'handles 2xx status codes' do
WebMock.stub_request(:post, project_hook.url).to_return(status: 201, body: 'Success') stub_full_request(project_hook.url, method: :post).to_return(status: 201, body: 'Success')
expect(service_instance.execute).to include({ status: :success, http_status: 201, message: 'Success' }) expect(service_instance.execute).to include({ status: :success, http_status: 201, message: 'Success' })
end end
...@@ -148,7 +155,7 @@ describe WebHookService do ...@@ -148,7 +155,7 @@ describe WebHookService do
context 'with success' do context 'with success' do
before do before do
WebMock.stub_request(:post, project_hook.url).to_return(status: 200, body: 'Success') stub_full_request(project_hook.url, method: :post).to_return(status: 200, body: 'Success')
service_instance.execute service_instance.execute
end end
...@@ -165,7 +172,7 @@ describe WebHookService do ...@@ -165,7 +172,7 @@ describe WebHookService do
context 'with exception' do context 'with exception' do
before do before do
WebMock.stub_request(:post, project_hook.url).to_raise(SocketError.new('Some HTTP Post error')) stub_full_request(project_hook.url, method: :post).to_raise(SocketError.new('Some HTTP Post error'))
service_instance.execute service_instance.execute
end end
...@@ -182,7 +189,7 @@ describe WebHookService do ...@@ -182,7 +189,7 @@ describe WebHookService do
context 'with unsafe response body' do context 'with unsafe response body' do
before do before do
WebMock.stub_request(:post, project_hook.url).to_return(status: 200, body: "\xBB") stub_full_request(project_hook.url, method: :post).to_return(status: 200, body: "\xBB")
service_instance.execute service_instance.execute
end end
...@@ -202,7 +209,7 @@ describe WebHookService do ...@@ -202,7 +209,7 @@ describe WebHookService do
let(:service_instance) { described_class.new(service_hook, data, 'service_hook') } let(:service_instance) { described_class.new(service_hook, data, 'service_hook') }
before do before do
WebMock.stub_request(:post, service_hook.url).to_return(status: 200, body: 'Success') stub_full_request(service_hook.url, method: :post).to_return(status: 200, body: 'Success')
end end
it { expect { service_instance.execute }.not_to change(WebHookLog, :count) } it { expect { service_instance.execute }.not_to change(WebHookLog, :count) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment