require 'helper' class TestEvent < Test::Unit::TestCase def setup @state_name = :close_order @success_as_symbol = :success_callback @success_as_lambda = lambda { |record| record.success_callback } @success_as_array = [@success_as_symbol, @success_as_lambda] end def event_with_symbol_success_callback @event = Transitions::Event.new(nil, @state_name, success: @success_as_symbol) do transitions to: :closed, from: [:open, :received] end end alias_method :new_event, :event_with_symbol_success_callback def event_with_lambda_success_callback @event = Transitions::Event.new(nil, @state_name, success: @success_as_lambda) do transitions to: :closed, from: [:open, :received] end end def event_with_array_success_callback @event = Transitions::Event.new(nil, @state_name, success: @success_as_array) do transitions to: :closed, from: [:open, :received] end end test 'should set the name' do assert_equal @state_name, new_event.name end test 'should set the success callback with a symbol and return a block' do assert_respond_to event_with_symbol_success_callback.success, :call end test 'should build a block which calls the given success_callback symbol on the passed record instance' do record = mock('SomeRecordToGetCalled') record.expects(:success_callback) event_with_symbol_success_callback.success.call(record) end test 'should set the success callback with a lambda' do assert_respond_to event_with_lambda_success_callback.success, :call end test 'should build a block which calls the given success_callback lambda on the passed record instance' do record = mock('SomeRecordToGetCalled') record.expects(:success_callback) event_with_lambda_success_callback.success.call(record) end test 'should set the success callback with an array' do assert_respond_to event_with_array_success_callback.success, :call end test 'should build a block which calls the given success_callback array on the passed record instance for each callback' do record = mock('SomeRecordToGetCalled') record.expects(:success_callback).twice event_with_array_success_callback.success.call(record) end test 'should create StateTransitions' do Transitions::StateTransition.expects(:new).with(to: :closed, from: :open) Transitions::StateTransition.expects(:new).with(to: :closed, from: :received) new_event end end