handle InvalidTransition in transition_from matcher
This properly returns false vs raising an AASM::InvalidTransition error when running specs.
This commit is contained in:
parent
31a3d83411
commit
bf9ea19080
|
@ -2,7 +2,11 @@ RSpec::Matchers.define :transition_from do |from_state|
|
||||||
match do |obj|
|
match do |obj|
|
||||||
@state_machine_name ||= :default
|
@state_machine_name ||= :default
|
||||||
obj.aasm(@state_machine_name).current_state = from_state.to_sym
|
obj.aasm(@state_machine_name).current_state = from_state.to_sym
|
||||||
|
begin
|
||||||
obj.send(@event, *@args) && obj.aasm(@state_machine_name).current_state == @to_state.to_sym
|
obj.send(@event, *@args) && obj.aasm(@state_machine_name).current_state == @to_state.to_sym
|
||||||
|
rescue AASM::InvalidTransition
|
||||||
|
false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
chain :on do |state_machine_name|
|
chain :on do |state_machine_name|
|
||||||
|
|
|
@ -8,14 +8,17 @@ describe 'state machine' do
|
||||||
it "works for simple state machines" do
|
it "works for simple state machines" do
|
||||||
expect(simple).to transition_from(:initialised).to(:filled_out).on_event(:fill_out)
|
expect(simple).to transition_from(:initialised).to(:filled_out).on_event(:fill_out)
|
||||||
expect(simple).to_not transition_from(:initialised).to(:authorised).on_event(:fill_out)
|
expect(simple).to_not transition_from(:initialised).to(:authorised).on_event(:fill_out)
|
||||||
|
expect(simple).to_not transition_from(:authorised).to(:filled_out).on_event(:fill_out)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "works for multiple state machines" do
|
it "works for multiple state machines" do
|
||||||
expect(multiple).to transition_from(:standing).to(:walking).on_event(:walk).on(:move)
|
expect(multiple).to transition_from(:standing).to(:walking).on_event(:walk).on(:move)
|
||||||
expect(multiple).to_not transition_from(:standing).to(:running).on_event(:walk).on(:move)
|
expect(multiple).to_not transition_from(:standing).to(:running).on_event(:walk).on(:move)
|
||||||
|
expect(multiple).to_not transition_from(:running).to(:walking).on_event(:walk).on(:move)
|
||||||
|
|
||||||
expect(multiple).to transition_from(:sleeping).to(:processing).on_event(:start).on(:work)
|
expect(multiple).to transition_from(:sleeping).to(:processing).on_event(:start).on(:work)
|
||||||
expect(multiple).to_not transition_from(:sleeping).to(:sleeping).on_event(:start).on(:work)
|
expect(multiple).to_not transition_from(:sleeping).to(:sleeping).on_event(:start).on(:work)
|
||||||
|
expect(multiple).to_not transition_from(:processing).to(:sleeping).on_event(:start).on(:work)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue