class ActiveModelTest::MachineWithMixedCallbacksTest

Public Instance Methods

after_ignite(*args) click to toggle source
# File test/unit/integrations/active_model_test.rb, line 954
def after_ignite(*args)
  notifications << :observer_after_ignite
end
after_transition(*args) click to toggle source
# File test/unit/integrations/active_model_test.rb, line 958
def after_transition(*args)
  notifications << :observer_after_transition
end
before_ignite(*args) click to toggle source
# File test/unit/integrations/active_model_test.rb, line 946
def before_ignite(*args)
  notifications << :observer_before_ignite
end
before_transition(*args) click to toggle source
# File test/unit/integrations/active_model_test.rb, line 950
def before_transition(*args)
  notifications << :observer_before_transition
end
setup() click to toggle source
# File test/unit/integrations/active_model_test.rb, line 929
def setup
  @model = new_model { include ActiveModel::Observing }
  @machine = StateMachine::Machine.new(@model)
  @machine.state :parked, :idling
  @machine.event :ignite
  @record = @model.new(:state => 'parked')
  @transition = StateMachine::Transition.new(@record, @machine, :ignite, :parked, :idling)
  
  @notifications = []
  
  # Create callbacks
  @machine.before_transition {@notifications << :callback_before_transition}
  @machine.after_transition {@notifications << :callback_after_transition}
  @machine.around_transition {|block| @notifications << :callback_around_before_transition; block.call; @notifications << :callback_around_after_transition}
  
  # Create observer callbacks
  observer = new_observer(@model) do
    def before_ignite(*args)
      notifications << :observer_before_ignite
    end
    
    def before_transition(*args)
      notifications << :observer_before_transition
    end
    
    def after_ignite(*args)
      notifications << :observer_after_ignite
    end
    
    def after_transition(*args)
      notifications << :observer_after_transition
    end
  end
  instance = observer.instance
  instance.notifications = @notifications
  
  @transition.perform
end
test_should_invoke_callbacks_in_specific_order() click to toggle source
# File test/unit/integrations/active_model_test.rb, line 968
def test_should_invoke_callbacks_in_specific_order
  expected = [
    :callback_before_transition,
    :callback_around_before_transition,
    :observer_before_ignite,
    :observer_before_transition,
    :callback_around_after_transition,
    :callback_after_transition,
    :observer_after_ignite,
    :observer_after_transition
  ]
  
  assert_equal expected, @notifications
end