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 end