Commit ad3e1edc authored by Kamil Trzcinski's avatar Kamil Trzcinski

Added specs for started_at and finished_at

parent e1f05b93
...@@ -22,10 +22,11 @@ module Ci ...@@ -22,10 +22,11 @@ module Ci
state_machine :status, initial: :created do state_machine :status, initial: :created do
event :queue do event :queue do
transition :created => :pending transition :created => :pending
transition any - [:created, :pending] => :running
end end
event :run do event :run do
transition [:pending, :success, :failed, :canceled, :skipped] => :running transition any => :running
end end
event :skip do event :skip do
...@@ -44,15 +45,15 @@ module Ci ...@@ -44,15 +45,15 @@ module Ci
transition any => :canceled transition any => :canceled
end end
after_transition [:created, :pending] => :running do |pipeline| before_transition [:created, :pending] => :running do |pipeline|
pipeline.update(started_at: Time.now) pipeline.started_at = Time.now
end end
after_transition any => [:success, :failed, :canceled] do |pipeline| before_transition any => [:success, :failed, :canceled] do |pipeline|
pipeline.update(finished_at: Time.now) pipeline.finished_at = Time.now
end end
after_transition do |pipeline| before_transition do |pipeline|
pipeline.update_duration pipeline.update_duration
end end
end end
...@@ -245,7 +246,7 @@ module Ci ...@@ -245,7 +246,7 @@ module Ci
end end
def update_duration def update_duration
update(duration: statuses.latest.duration) self.duration = statuses.latest.duration
end end
private private
......
...@@ -120,18 +120,48 @@ describe Ci::Pipeline, models: true do ...@@ -120,18 +120,48 @@ describe Ci::Pipeline, models: true do
end end
end end
describe '#duration' do describe 'state machine' do
let(:current) { Time.now.change(usec: 0) } let(:current) { Time.now.change(usec: 0) }
let!(:build) { create :ci_build, name: 'build1', pipeline: pipeline, started_at: current - 60, finished_at: current } let(:build) { create :ci_build, name: 'build1', pipeline: pipeline, started_at: current - 60, finished_at: current }
let!(:build2) { create :ci_build, name: 'build2', pipeline: pipeline, started_at: current - 60, finished_at: current } let(:build2) { create :ci_build, name: 'build2', pipeline: pipeline, started_at: current - 60, finished_at: current }
before do describe '#duration' do
build.skip before do
build2.skip build.skip
build2.skip
end
it 'matches sum of builds duration' do
expect(pipeline.reload.duration).to eq(build.duration + build2.duration)
end
end end
it 'matches sum of builds duration' do describe '#started_at' do
expect(pipeline.reload.duration).to eq(build.duration + build2.duration) it 'updates on transitioning to running' do
build.run
expect(pipeline.reload.started_at).not_to be_nil
end
it 'do not update on transitioning to success' do
build.success
expect(pipeline.reload.started_at).to be_nil
end
end
describe '#finished_at' do
it 'updates on transitioning to success' do
build.success
expect(pipeline.reload.finished_at).not_to be_nil
end
it 'do not update on transitioning to running' do
build.run
expect(pipeline.reload.finished_at).to be_nil
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