Skip to content

Commit

Permalink
don't denormalize status and finished_at to parent builds if the matr…
Browse files Browse the repository at this point in the history
…ix hasn't finished yet
  • Loading branch information
Sven Fuchs authored and joshk committed Jun 21, 2011
1 parent f0226bd commit 63af90e
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 28 deletions.
12 changes: 8 additions & 4 deletions app/models/build.rb
Expand Up @@ -217,21 +217,25 @@ def was_started

def was_finished
if parent
parent.update_attributes!(:status => parent.matrix_status, :finished_at => Time.now) if parent
parent.update_attributes!(:status => parent.matrix_status, :finished_at => Time.now)
denormalize_to_repository(parent)
else
denormalize_to_repository(self)
end
end

def denormalize_to_repository(build)
repository.update_attributes!(
attributes = {
:last_build_id => build.id,
:last_build_number => build.number,
:last_build_status => build.status,
:last_build_started_at => build.started_at,
}
attributes.merge!(
:last_build_status => build.status,
:last_build_finished_at => build.finished_at
)
) if !build.matrix? || build.matrix.all?(&:finished?)

repository.update_attributes!(attributes)
end

def normalize_config(config)
Expand Down
52 changes: 28 additions & 24 deletions test/unit/build_test.rb
Expand Up @@ -120,30 +120,34 @@ class BuildTest < ActiveSupport::TestCase
assert_contains_recipients(build.unique_recipients, recipients)
end

# test "denormalize_to_repository? is false for a newly created build" do
# build = Factory(:build)
# assert !build.denormalize_to_repository?
# end

# test "denormalize_to_repository? is true when started_at was just set" do
# build = Factory(:build)
# build.update_attributes!(:started_at => Time.now)
# assert build.denormalize_to_repository?
# end

# test "denormalize_to_repository? is true when finished_at was just set" do
# build = Factory(:build)
# build.update_attributes!(:finished_at => Time.now)
# assert build.denormalize_to_repository?
# end

# test "denormalize_to_repository denormalizes the build id, number, started_at, finished_at and status attributes to the build's repository" do
# build = Factory(:build)
# now = Time.now
# build.update_attributes!(:number => 1, :started_at => now, :finished_at => now, :status => 2)
# actual = build.repository.reload.attributes.slice(*%w(last_build_id last_build_number last_build_started_at last_build_finished_at last_build_status)).values
# assert_equal [build.id, '1', now, now, 2], actual
# end
test "denormalize_to_repository denormalizes the build id, number and started_at attributes to the build's repository" do
build = Factory(:build)
now = Time.now.utc
build.update_attributes!(:number => 1, :started_at => now)

actual = build.repository.reload.attributes.slice(*%w(last_build_id last_build_number last_build_started_at)).values
assert_equal [build.id, '1', now.utc], actual
end

test "denormalize_to_repository denormalizes the build status and finished_at attributes to the build's repository if this is not a matrix build" do
build = Factory(:build)
now = Time.now.utc
build.update_attributes!(:finished_at => now, :status => 0)

actual = build.repository.reload.attributes.slice(*%w(last_build_status last_build_finished_at)).values
assert_equal [0, now], actual
end

test "denormalize_to_repository denormalizes the build status and finished_at attributes to the build's repository if this is a matrix build and all children have finished" do
build = Factory(:build, :matrix => [Factory(:build), Factory(:build)], :config => { 'rvm' => ['1.8.7', '1.9.2'] })
now = Time.now.utc
build.matrix.first.update_attributes!(:finished_at => now, :status => 0)
build.matrix.last.update_attributes!(:finished_at => now, :status => 0)

actual = build.repository.reload.attributes.slice(*%w(last_build_status last_build_finished_at)).values
actual[1] = actual[1].utc.to_s # hrmmm
assert_equal [0, now.to_s], actual
end

protected

Expand Down

0 comments on commit 63af90e

Please sign in to comment.