class ActiveRecordTest::MachineWithInternationalizationTest

Public Instance Methods

setup() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 1969
def setup
  I18n.backend = I18n::Backend::Simple.new
  
  # Initialize the backend
  StateMachine::Machine.new(new_model)
  I18n.backend.translate(:en, 'activerecord.errors.messages.invalid_transition', :event => 'ignite', :value => 'idling')
  
  @model = new_model
end
test_should_add_locale_to_beginning_of_load_path() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2125
def test_should_add_locale_to_beginning_of_load_path
  @original_load_path = I18n.load_path
  I18n.backend = I18n::Backend::Simple.new
  
  app_locale = File.dirname(__FILE__) + '/../../files/en.yml'
  default_locale = File.dirname(__FILE__) + '/../../../lib/state_machine/integrations/active_record/locale.rb'
  I18n.load_path = [app_locale]
  
  StateMachine::Machine.new(@model)
  
  assert_equal [default_locale, app_locale].map {|path| File.expand_path(path)}, I18n.load_path.map {|path| File.expand_path(path)}
ensure
  I18n.load_path = @original_load_path
end
test_should_allow_customized_error_key() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 1994
def test_should_allow_customized_error_key
  I18n.backend.store_translations(:en, {
    :activerecord => {:errors => {:messages => {:bad_transition => "cannot #{interpolation_key('event')}"}}}
  })
  
  machine = StateMachine::Machine.new(@model, :messages => {:invalid_transition => :bad_transition})
  machine.state :parked, :idling
  
  record = @model.new(:state => 'idling')
  
  machine.invalidate(record, :state, :invalid_transition, [[:event, 'ignite']])
  assert_equal ['State cannot ignite'], record.errors.full_messages
end
test_should_allow_customized_error_string() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2008
def test_should_allow_customized_error_string
  machine = StateMachine::Machine.new(@model, :messages => {:invalid_transition => "cannot #{interpolation_key('event')}"})
  machine.state :parked, :idling
  
  record = @model.new(:state => 'idling')
  
  machine.invalidate(record, :state, :invalid_transition, [[:event, 'ignite']])
  assert_equal ['State cannot ignite'], record.errors.full_messages
end
test_should_allow_customized_event_key_scoped_to_class() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2083
def test_should_allow_customized_event_key_scoped_to_class
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:'active_record_test/foo' => {:events => {:park => 'stop'}}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.event :park
  
  assert_equal 'stop', machine.event(:park).human_name
end
test_should_allow_customized_event_key_scoped_to_class_and_machine() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2072
def test_should_allow_customized_event_key_scoped_to_class_and_machine
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:'active_record_test/foo' => {:state => {:events => {:park => 'stop'}}}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.event :park
  
  assert_equal 'stop', machine.event(:park).human_name
end
test_should_allow_customized_event_key_scoped_to_machine() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2094
def test_should_allow_customized_event_key_scoped_to_machine
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:state => {:events => {:park => 'stop'}}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.event :park
  
  assert_equal 'stop', machine.event(:park).human_name
end
test_should_allow_customized_event_key_unscoped() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2105
def test_should_allow_customized_event_key_unscoped
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:events => {:park => 'stop'}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.event :park
  
  assert_equal 'stop', machine.event(:park).human_name
end
test_should_allow_customized_state_key_scoped_to_class() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2029
def test_should_allow_customized_state_key_scoped_to_class
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:'active_record_test/foo' => {:states => {:parked => 'shutdown'}}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.state :parked
  
  assert_equal 'shutdown', machine.state(:parked).human_name
end
test_should_allow_customized_state_key_scoped_to_class_and_machine() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2018
def test_should_allow_customized_state_key_scoped_to_class_and_machine
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:'active_record_test/foo' => {:state => {:states => {:parked => 'shutdown'}}}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.state :parked
  
  assert_equal 'shutdown', machine.state(:parked).human_name
end
test_should_allow_customized_state_key_scoped_to_machine() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2040
def test_should_allow_customized_state_key_scoped_to_machine
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:state => {:states => {:parked => 'shutdown'}}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.state :parked
  
  assert_equal 'shutdown', machine.state(:parked).human_name
end
test_should_allow_customized_state_key_unscoped() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2051
def test_should_allow_customized_state_key_unscoped
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:states => {:parked => 'shutdown'}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.state :parked
  
  assert_equal 'shutdown', machine.state(:parked).human_name
end
test_should_only_add_locale_once_in_load_path() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2116
def test_should_only_add_locale_once_in_load_path
  assert_equal 1, I18n.load_path.select {|path| path =~ %r{active_record/locale\.rb$}}.length
  
  # Create another ActiveRecord model that will triger the i18n feature
  new_model
  
  assert_equal 1, I18n.load_path.select {|path| path =~ %r{active_record/locale\.rb$}}.length
end
test_should_prefer_other_locales_first() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2140
def test_should_prefer_other_locales_first
  @original_load_path = I18n.load_path
  I18n.backend = I18n::Backend::Simple.new
  I18n.load_path = [File.dirname(__FILE__) + '/../../files/en.yml']
  
  machine = StateMachine::Machine.new(@model)
  machine.state :parked, :idling
  machine.event :ignite
  
  record = @model.new(:state => 'idling')
  
  machine.invalidate(record, :state, :invalid_transition, [[:event, 'ignite']])
  assert_equal ['State cannot transition'], record.errors.full_messages
ensure
  I18n.load_path = @original_load_path
end
test_should_support_nil_state_key() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 2062
def test_should_support_nil_state_key
  I18n.backend.store_translations(:en, {
    :activerecord => {:state_machines => {:states => {:nil => 'empty'}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  
  assert_equal 'empty', machine.state(nil).human_name
end
test_should_use_defaults() click to toggle source
# File test/unit/integrations/active_record_test.rb, line 1979
def test_should_use_defaults
  I18n.backend.store_translations(:en, {
    :activerecord => {:errors => {:messages => {:invalid_transition => "cannot #{interpolation_key('event')}"}}}
  })
  
  machine = StateMachine::Machine.new(@model)
  machine.state :parked, :idling
  machine.event :ignite
  
  record = @model.new(:state => 'idling')
  
  machine.invalidate(record, :state, :invalid_transition, [[:event, 'ignite']])
  assert_equal ['State cannot ignite'], record.errors.full_messages
end