aboutsummaryrefslogblamecommitdiffstats
path: root/activerecord/test/cases/timestamp_test.rb
blob: 549c4af6b174f4f9e72502e8e6a7d26845091dba (plain) (tree)
1
2
3
4
5
6
7

                          

                      

                                            
                                      









                                                        
                                                                  




                                                                
                                                              




                                                  
                                                                  
     




                                                 
                                                                 









                                                                                                                   
                                                                      








                                                                                                                       
                                                                      











                                                                                                                                 
                                                                  


                                         
   
require 'cases/helper'
require 'models/developer'
require 'models/owner'
require 'models/pet'

class TimestampTest < ActiveRecord::TestCase
  fixtures :developers, :owners, :pets

  def setup
    @developer = Developer.first
    @previously_updated_at = @developer.updated_at
  end

  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
    @developer.touch
    
    assert_not_equal @previously_updated_at, @developer.updated_at
  end
  
  def test_touching_a_different_attribute
    previously_created_at = @developer.created_at
    @developer.touch(:created_at)

    assert_not_equal previously_created_at, @developer.created_at
  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

  def test_destroying_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.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
end