class TransitionCollectionWithDifferentActionsTest

Public Instance Methods

save_state() click to toggle source
# File test/unit/transition_collection_test.rb, line 510
def save_state
  (@actions ||= []) << :save_state
  :save_state
end
save_status() click to toggle source
# File test/unit/transition_collection_test.rb, line 515
def save_status
  (@actions ||= []) << :save_status
  :save_status
end
setup() click to toggle source
# File test/unit/transition_collection_test.rb, line 506
def setup
  @klass = Class.new do
    attr_reader :actions
    
    def save_state
      (@actions ||= []) << :save_state
      :save_state
    end
    
    def save_status
      (@actions ||= []) << :save_status
      :save_status
    end
  end
  
  @state = StateMachine::Machine.new(@klass, :initial => :parked, :action => :save_state)
  @state.state :idling
  @state.event :ignite
  
  @status = StateMachine::Machine.new(@klass, :status, :initial => :first_gear, :action => :save_status)
  @status.state :second_gear
  @status.event :shift_up
  
  @object = @klass.new
  
  @transitions = StateMachine::TransitionCollection.new([
    @state_transition = StateMachine::Transition.new(@object, @state, :ignite, :parked, :idling),
    @status_transition = StateMachine::Transition.new(@object, @status, :shift_up, :first_gear, :second_gear)
  ])
end
test_should_halt_if_action_fails_for_second_transition() click to toggle source
# File test/unit/transition_collection_test.rb, line 571
def test_should_halt_if_action_fails_for_second_transition
  @klass.class_eval do
    def save_status
      (@actions ||= []) << :save_status
      false
    end
  end
  
  assert_equal false, @transitions.perform
  assert_equal [:save_state, :save_status], @object.actions
end
test_should_not_halt_if_action_fails_for_first_transition() click to toggle source
# File test/unit/transition_collection_test.rb, line 558
def test_should_not_halt_if_action_fails_for_first_transition
  @klass.class_eval do
    def save_state
      (@actions ||= []) << :save_state
      false
    end
  end
  
  
  assert_equal false, @transitions.perform
  assert_equal [:save_state, :save_status], @object.actions
end
test_should_not_run_after_callbacks_if_action_fails_for_first_transition() click to toggle source
# File test/unit/transition_collection_test.rb, line 607
def test_should_not_run_after_callbacks_if_action_fails_for_first_transition
  @klass.class_eval do
    def save_state
      false
    end
  end
  
  @callbacks = []
  @state.after_transition { @callbacks << :state_after }
  @state.around_transition {|block| block.call; @callbacks << :state_around }
  @status.after_transition { @callbacks << :status_after }
  @status.around_transition {|block| block.call; @callbacks << :status_around }
  
  @transitions.perform
  assert_equal [], @callbacks
end
test_should_not_run_after_callbacks_if_action_fails_for_second_transition() click to toggle source
# File test/unit/transition_collection_test.rb, line 624
def test_should_not_run_after_callbacks_if_action_fails_for_second_transition
  @klass.class_eval do
    def save_status
      false
    end
  end
  
  @callbacks = []
  @state.after_transition { @callbacks << :state_after }
  @state.around_transition {|block| block.call; @callbacks << :state_around }
  @status.after_transition { @callbacks << :status_after }
  @status.around_transition {|block| block.call; @callbacks << :status_around }
  
  @transitions.perform
  assert_equal [], @callbacks
end
test_should_persist_states() click to toggle source
# File test/unit/transition_collection_test.rb, line 541
def test_should_persist_states
  @transitions.perform
  assert_equal 'idling', @object.state
  assert_equal 'second_gear', @object.status
end
test_should_rollback_if_action_errors_for_first_transition() click to toggle source
# File test/unit/transition_collection_test.rb, line 583
def test_should_rollback_if_action_errors_for_first_transition
  @klass.class_eval do
    def save_state
      raise ArgumentError
    end
  end
  
  begin; @transitions.perform; rescue; end
  assert_equal 'parked', @object.state
  assert_equal 'first_gear', @object.status
end
test_should_rollback_if_action_errors_for_second_transition() click to toggle source
# File test/unit/transition_collection_test.rb, line 595
def test_should_rollback_if_action_errors_for_second_transition
  @klass.class_eval do
    def save_status
      raise ArgumentError
    end
  end
  
  begin; @transitions.perform; rescue; end
  assert_equal 'parked', @object.state
  assert_equal 'first_gear', @object.status
end
test_should_run_actions_in_order() click to toggle source
# File test/unit/transition_collection_test.rb, line 547
def test_should_run_actions_in_order
  @transitions.perform
  assert_equal [:save_state, :save_status], @object.actions
end
test_should_run_after_failure_callbacks_if_action_fails_for_first_transition() click to toggle source
# File test/unit/transition_collection_test.rb, line 641
def test_should_run_after_failure_callbacks_if_action_fails_for_first_transition
  @klass.class_eval do
    def save_state
      false
    end
  end
  
  @callbacks = []
  @state.after_failure { @callbacks << :state_after }
  @status.after_failure { @callbacks << :status_after }
  
  @transitions.perform
  assert_equal [:status_after, :state_after], @callbacks
end
test_should_run_after_failure_callbacks_if_action_fails_for_second_transition() click to toggle source
# File test/unit/transition_collection_test.rb, line 656
def test_should_run_after_failure_callbacks_if_action_fails_for_second_transition
  @klass.class_eval do
    def save_status
      false
    end
  end
  
  @callbacks = []
  @state.after_failure { @callbacks << :state_after }
  @status.after_failure { @callbacks << :status_after }
  
  @transitions.perform
  assert_equal [:status_after, :state_after], @callbacks
end
test_should_store_results_in_transitions() click to toggle source
# File test/unit/transition_collection_test.rb, line 552
def test_should_store_results_in_transitions
  @transitions.perform
  assert_equal :save_state, @state_transition.result
  assert_equal :save_status, @status_transition.result
end
test_should_succeed() click to toggle source
# File test/unit/transition_collection_test.rb, line 537
def test_should_succeed
  assert_equal true, @transitions.perform
end