diff options
Diffstat (limited to 'activerecord/test/cases/timestamp_test.rb')
-rw-r--r-- | activerecord/test/cases/timestamp_test.rb | 102 |
1 files changed, 86 insertions, 16 deletions
diff --git a/activerecord/test/cases/timestamp_test.rb b/activerecord/test/cases/timestamp_test.rb index 401439994d..1c21f0f3b6 100644 --- a/activerecord/test/cases/timestamp_test.rb +++ b/activerecord/test/cases/timestamp_test.rb @@ -3,9 +3,11 @@ require 'models/developer' require 'models/owner' require 'models/pet' require 'models/toy' +require 'models/car' +require 'models/task' class TimestampTest < ActiveRecord::TestCase - fixtures :developers, :owners, :pets, :toys + fixtures :developers, :owners, :pets, :toys, :cars, :tasks def setup @developer = Developer.first @@ -15,21 +17,21 @@ class TimestampTest < ActiveRecord::TestCase def test_saving_a_changed_record_updates_its_timestamp @developer.name = "Jack Bauer" @developer.save! - + assert_not_equal @previously_updated_at, @developer.updated_at end - + def test_saving_a_unchanged_record_doesnt_update_its_timestamp @developer.save! - + assert_equal @previously_updated_at, @developer.updated_at end - + def test_touching_a_record_updates_its_timestamp previous_salary = @developer.salary @developer.salary = previous_salary + 10000 @developer.touch - + assert_not_equal @previously_updated_at, @developer.updated_at assert_equal previous_salary + 10000, @developer.salary assert @developer.salary_changed?, 'developer salary should have changed' @@ -37,8 +39,18 @@ class TimestampTest < ActiveRecord::TestCase @developer.reload assert_equal previous_salary, @developer.salary end - - def test_touching_a_different_attribute + + def test_saving_when_record_timestamps_is_false_doesnt_update_its_timestamp + Developer.record_timestamps = false + @developer.name = "John Smith" + @developer.save! + + assert_equal @previously_updated_at, @developer.updated_at + ensure + Developer.record_timestamps = true + end + + def test_touching_an_attribute_updates_timestamp previously_created_at = @developer.created_at @developer.touch(:created_at) @@ -47,15 +59,27 @@ class TimestampTest < ActiveRecord::TestCase assert_not_equal previously_created_at, @developer.created_at assert_not_equal @previously_updated_at, @developer.updated_at end - + + def test_touching_an_attribute_updates_it + task = Task.first + previous_value = task.ending + task.touch(:ending) + assert_not_equal previous_value, task.ending + assert_in_delta Time.now, task.ending, 1 + end + + def test_touching_a_record_without_timestamps_is_unexceptional + assert_nothing_raised { Car.first.touch } + end + def test_saving_a_record_with_a_belongs_to_that_specifies_touching_the_parent_should_update_the_parent_updated_at pet = Pet.first owner = pet.owner previously_owner_updated_at = owner.updated_at - + pet.name = "Fluffy the Third" pet.save - + assert_not_equal previously_owner_updated_at, pet.owner.updated_at end @@ -63,27 +87,43 @@ class TimestampTest < ActiveRecord::TestCase pet = Pet.first owner = pet.owner previously_owner_updated_at = owner.updated_at - + pet.destroy - + assert_not_equal previously_owner_updated_at, pet.owner.updated_at end - + def test_saving_a_record_with_a_belongs_to_that_specifies_touching_a_specific_attribute_the_parent_should_update_that_attribute Pet.belongs_to :owner, :touch => :happy_at pet = Pet.first owner = pet.owner previously_owner_happy_at = owner.happy_at - + pet.name = "Fluffy the Third" pet.save - + assert_not_equal previously_owner_happy_at, pet.owner.happy_at ensure Pet.belongs_to :owner, :touch => true end + def test_touching_a_record_with_a_belongs_to_that_uses_a_counter_cache_should_update_the_parent + Pet.belongs_to :owner, :counter_cache => :use_count, :touch => true + + pet = Pet.first + owner = pet.owner + owner.update_attribute(:happy_at, 3.days.ago) + previously_owner_updated_at = owner.updated_at + + pet.name = "I'm a parrot" + pet.save + + assert_not_equal previously_owner_updated_at, pet.owner.updated_at + ensure + Pet.belongs_to :owner, :touch => true + end + def test_touching_a_record_touches_parent_record_and_grandparent_record Toy.belongs_to :pet, :touch => true Pet.belongs_to :owner, :touch => true @@ -100,4 +140,34 @@ class TimestampTest < ActiveRecord::TestCase ensure Toy.belongs_to :pet end + + def test_timestamp_attributes_for_create + toy = Toy.first + assert_equal toy.send(:timestamp_attributes_for_create), [:created_at, :created_on] + end + + def test_timestamp_attributes_for_update + toy = Toy.first + assert_equal toy.send(:timestamp_attributes_for_update), [:updated_at, :updated_on] + end + + def test_all_timestamp_attributes + toy = Toy.first + assert_equal toy.send(:all_timestamp_attributes), [:created_at, :created_on, :updated_at, :updated_on] + end + + def test_timestamp_attributes_for_create_in_model + toy = Toy.first + assert_equal toy.send(:timestamp_attributes_for_create_in_model), [:created_at] + end + + def test_timestamp_attributes_for_update_in_model + toy = Toy.first + assert_equal toy.send(:timestamp_attributes_for_update_in_model), [:updated_at] + end + + def test_all_timestamp_attributes_in_model + toy = Toy.first + assert_equal toy.send(:all_timestamp_attributes_in_model), [:created_at, :updated_at] + end end |