Commit e2c01f39 authored by Kamil Trzcinski's avatar Kamil Trzcinski

Fix tests for pipeline events

parent 478990bb
...@@ -208,8 +208,10 @@ module Ci ...@@ -208,8 +208,10 @@ module Ci
self.started_at = statuses.started_at self.started_at = statuses.started_at
self.finished_at = statuses.finished_at self.finished_at = statuses.finished_at
self.duration = statuses.latest.duration self.duration = statuses.latest.duration
should_execute_hooks = status_changed?
save save
execute_hooks if status_changed? execute_hooks if should_execute_hooks
end end
private private
......
...@@ -2,7 +2,7 @@ require 'spec_helper' ...@@ -2,7 +2,7 @@ require 'spec_helper'
describe Ci::Pipeline, models: true do describe Ci::Pipeline, models: true do
let(:project) { FactoryGirl.create :empty_project } let(:project) { FactoryGirl.create :empty_project }
let(:pipeline) { FactoryGirl.create :ci_empty_pipeline, project: project } let(:pipeline) { FactoryGirl.create :ci_empty_pipeline, status: 'created', project: project }
it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:project) }
it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:user) }
...@@ -303,6 +303,9 @@ describe Ci::Pipeline, models: true do ...@@ -303,6 +303,9 @@ describe Ci::Pipeline, models: true do
end end
describe '#execute_hooks' do describe '#execute_hooks' do
let!(:build_a) { create_build('a') }
let!(:build_b) { create_build('b') }
let!(:hook) do let!(:hook) do
create(:project_hook, project: project, pipeline_events: enabled) create(:project_hook, project: project, pipeline_events: enabled)
end end
...@@ -314,30 +317,48 @@ describe Ci::Pipeline, models: true do ...@@ -314,30 +317,48 @@ describe Ci::Pipeline, models: true do
context 'with pipeline hooks enabled' do context 'with pipeline hooks enabled' do
let(:enabled) { true } let(:enabled) { true }
context 'with multiple builds' do before do
let!(:build_a) { create_build('a') } WebMock.stub_request(:post, hook.url)
let!(:build_b) { create_build('b') } end
it 'fires exactly 3 hooks' do context 'with multiple builds' do
stub_request('pending') context 'when build is queued' do
before do
build_a.queue build_a.queue
build_b.queue build_b.queue
end
it 'receive a pending event once' do
expect(WebMock).to requested('pending').once
end
end
stub_request('running') context 'when build is run' do
before do
build_a.queue
build_a.run build_a.run
build_b.queue
build_b.run build_b.run
end
it 'receive a running event once' do
expect(WebMock).to requested('running').once
end
end
stub_request('success') context 'when all builds succeed' do
before do
build_a.success build_a.success
build_b.success build_b.success
end end
def create_build(name) it 'receive a success event once' do
create(:ci_build, :pending, pipeline: pipeline, name: name) expect(WebMock).to requested('success').once
end
end end
def stub_request(status) def requested(status)
WebMock.stub_request(:post, hook.url).with do |req| have_requested(:post, 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
...@@ -349,9 +370,18 @@ describe Ci::Pipeline, models: true do ...@@ -349,9 +370,18 @@ describe Ci::Pipeline, models: true do
context 'with pipeline hooks disabled' do context 'with pipeline hooks disabled' do
let(:enabled) { false } let(:enabled) { false }
before do
build_a.queue
build_b.queue
end
it 'did not execute pipeline_hook after touched' do it 'did not execute pipeline_hook after touched' do
expect(WebMock).not_to have_requested(:post, hook.url) expect(WebMock).not_to have_requested(:post, hook.url)
end end
end end
def create_build(name)
create(:ci_build, :created, pipeline: pipeline, name: name)
end
end end
end end
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