2019-05-18 00:54:41 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-06-02 11:05:42 +05:30
|
|
|
require 'spec_helper'
|
|
|
|
|
2020-07-28 23:09:34 +05:30
|
|
|
RSpec.describe PivotaltrackerService do
|
2019-06-05 12:25:43 +05:30
|
|
|
include StubRequests
|
|
|
|
|
2016-06-02 11:05:42 +05:30
|
|
|
describe 'Associations' do
|
|
|
|
it { is_expected.to belong_to :project }
|
|
|
|
it { is_expected.to have_one :service_hook }
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'Validations' do
|
|
|
|
context 'when service is active' do
|
2017-09-10 17:25:29 +05:30
|
|
|
before do
|
|
|
|
subject.active = true
|
|
|
|
end
|
2016-06-02 11:05:42 +05:30
|
|
|
|
|
|
|
it { is_expected.to validate_presence_of(:token) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when service is inactive' do
|
2017-09-10 17:25:29 +05:30
|
|
|
before do
|
|
|
|
subject.active = false
|
|
|
|
end
|
2016-06-02 11:05:42 +05:30
|
|
|
|
|
|
|
it { is_expected.not_to validate_presence_of(:token) }
|
|
|
|
end
|
|
|
|
end
|
2016-09-13 17:45:13 +05:30
|
|
|
|
|
|
|
describe 'Execute' do
|
|
|
|
let(:service) do
|
2017-09-10 17:25:29 +05:30
|
|
|
described_class.new.tap do |service|
|
2016-09-13 17:45:13 +05:30
|
|
|
service.token = 'secret_api_token'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:url) { PivotaltrackerService::API_ENDPOINT }
|
|
|
|
|
|
|
|
def push_data(branch: 'master')
|
|
|
|
{
|
|
|
|
object_kind: 'push',
|
|
|
|
ref: "refs/heads/#{branch}",
|
|
|
|
commits: [
|
|
|
|
{
|
|
|
|
id: '21c12ea',
|
|
|
|
author: {
|
|
|
|
name: 'Some User'
|
|
|
|
},
|
|
|
|
url: 'https://example.com/commit',
|
2017-09-10 17:25:29 +05:30
|
|
|
message: 'commit message'
|
2016-09-13 17:45:13 +05:30
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
2019-06-05 12:25:43 +05:30
|
|
|
stub_full_request(url, method: :post)
|
2016-09-13 17:45:13 +05:30
|
|
|
end
|
|
|
|
|
2019-05-18 00:54:41 +05:30
|
|
|
it 'posts correct message' do
|
2016-09-13 17:45:13 +05:30
|
|
|
service.execute(push_data)
|
2019-06-05 12:25:43 +05:30
|
|
|
expect(WebMock).to have_requested(:post, stubbed_hostname(url)).with(
|
2016-09-13 17:45:13 +05:30
|
|
|
body: {
|
|
|
|
'source_commit' => {
|
|
|
|
'commit_id' => '21c12ea',
|
|
|
|
'author' => 'Some User',
|
|
|
|
'url' => 'https://example.com/commit',
|
|
|
|
'message' => 'commit message'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
headers: {
|
|
|
|
'Content-Type' => 'application/json',
|
|
|
|
'X-TrackerToken' => 'secret_api_token'
|
|
|
|
}
|
|
|
|
).once
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when allowed branches is specified' do
|
|
|
|
let(:service) do
|
|
|
|
super().tap do |service|
|
|
|
|
service.restrict_to_branch = 'master,v10'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-05-18 00:54:41 +05:30
|
|
|
it 'posts message if branch is in the list' do
|
2016-09-13 17:45:13 +05:30
|
|
|
service.execute(push_data(branch: 'master'))
|
|
|
|
service.execute(push_data(branch: 'v10'))
|
|
|
|
|
2019-06-05 12:25:43 +05:30
|
|
|
expect(WebMock).to have_requested(:post, stubbed_hostname(url)).twice
|
2016-09-13 17:45:13 +05:30
|
|
|
end
|
|
|
|
|
2019-05-18 00:54:41 +05:30
|
|
|
it 'does not post message if branch is not in the list' do
|
2016-09-13 17:45:13 +05:30
|
|
|
service.execute(push_data(branch: 'mas'))
|
|
|
|
service.execute(push_data(branch: 'v11'))
|
|
|
|
|
2019-06-05 12:25:43 +05:30
|
|
|
expect(WebMock).not_to have_requested(:post, stubbed_hostname(url))
|
2016-09-13 17:45:13 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2016-06-02 11:05:42 +05:30
|
|
|
end
|