Disable transactional fixtures for broken 'has-one' test cases to fix them
This commit is contained in:
parent
1d7baf1576
commit
86046a6c2f
|
@ -13,7 +13,7 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
||||||
require "rails/test_help"
|
require "rails/test_help"
|
||||||
require 'shoulda'
|
require 'shoulda'
|
||||||
require 'ffaker'
|
require 'ffaker'
|
||||||
require 'database_cleaner' if using_mysql?
|
require 'database_cleaner'
|
||||||
|
|
||||||
Rails.backtrace_cleaner.remove_silencers!
|
Rails.backtrace_cleaner.remove_silencers!
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__
|
||||||
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
||||||
|
|
||||||
# DatabaseCleaner is apparently necessary for doing proper transactions within MySQL (ugh)
|
# DatabaseCleaner is apparently necessary for doing proper transactions within MySQL (ugh)
|
||||||
DatabaseCleaner.strategy = :truncation if using_mysql?
|
DatabaseCleaner.strategy = :truncation
|
||||||
|
|
||||||
# global setup block resetting Thread.current
|
# global setup block resetting Thread.current
|
||||||
class ActiveSupport::TestCase
|
class ActiveSupport::TestCase
|
||||||
|
|
|
@ -1,5 +1,13 @@
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
|
||||||
|
# Updates `model`'s last version so it looks like the version was
|
||||||
|
# created 2 seconds ago.
|
||||||
|
def make_last_version_earlier(model)
|
||||||
|
PaperTrail::Version.record_timestamps = false
|
||||||
|
model.versions.last.update_attributes :created_at => 2.seconds.ago
|
||||||
|
PaperTrail::Version.record_timestamps = true
|
||||||
|
end
|
||||||
|
|
||||||
class HasPaperTrailModelTest < ActiveSupport::TestCase
|
class HasPaperTrailModelTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
context "A record with defined 'only' and 'ignore' attributes" do
|
context "A record with defined 'only' and 'ignore' attributes" do
|
||||||
|
@ -952,88 +960,6 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
context 'A model with a has_one association' do
|
|
||||||
setup { @widget = Widget.create :name => 'widget_0' }
|
|
||||||
|
|
||||||
context 'before the associated was created' do
|
|
||||||
setup do
|
|
||||||
@widget.update_attributes :name => 'widget_1'
|
|
||||||
@wotsit = @widget.create_wotsit :name => 'wotsit_0'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when reified' do
|
|
||||||
setup { @widget_0 = @widget.versions.last.reify(:has_one => 1) }
|
|
||||||
|
|
||||||
should 'see the associated as it was at the time' do
|
|
||||||
assert_nil @widget_0.wotsit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'where the association is created between model versions' do
|
|
||||||
setup do
|
|
||||||
@wotsit = @widget.create_wotsit :name => 'wotsit_0'
|
|
||||||
make_last_version_earlier @wotsit
|
|
||||||
|
|
||||||
@widget.update_attributes :name => 'widget_1'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when reified' do
|
|
||||||
setup { @widget_0 = @widget.versions.last.reify(:has_one => 1) }
|
|
||||||
|
|
||||||
should 'see the associated as it was at the time' do
|
|
||||||
assert_equal 'wotsit_0', @widget_0.wotsit.name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'and then the associated is updated between model versions' do
|
|
||||||
setup do
|
|
||||||
@wotsit.update_attributes :name => 'wotsit_1'
|
|
||||||
make_last_version_earlier @wotsit
|
|
||||||
@wotsit.update_attributes :name => 'wotsit_2'
|
|
||||||
make_last_version_earlier @wotsit
|
|
||||||
|
|
||||||
@widget.update_attributes :name => 'widget_2'
|
|
||||||
@wotsit.update_attributes :name => 'wotsit_3'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when reified' do
|
|
||||||
setup { @widget_1 = @widget.versions.last.reify(:has_one => 1) }
|
|
||||||
|
|
||||||
should 'see the associated as it was at the time' do
|
|
||||||
assert_equal 'wotsit_2', @widget_1.wotsit.name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when reified opting out of has_one reification' do
|
|
||||||
setup { @widget_1 = @widget.versions.last.reify(:has_one => false) }
|
|
||||||
|
|
||||||
should 'see the associated as it is live' do
|
|
||||||
assert_equal 'wotsit_3', @widget_1.wotsit.name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'and then the associated is destroyed between model versions' do
|
|
||||||
setup do
|
|
||||||
@wotsit.destroy
|
|
||||||
make_last_version_earlier @wotsit
|
|
||||||
|
|
||||||
@widget.update_attributes :name => 'widget_3'
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when reified' do
|
|
||||||
setup { @widget_2 = @widget.versions.last.reify(:has_one => 1) }
|
|
||||||
|
|
||||||
should 'see the associated as it was at the time' do
|
|
||||||
assert_nil @widget_2.wotsit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'When an attribute has a custom serializer' do
|
context 'When an attribute has a custom serializer' do
|
||||||
setup { @person = Person.new(:time_zone => "Samoa") }
|
setup { @person = Person.new(:time_zone => "Samoa") }
|
||||||
|
|
||||||
|
@ -1378,15 +1304,99 @@ class HasPaperTrailModelTest < ActiveSupport::TestCase
|
||||||
assert_equal 3, @widget.versions.size
|
assert_equal 3, @widget.versions.size
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
# Updates `model`'s last version so it looks like the version was
|
class HasPaperTrailModelTransactionalTest < ActiveSupport::TestCase
|
||||||
# created 2 seconds ago.
|
# These would have been done in test_helper.rb if using_mysql? is true
|
||||||
def make_last_version_earlier(model)
|
unless using_mysql?
|
||||||
PaperTrail::Version.record_timestamps = false
|
self.use_transactional_fixtures = false
|
||||||
model.versions.last.update_attributes :created_at => 2.seconds.ago
|
setup { DatabaseCleaner.start }
|
||||||
PaperTrail::Version.record_timestamps = true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
teardown do
|
||||||
|
# This would have been done in test_helper.rb if using_mysql? is true
|
||||||
|
DatabaseCleaner.clean unless using_mysql?
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'A model with a has_one association' do
|
||||||
|
setup { @widget = Widget.create :name => 'widget_0' }
|
||||||
|
|
||||||
|
context 'before the associated was created' do
|
||||||
|
setup do
|
||||||
|
@widget.update_attributes :name => 'widget_1'
|
||||||
|
@wotsit = @widget.create_wotsit :name => 'wotsit_0'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when reified' do
|
||||||
|
setup { @widget_0 = @widget.versions.last.reify(:has_one => 1) }
|
||||||
|
|
||||||
|
should 'see the associated as it was at the time' do
|
||||||
|
assert_nil @widget_0.wotsit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'where the association is created between model versions' do
|
||||||
|
setup do
|
||||||
|
@wotsit = @widget.create_wotsit :name => 'wotsit_0'
|
||||||
|
make_last_version_earlier @wotsit
|
||||||
|
|
||||||
|
@widget.update_attributes :name => 'widget_1'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when reified' do
|
||||||
|
setup { @widget_0 = @widget.versions.last.reify(:has_one => 1) }
|
||||||
|
|
||||||
|
should 'see the associated as it was at the time' do
|
||||||
|
assert_equal 'wotsit_0', @widget_0.wotsit.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and then the associated is updated between model versions' do
|
||||||
|
setup do
|
||||||
|
@wotsit.update_attributes :name => 'wotsit_1'
|
||||||
|
make_last_version_earlier @wotsit
|
||||||
|
@wotsit.update_attributes :name => 'wotsit_2'
|
||||||
|
make_last_version_earlier @wotsit
|
||||||
|
|
||||||
|
@widget.update_attributes :name => 'widget_2'
|
||||||
|
@wotsit.update_attributes :name => 'wotsit_3'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when reified' do
|
||||||
|
setup { @widget_1 = @widget.versions.last.reify(:has_one => 1) }
|
||||||
|
|
||||||
|
should 'see the associated as it was at the time' do
|
||||||
|
assert_equal 'wotsit_2', @widget_1.wotsit.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when reified opting out of has_one reification' do
|
||||||
|
setup { @widget_1 = @widget.versions.last.reify(:has_one => false) }
|
||||||
|
|
||||||
|
should 'see the associated as it is live' do
|
||||||
|
assert_equal 'wotsit_3', @widget_1.wotsit.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'and then the associated is destroyed between model versions' do
|
||||||
|
setup do
|
||||||
|
@wotsit.destroy
|
||||||
|
make_last_version_earlier @wotsit
|
||||||
|
|
||||||
|
@widget.update_attributes :name => 'widget_3'
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when reified' do
|
||||||
|
setup { @widget_2 = @widget.versions.last.reify(:has_one => 1) }
|
||||||
|
|
||||||
|
should 'see the associated as it was at the time' do
|
||||||
|
assert_nil @widget_2.wotsit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue