Sha256: ee73e075c567b4df1f9b5498cf320c83e6456acd158149b5805173226bd22e84

Contents?: true

Size: 1.56 KB

Versions: 6

Compression:

Stored size: 1.56 KB

Contents

require 'helper'

class DrivingInstructor
  def self.applause!
  end
end

class DrivingSchoolCar
  include Transitions

  state_machine do
    state :parked
    state :running
    state :driving
    state :switched_off

    event :start_driving, :success => lambda { |car| DrivingInstructor.applause! } do
      transitions :from => :parked, :to => :driving, :on_transition => [:start_engine, :loosen_handbrake, :push_gas_pedal]
    end

    event :switch_off_engine do
      transitions :from => :parked, :to => :switched_off
    end
  end

  %w!start_engine loosen_handbrake push_gas_pedal!.each do |m|
    define_method(m){}
  end
end

class TestStateTransitionSuccessCallback < Test::Unit::TestCase
  def setup
    @car = DrivingSchoolCar.new
  end

  test "should execute the success callback after successfull event execution" do
    DrivingInstructor.expects(:applause!)

    @car.start_driving!
  end

  test "should not execute the success callback after event execution failed" do
    DrivingInstructor.expects(:applause!).never

    @car.stubs(:event_failed)
    @car.expects(:loosen_handbrake).raises("Drive with handbrake fail!")
    @car.start_driving!
  end

  test "should execute the event_failed_callback and don't raise error if callback is defined" do
    @car.start_driving
    @car.expects(:event_failed).with(:switch_off_engine)
    @car.switch_off_engine
  end

  test "should just re-raise any error on transition if the event_failed_callback isn't defined" do
    @car.start_driving
    assert_raise(Transitions::InvalidTransition) { @car.switch_off_engine }
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
transitions-0.1.0 test/test_state_transition_success_callback.rb
transitions-0.0.18 test/test_state_transition_success_callback.rb
transitions-0.0.17 test/test_state_transition_success_callback.rb
transitions-0.0.16 test/test_state_transition_success_callback.rb
transitions-0.0.14 test/test_state_transition_success_callback.rb
transitions-0.0.13 test/test_state_transition_success_callback.rb