2017-04-03 02:55:59 -04:00
|
|
|
require 'minitest_helper'
|
|
|
|
|
|
|
|
class StateMachineTest < Minitest::Spec
|
2017-11-20 01:38:49 -05:00
|
|
|
|
2017-04-03 02:55:59 -04:00
|
|
|
let(:simple) { SimpleExample.new }
|
|
|
|
let(:multiple) { SimpleMultipleExample.new }
|
|
|
|
|
|
|
|
describe 'transition_from' do
|
|
|
|
it "works for simple state machines" do
|
|
|
|
simple.must_transition_from :initialised, to: :filled_out, on_event: :fill_out
|
|
|
|
simple.wont_transition_from :initialised, to: :authorised, on_event: :fill_out
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works for multiple state machines" do
|
|
|
|
multiple.must_transition_from :standing, to: :walking, on_event: :walk, on: :move
|
|
|
|
multiple.wont_transition_from :standing, to: :running, on_event: :walk, on: :move
|
|
|
|
|
|
|
|
multiple.must_transition_from :sleeping, to: :processing, on_event: :start, on: :work
|
|
|
|
multiple.wont_transition_from :sleeping, to: :sleeping, on_event: :start, on: :work
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'allow_transition_to' do
|
|
|
|
it "works for simple state machines" do
|
|
|
|
simple.must_allow_transition_to :filled_out
|
|
|
|
simple.wont_allow_transition_to :authorised
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works for multiple state machines" do
|
|
|
|
multiple.must_allow_transition_to :walking, on: :move
|
|
|
|
multiple.wont_allow_transition_to :standing, on: :move
|
|
|
|
|
|
|
|
multiple.must_allow_transition_to :processing, on: :work
|
|
|
|
multiple.wont_allow_transition_to :sleeping, on: :work
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "have_state" do
|
|
|
|
it "works for simple state machines" do
|
|
|
|
simple.must_have_state :initialised
|
|
|
|
simple.wont_have_state :filled_out
|
|
|
|
simple.fill_out
|
|
|
|
simple.must_have_state :filled_out
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works for multiple state machines" do
|
|
|
|
multiple.must_have_state :standing, on: :move
|
|
|
|
multiple.wont_have_state :walking, on: :move
|
|
|
|
multiple.walk
|
|
|
|
multiple.must_have_state :walking, on: :move
|
|
|
|
|
|
|
|
multiple.must_have_state :sleeping, on: :work
|
|
|
|
multiple.wont_have_state :processing, on: :work
|
|
|
|
multiple.start
|
|
|
|
multiple.must_have_state :processing, on: :work
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "allow_event" do
|
|
|
|
it "works for simple state machines" do
|
|
|
|
simple.must_allow_event :fill_out
|
|
|
|
simple.wont_allow_event :authorise
|
|
|
|
simple.fill_out
|
|
|
|
simple.must_allow_event :authorise
|
|
|
|
end
|
|
|
|
|
|
|
|
it "works for multiple state machines" do
|
|
|
|
multiple.must_allow_event :walk, on: :move
|
|
|
|
multiple.wont_allow_event :hold, on: :move
|
|
|
|
multiple.walk
|
|
|
|
multiple.must_allow_event :hold, on: :move
|
|
|
|
|
|
|
|
multiple.must_allow_event :start, on: :work
|
|
|
|
multiple.wont_allow_event :stop, on: :work
|
|
|
|
multiple.start
|
|
|
|
multiple.must_allow_event :stop, on: :work
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|