Sha256: d6f905f72d8fe260b1cfeeba6b3303b8b2652aa7c9201aa4a3837bdf65593d67

Contents?: true

Size: 1.76 KB

Versions: 14

Compression:

Stored size: 1.76 KB

Contents

require_relative '../../test_helper'

class MachineWithFailureCallbacksTest < StateMachinesTest
  def setup
    @klass = Class.new do
      attr_accessor :callbacks
    end

    @machine = StateMachines::Machine.new(@klass, initial: :parked)
    @event = @machine.event :ignite

    @object = @klass.new
    @object.callbacks = []
  end

  def test_should_raise_exception_if_implicit_option_specified
    exception = assert_raises(ArgumentError) { @machine.after_failure invalid: :valid, do: lambda {} }
    assert_equal 'Unknown key: :invalid. Valid keys are: :on, :do, :if, :unless', exception.message
  end

  def test_should_raise_exception_if_method_not_specified
    exception = assert_raises(ArgumentError) { @machine.after_failure on: :ignite }
    assert_equal 'Method(s) for callback must be specified', exception.message
  end

  def test_should_invoke_callbacks_during_failed_transition
    @machine.after_failure lambda { |object| object.callbacks << 'failure' }

    @event.fire(@object)
    assert_equal %w(failure), @object.callbacks
  end

  def test_should_allow_multiple_callbacks
    @machine.after_failure lambda { |object| object.callbacks << 'failure1' }, lambda { |object| object.callbacks << 'failure2' }

    @event.fire(@object)
    assert_equal %w(failure1 failure2), @object.callbacks
  end

  def test_should_allow_multiple_callbacks_with_requirements
    @machine.after_failure lambda { |object| object.callbacks << 'failure_ignite1' }, lambda { |object| object.callbacks << 'failure_ignite2' }, on: :ignite
    @machine.after_failure lambda { |object| object.callbacks << 'failure_park1' }, lambda { |object| object.callbacks << 'failure_park2' }, on: :park

    @event.fire(@object)
    assert_equal %w(failure_ignite1 failure_ignite2), @object.callbacks
  end
end

Version data entries

14 entries across 14 versions & 2 rubygems

Version Path
state_machines-0.5.0 test/unit/machine/machine_with_failure_callbacks_test.rb
solidus_backend-1.0.0.pre3 vendor/bundle/gems/state_machines-0.2.2/test/unit/machine/machine_with_failure_callbacks_test.rb
solidus_backend-1.0.0.pre2 vendor/bundle/gems/state_machines-0.2.2/test/unit/machine/machine_with_failure_callbacks_test.rb
solidus_backend-1.0.0.pre vendor/bundle/gems/state_machines-0.2.2/test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.4.0 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.3.0 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.2.2 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.2.1 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.2.0 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.1.4 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.1.3 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.1.2 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.1.1 test/unit/machine/machine_with_failure_callbacks_test.rb
state_machines-0.1.0 test/unit/machine/machine_with_failure_callbacks_test.rb