2016-04-21 15:13:14 +00:00
|
|
|
require 'spec_helper'
|
|
|
|
|
2017-07-10 14:24:02 +00:00
|
|
|
describe PivotaltrackerService do
|
2016-04-21 15:13:14 +00:00
|
|
|
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-06-14 18:18:56 +00:00
|
|
|
before do
|
|
|
|
subject.active = true
|
|
|
|
end
|
2016-04-21 15:13:14 +00:00
|
|
|
|
|
|
|
it { is_expected.to validate_presence_of(:token) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when service is inactive' do
|
2017-06-14 18:18:56 +00:00
|
|
|
before do
|
|
|
|
subject.active = false
|
|
|
|
end
|
2016-04-21 15:13:14 +00:00
|
|
|
|
|
|
|
it { is_expected.not_to validate_presence_of(:token) }
|
|
|
|
end
|
|
|
|
end
|
2016-08-10 14:15:27 +00:00
|
|
|
|
|
|
|
describe 'Execute' do
|
|
|
|
let(:service) do
|
2017-07-25 17:09:00 +00:00
|
|
|
described_class.new.tap do |service|
|
2016-08-10 14:15:27 +00:00
|
|
|
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-05-03 11:22:03 +00:00
|
|
|
message: 'commit message'
|
2016-08-10 14:15:27 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
|
|
|
WebMock.stub_request(:post, url)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'should post correct message' do
|
|
|
|
service.execute(push_data)
|
|
|
|
expect(WebMock).to have_requested(:post, url).with(
|
|
|
|
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
|
|
|
|
|
|
|
|
it 'should post message if branch is in the list' do
|
|
|
|
service.execute(push_data(branch: 'master'))
|
|
|
|
service.execute(push_data(branch: 'v10'))
|
|
|
|
|
|
|
|
expect(WebMock).to have_requested(:post, url).twice
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'should not post message if branch is not in the list' do
|
|
|
|
service.execute(push_data(branch: 'mas'))
|
|
|
|
service.execute(push_data(branch: 'v11'))
|
|
|
|
|
|
|
|
expect(WebMock).not_to have_requested(:post, url)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2016-04-21 15:13:14 +00:00
|
|
|
end
|