Sha256: 65e82d028d233f417de7ceda453014b79c3b336b9c72fe7e2e8b941a2488f2c6

Contents?: true

Size: 1.91 KB

Versions: 2

Compression:

Stored size: 1.91 KB

Contents

require "helper"

class TestStateTransitionGuardCheck < Test::Unit::TestCase
  args = [:foo, "bar"]

  test "should return true of there is no guard" do
    opts = {:from => "foo", :to => "bar"}
    st = Transitions::StateTransition.new(opts)

    assert st.executable?(nil, *args)
  end

  test "should call the method on the object if guard is a symbol" do
    opts = {:from => "foo", :to => "bar", :guard => :test_guard}
    st = Transitions::StateTransition.new(opts)

    obj = stub
    obj.expects(:test_guard).with(*args)

    st.executable?(obj, *args)
  end

  test "should call the method on the object if guard is a string" do
    opts = {:from => "foo", :to => "bar", :guard => "test_guard"}
    st = Transitions::StateTransition.new(opts)

    obj = stub
    obj.expects(:test_guard).with(*args)

    st.executable?(obj, *args)
  end

  test "should call the proc passing the object if the guard is a proc" do
    opts = {:from => "foo", :to => "bar", :guard => Proc.new {|o, *args| o.test_guard(*args)}}
    st = Transitions::StateTransition.new(opts)

    obj = stub
    obj.expects(:test_guard).with(*args)

    st.executable?(obj, *args)
  end

  test "should call the callable passing the object if the guard responds to #call" do
    callable = Object.new
    callable.define_singleton_method(:call) { |obj, *args| obj.test_guard(*args) }

    opts = {:from => "foo", :to => "bar", :guard => callable }
    st = Transitions::StateTransition.new(opts)

    obj = stub
    obj.expects(:test_guard).with(*args)

    st.executable?(obj, *args)
  end

  test "should call the method on the object if guard is a symbol" do
    opts = {:from => "foo", :to => "bar", :guard => [:test_guard, :test_another_guard] }
    st = Transitions::StateTransition.new(opts)

    obj = stub
    obj.expects(:test_guard).with(*args).returns(true)
    obj.expects(:test_another_guard).with(*args).returns(true)

    assert st.executable?(obj, *args)
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
transitions-0.2.0 test/state_transition/test_state_transition_guard_check.rb
transitions-0.1.13 test/state_transition/test_state_transition_guard_check.rb