aasm 5.0.0 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +243 -118
- data/lib/aasm/aasm.rb +29 -27
- data/lib/aasm/base.rb +61 -11
- data/lib/aasm/configuration.rb +3 -0
- data/lib/aasm/core/event.rb +21 -9
- data/lib/aasm/core/invokers/class_invoker.rb +1 -1
- data/lib/aasm/core/invokers/literal_invoker.rb +3 -1
- data/lib/aasm/core/state.rb +6 -5
- data/lib/aasm/core/transition.rb +1 -1
- data/lib/aasm/dsl_helper.rb +24 -22
- data/lib/aasm/errors.rb +3 -1
- data/lib/aasm/instance_base.rb +28 -5
- data/lib/aasm/localizer.rb +13 -3
- data/lib/aasm/persistence/active_record_persistence.rb +25 -5
- data/lib/aasm/persistence/base.rb +14 -3
- data/lib/aasm/persistence/core_data_query_persistence.rb +2 -1
- data/lib/aasm/persistence/dynamoid_persistence.rb +1 -1
- data/lib/aasm/persistence/mongoid_persistence.rb +1 -1
- data/lib/aasm/persistence/no_brainer_persistence.rb +1 -1
- data/lib/aasm/persistence/orm.rb +23 -19
- data/lib/aasm/persistence/redis_persistence.rb +1 -1
- data/lib/aasm/rspec/transition_from.rb +5 -1
- data/lib/aasm/version.rb +1 -1
- data/lib/aasm.rb +0 -2
- data/lib/generators/aasm/orm_helpers.rb +7 -1
- data/lib/generators/active_record/aasm_generator.rb +3 -1
- data/lib/generators/active_record/templates/migration.rb +1 -1
- metadata +35 -385
- data/.document +0 -6
- data/.gitignore +0 -20
- data/.travis.yml +0 -54
- data/API +0 -34
- data/Appraisals +0 -66
- data/CHANGELOG.md +0 -377
- data/CODE_OF_CONDUCT.md +0 -13
- data/CONTRIBUTING.md +0 -24
- data/Dockerfile +0 -44
- data/Gemfile +0 -6
- data/Gemfile.lock_old +0 -151
- data/HOWTO +0 -12
- data/PLANNED_CHANGES.md +0 -11
- data/README_FROM_VERSION_3_TO_4.md +0 -240
- data/Rakefile +0 -31
- data/TESTING.md +0 -25
- data/aasm.gemspec +0 -35
- data/callbacks.txt +0 -51
- data/docker-compose.yml +0 -40
- data/gemfiles/rails_3.2.gemfile +0 -13
- data/gemfiles/rails_4.0.gemfile +0 -15
- data/gemfiles/rails_4.2.gemfile +0 -16
- data/gemfiles/rails_4.2_mongoid_5.gemfile +0 -11
- data/gemfiles/rails_4.2_nobrainer.gemfile +0 -9
- data/gemfiles/rails_5.0.gemfile +0 -13
- data/gemfiles/rails_5.0_nobrainer.gemfile +0 -9
- data/gemfiles/rails_5.1.gemfile +0 -13
- data/spec/database.rb +0 -44
- data/spec/database.yml +0 -3
- data/spec/en.yml +0 -12
- data/spec/en_deprecated_style.yml +0 -10
- data/spec/generators/active_record_generator_spec.rb +0 -47
- data/spec/generators/mongoid_generator_spec.rb +0 -31
- data/spec/generators/no_brainer_generator_spec.rb +0 -29
- data/spec/models/active_record/basic_active_record_two_state_machines_example.rb +0 -25
- data/spec/models/active_record/complex_active_record_example.rb +0 -37
- data/spec/models/active_record/derivate_new_dsl.rb +0 -7
- data/spec/models/active_record/false_state.rb +0 -35
- data/spec/models/active_record/gate.rb +0 -39
- data/spec/models/active_record/invalid_persistor.rb +0 -29
- data/spec/models/active_record/localizer_test_model.rb +0 -34
- data/spec/models/active_record/no_direct_assignment.rb +0 -21
- data/spec/models/active_record/no_scope.rb +0 -21
- data/spec/models/active_record/persisted_state.rb +0 -12
- data/spec/models/active_record/provided_and_persisted_state.rb +0 -24
- data/spec/models/active_record/reader.rb +0 -7
- data/spec/models/active_record/readme_job.rb +0 -21
- data/spec/models/active_record/silent_persistor.rb +0 -29
- data/spec/models/active_record/simple_new_dsl.rb +0 -17
- data/spec/models/active_record/thief.rb +0 -29
- data/spec/models/active_record/transactor.rb +0 -124
- data/spec/models/active_record/transient.rb +0 -6
- data/spec/models/active_record/validator.rb +0 -118
- data/spec/models/active_record/with_enum.rb +0 -39
- data/spec/models/active_record/with_enum_without_column.rb +0 -38
- data/spec/models/active_record/with_false_enum.rb +0 -31
- data/spec/models/active_record/with_true_enum.rb +0 -39
- data/spec/models/active_record/worker.rb +0 -2
- data/spec/models/active_record/writer.rb +0 -6
- data/spec/models/basic_two_state_machines_example.rb +0 -25
- data/spec/models/callbacks/basic.rb +0 -98
- data/spec/models/callbacks/basic_multiple.rb +0 -75
- data/spec/models/callbacks/guard_within_block.rb +0 -67
- data/spec/models/callbacks/guard_within_block_multiple.rb +0 -66
- data/spec/models/callbacks/multiple_transitions_transition_guard.rb +0 -66
- data/spec/models/callbacks/multiple_transitions_transition_guard_multiple.rb +0 -65
- data/spec/models/callbacks/private_method.rb +0 -44
- data/spec/models/callbacks/private_method_multiple.rb +0 -44
- data/spec/models/callbacks/with_args.rb +0 -62
- data/spec/models/callbacks/with_args_multiple.rb +0 -61
- data/spec/models/callbacks/with_state_arg.rb +0 -30
- data/spec/models/callbacks/with_state_arg_multiple.rb +0 -26
- data/spec/models/complex_example.rb +0 -222
- data/spec/models/conversation.rb +0 -93
- data/spec/models/default_state.rb +0 -12
- data/spec/models/double_definer.rb +0 -21
- data/spec/models/dynamoid/complex_dynamoid_example.rb +0 -37
- data/spec/models/dynamoid/dynamoid_multiple.rb +0 -18
- data/spec/models/dynamoid/dynamoid_simple.rb +0 -18
- data/spec/models/foo.rb +0 -106
- data/spec/models/foo_callback_multiple.rb +0 -45
- data/spec/models/guard_arguments_check.rb +0 -17
- data/spec/models/guard_with_params.rb +0 -24
- data/spec/models/guard_with_params_multiple.rb +0 -18
- data/spec/models/guardian.rb +0 -58
- data/spec/models/guardian_multiple.rb +0 -48
- data/spec/models/guardian_without_from_specified.rb +0 -18
- data/spec/models/initial_state_proc.rb +0 -31
- data/spec/models/mongoid/complex_mongoid_example.rb +0 -37
- data/spec/models/mongoid/invalid_persistor_mongoid.rb +0 -39
- data/spec/models/mongoid/mongoid_relationships.rb +0 -26
- data/spec/models/mongoid/no_scope_mongoid.rb +0 -21
- data/spec/models/mongoid/silent_persistor_mongoid.rb +0 -39
- data/spec/models/mongoid/simple_mongoid.rb +0 -23
- data/spec/models/mongoid/simple_new_dsl_mongoid.rb +0 -25
- data/spec/models/mongoid/validator_mongoid.rb +0 -100
- data/spec/models/multi_transitioner.rb +0 -34
- data/spec/models/multiple_transitions_that_differ_only_by_guard.rb +0 -31
- data/spec/models/namespaced_multiple_example.rb +0 -42
- data/spec/models/no_initial_state.rb +0 -25
- data/spec/models/nobrainer/complex_no_brainer_example.rb +0 -36
- data/spec/models/nobrainer/invalid_persistor_no_brainer.rb +0 -39
- data/spec/models/nobrainer/no_scope_no_brainer.rb +0 -21
- data/spec/models/nobrainer/nobrainer_relationships.rb +0 -25
- data/spec/models/nobrainer/silent_persistor_no_brainer.rb +0 -39
- data/spec/models/nobrainer/simple_new_dsl_nobrainer.rb +0 -25
- data/spec/models/nobrainer/simple_no_brainer.rb +0 -23
- data/spec/models/nobrainer/validator_no_brainer.rb +0 -98
- data/spec/models/not_auto_loaded/process.rb +0 -21
- data/spec/models/parametrised_event.rb +0 -42
- data/spec/models/parametrised_event_multiple.rb +0 -29
- data/spec/models/process_with_new_dsl.rb +0 -31
- data/spec/models/provided_state.rb +0 -24
- data/spec/models/redis/complex_redis_example.rb +0 -40
- data/spec/models/redis/redis_multiple.rb +0 -20
- data/spec/models/redis/redis_simple.rb +0 -20
- data/spec/models/sequel/complex_sequel_example.rb +0 -46
- data/spec/models/sequel/invalid_persistor.rb +0 -52
- data/spec/models/sequel/sequel_multiple.rb +0 -25
- data/spec/models/sequel/sequel_simple.rb +0 -26
- data/spec/models/sequel/silent_persistor.rb +0 -50
- data/spec/models/sequel/transactor.rb +0 -112
- data/spec/models/sequel/validator.rb +0 -93
- data/spec/models/sequel/worker.rb +0 -12
- data/spec/models/silencer.rb +0 -27
- data/spec/models/simple_custom_example.rb +0 -53
- data/spec/models/simple_example.rb +0 -17
- data/spec/models/simple_example_with_guard_args.rb +0 -17
- data/spec/models/simple_multiple_example.rb +0 -42
- data/spec/models/state_machine_with_failed_event.rb +0 -20
- data/spec/models/states_on_one_line_example.rb +0 -8
- data/spec/models/sub_class.rb +0 -41
- data/spec/models/sub_class_with_more_states.rb +0 -18
- data/spec/models/sub_classing.rb +0 -3
- data/spec/models/super_class.rb +0 -46
- data/spec/models/this_name_better_not_be_in_use.rb +0 -11
- data/spec/models/valid_state_name.rb +0 -23
- data/spec/spec_helper.rb +0 -26
- data/spec/spec_helpers/active_record.rb +0 -8
- data/spec/spec_helpers/dynamoid.rb +0 -35
- data/spec/spec_helpers/mongoid.rb +0 -26
- data/spec/spec_helpers/nobrainer.rb +0 -15
- data/spec/spec_helpers/redis.rb +0 -18
- data/spec/spec_helpers/remove_warnings.rb +0 -1
- data/spec/spec_helpers/sequel.rb +0 -7
- data/spec/unit/api_spec.rb +0 -100
- data/spec/unit/basic_two_state_machines_example_spec.rb +0 -10
- data/spec/unit/callback_multiple_spec.rb +0 -300
- data/spec/unit/callbacks_spec.rb +0 -491
- data/spec/unit/complex_example_spec.rb +0 -94
- data/spec/unit/complex_multiple_example_spec.rb +0 -115
- data/spec/unit/edge_cases_spec.rb +0 -16
- data/spec/unit/event_multiple_spec.rb +0 -73
- data/spec/unit/event_naming_spec.rb +0 -16
- data/spec/unit/event_spec.rb +0 -381
- data/spec/unit/exception_spec.rb +0 -11
- data/spec/unit/guard_arguments_check_spec.rb +0 -9
- data/spec/unit/guard_multiple_spec.rb +0 -60
- data/spec/unit/guard_spec.rb +0 -89
- data/spec/unit/guard_with_params_multiple_spec.rb +0 -10
- data/spec/unit/guard_with_params_spec.rb +0 -14
- data/spec/unit/guard_without_from_specified_spec.rb +0 -10
- data/spec/unit/initial_state_multiple_spec.rb +0 -15
- data/spec/unit/initial_state_spec.rb +0 -12
- data/spec/unit/inspection_multiple_spec.rb +0 -201
- data/spec/unit/inspection_spec.rb +0 -149
- data/spec/unit/invoker_spec.rb +0 -189
- data/spec/unit/invokers/base_invoker_spec.rb +0 -72
- data/spec/unit/invokers/class_invoker_spec.rb +0 -95
- data/spec/unit/invokers/literal_invoker_spec.rb +0 -86
- data/spec/unit/invokers/proc_invoker_spec.rb +0 -86
- data/spec/unit/localizer_spec.rb +0 -78
- data/spec/unit/memory_leak_spec.rb +0 -38
- data/spec/unit/multiple_transitions_that_differ_only_by_guard_spec.rb +0 -14
- data/spec/unit/namespaced_multiple_example_spec.rb +0 -75
- data/spec/unit/new_dsl_spec.rb +0 -12
- data/spec/unit/override_warning_spec.rb +0 -94
- data/spec/unit/persistence/active_record_persistence_multiple_spec.rb +0 -618
- data/spec/unit/persistence/active_record_persistence_spec.rb +0 -735
- data/spec/unit/persistence/dynamoid_persistence_multiple_spec.rb +0 -135
- data/spec/unit/persistence/dynamoid_persistence_spec.rb +0 -84
- data/spec/unit/persistence/mongoid_persistence_multiple_spec.rb +0 -200
- data/spec/unit/persistence/mongoid_persistence_spec.rb +0 -165
- data/spec/unit/persistence/no_brainer_persistence_multiple_spec.rb +0 -198
- data/spec/unit/persistence/no_brainer_persistence_spec.rb +0 -158
- data/spec/unit/persistence/redis_persistence_multiple_spec.rb +0 -88
- data/spec/unit/persistence/redis_persistence_spec.rb +0 -53
- data/spec/unit/persistence/sequel_persistence_multiple_spec.rb +0 -148
- data/spec/unit/persistence/sequel_persistence_spec.rb +0 -368
- data/spec/unit/readme_spec.rb +0 -41
- data/spec/unit/reloading_spec.rb +0 -15
- data/spec/unit/rspec_matcher_spec.rb +0 -85
- data/spec/unit/simple_custom_example_spec.rb +0 -39
- data/spec/unit/simple_example_spec.rb +0 -42
- data/spec/unit/simple_multiple_example_spec.rb +0 -91
- data/spec/unit/state_spec.rb +0 -89
- data/spec/unit/states_on_one_line_example_spec.rb +0 -16
- data/spec/unit/subclassing_multiple_spec.rb +0 -74
- data/spec/unit/subclassing_spec.rb +0 -46
- data/spec/unit/transition_spec.rb +0 -436
- data/test/minitest_helper.rb +0 -57
- data/test/unit/minitest_matcher_test.rb +0 -80
data/spec/unit/callbacks_spec.rb
DELETED
@@ -1,491 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
Dir[File.dirname(__FILE__) + "/../models/callbacks/*.rb"].sort.each { |f| require File.expand_path(f) }
|
3
|
-
|
4
|
-
shared_examples 'an implemented callback that accepts error' do
|
5
|
-
context 'with callback defined' do
|
6
|
-
it "should run error_callback if an exception is raised and always return false" do
|
7
|
-
aasm_model.class.send(:define_method, callback_name) do |e|
|
8
|
-
@data = [e]
|
9
|
-
end
|
10
|
-
|
11
|
-
allow(aasm_model).to receive(:before_enter).and_raise(e = StandardError.new)
|
12
|
-
|
13
|
-
expect(aasm_model.safe_close!).to be false
|
14
|
-
expect(aasm_model.data).to eql [e]
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should run error_callback without parameters if callback does not support any" do
|
18
|
-
aasm_model.class.send(:define_method, callback_name) do |e|
|
19
|
-
@data = []
|
20
|
-
end
|
21
|
-
|
22
|
-
allow(aasm_model).to receive(:before_enter).and_raise(e = StandardError.new)
|
23
|
-
|
24
|
-
aasm_model.safe_close!('arg1', 'arg2')
|
25
|
-
expect(aasm_model.data).to eql []
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should run error_callback with parameters if callback supports them" do
|
29
|
-
aasm_model.class.send(:define_method, callback_name) do |e, arg1, arg2|
|
30
|
-
@data = [arg1, arg2]
|
31
|
-
end
|
32
|
-
|
33
|
-
allow(aasm_model).to receive(:before_enter).and_raise(e = StandardError.new)
|
34
|
-
|
35
|
-
aasm_model.safe_close!('arg1', 'arg2')
|
36
|
-
expect(aasm_model.data).to eql ['arg1', 'arg2']
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
shared_examples 'an implemented callback' do
|
42
|
-
context 'with callback defined' do
|
43
|
-
it 'should run callback without parameters if callback does not support any' do
|
44
|
-
aasm_model.class.send(:define_method, callback_name) do
|
45
|
-
@data = ['callback-was-called']
|
46
|
-
end
|
47
|
-
|
48
|
-
aasm_model.safe_close!
|
49
|
-
expect(aasm_model.data).to eql ['callback-was-called']
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'should run callback with parameters if callback supports them' do
|
53
|
-
aasm_model.class.send(:define_method, callback_name) do |arg1, arg2|
|
54
|
-
@data = [arg1, arg2]
|
55
|
-
end
|
56
|
-
|
57
|
-
aasm_model.safe_close!('arg1', 'arg2')
|
58
|
-
expect(aasm_model.data).to eql ['arg1', 'arg2']
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe 'callbacks for the new DSL' do
|
64
|
-
|
65
|
-
it "be called in order" do
|
66
|
-
show_debug_log = false
|
67
|
-
|
68
|
-
callback = Callbacks::Basic.new(:log => show_debug_log)
|
69
|
-
callback.aasm.current_state
|
70
|
-
|
71
|
-
unless show_debug_log
|
72
|
-
expect(callback).to receive(:before_all_events).once.ordered
|
73
|
-
expect(callback).to receive(:before_event).once.ordered
|
74
|
-
expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
75
|
-
expect(callback).to receive(:transition_guard).once.ordered.and_return(true)
|
76
|
-
expect(callback).to receive(:before_exit_open).once.ordered # these should be before the state changes
|
77
|
-
expect(callback).to receive(:exit_open).once.ordered
|
78
|
-
# expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
79
|
-
# expect(callback).to receive(:transition_guard).once.ordered.and_return(true)
|
80
|
-
expect(callback).to receive(:after_all_transitions).once.ordered
|
81
|
-
expect(callback).to receive(:after_transition).once.ordered
|
82
|
-
expect(callback).to receive(:before_enter_closed).once.ordered
|
83
|
-
expect(callback).to receive(:enter_closed).once.ordered
|
84
|
-
expect(callback).to receive(:aasm_write_state).once.ordered.and_return(true) # this is when the state changes
|
85
|
-
expect(callback).to receive(:after_exit_open).once.ordered # these should be after the state changes
|
86
|
-
expect(callback).to receive(:after_enter_closed).once.ordered
|
87
|
-
expect(callback).to receive(:after_event).once.ordered
|
88
|
-
expect(callback).to receive(:after_all_events).once.ordered
|
89
|
-
expect(callback).to receive(:ensure_event).once.ordered
|
90
|
-
expect(callback).to receive(:ensure_on_all_events).once.ordered
|
91
|
-
end
|
92
|
-
|
93
|
-
# puts "------- close!"
|
94
|
-
callback.close!
|
95
|
-
end
|
96
|
-
|
97
|
-
|
98
|
-
it "works fine after reload" do
|
99
|
-
show_debug_log = false
|
100
|
-
|
101
|
-
callback = Callbacks::Basic.new(:log => show_debug_log)
|
102
|
-
callback.aasm.current_state
|
103
|
-
|
104
|
-
# reload the class
|
105
|
-
Callbacks.send(:remove_const, :Basic)
|
106
|
-
load 'models/callbacks/basic.rb'
|
107
|
-
|
108
|
-
unless show_debug_log
|
109
|
-
expect(callback).to receive(:before_event).once.ordered
|
110
|
-
expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
111
|
-
expect(callback).to receive(:transition_guard).once.ordered.and_return(true)
|
112
|
-
expect(callback).to receive(:before_exit_open).once.ordered # these should be before the state changes
|
113
|
-
expect(callback).to receive(:exit_open).once.ordered
|
114
|
-
# expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
115
|
-
# expect(callback).to receive(:transition_guard).once.ordered.and_return(true)
|
116
|
-
expect(callback).to receive(:after_all_transitions).once.ordered
|
117
|
-
expect(callback).to receive(:after_transition).once.ordered
|
118
|
-
expect(callback).to receive(:before_enter_closed).once.ordered
|
119
|
-
expect(callback).to receive(:enter_closed).once.ordered
|
120
|
-
expect(callback).to receive(:aasm_write_state).once.ordered.and_return(true) # this is when the state changes
|
121
|
-
expect(callback).to receive(:event_before_success).once.ordered
|
122
|
-
expect(callback).to receive(:success_transition).once.ordered.and_return(true) # these should be after the state changes
|
123
|
-
expect(callback).to receive(:after_exit_open).once.ordered
|
124
|
-
expect(callback).to receive(:after_enter_closed).once.ordered
|
125
|
-
expect(callback).to receive(:after_event).once.ordered
|
126
|
-
end
|
127
|
-
|
128
|
-
# puts "------- close!"
|
129
|
-
callback.close!
|
130
|
-
end
|
131
|
-
|
132
|
-
it "does not run any state callback if the event guard fails" do
|
133
|
-
callback = Callbacks::Basic.new(:log => false)
|
134
|
-
callback.aasm.current_state
|
135
|
-
|
136
|
-
expect(callback).to receive(:before_all_events).once.ordered
|
137
|
-
expect(callback).to receive(:before_event).once.ordered
|
138
|
-
expect(callback).to receive(:event_guard).once.ordered.and_return(false)
|
139
|
-
expect(callback).to_not receive(:transition_guard)
|
140
|
-
expect(callback).to_not receive(:before_exit_open)
|
141
|
-
expect(callback).to_not receive(:exit_open)
|
142
|
-
expect(callback).to_not receive(:after_all_transitions)
|
143
|
-
expect(callback).to_not receive(:after_transition)
|
144
|
-
expect(callback).to_not receive(:before_enter_closed)
|
145
|
-
expect(callback).to_not receive(:enter_closed)
|
146
|
-
expect(callback).to_not receive(:aasm_write_state)
|
147
|
-
expect(callback).to_not receive(:event_before_success)
|
148
|
-
expect(callback).to_not receive(:success_transition)
|
149
|
-
expect(callback).to_not receive(:after_exit_open)
|
150
|
-
expect(callback).to_not receive(:after_enter_closed)
|
151
|
-
expect(callback).to_not receive(:after_event)
|
152
|
-
expect(callback).to_not receive(:after_all_events)
|
153
|
-
expect(callback).to receive(:ensure_event).once.ordered
|
154
|
-
expect(callback).to receive(:ensure_on_all_events).once.ordered
|
155
|
-
|
156
|
-
expect {
|
157
|
-
callback.close!
|
158
|
-
}.to raise_error(AASM::InvalidTransition)
|
159
|
-
end
|
160
|
-
|
161
|
-
it "handles private callback methods as well" do
|
162
|
-
show_debug_log = false
|
163
|
-
|
164
|
-
callback = Callbacks::PrivateMethod.new(:log => show_debug_log)
|
165
|
-
callback.aasm.current_state
|
166
|
-
|
167
|
-
# puts "------- close!"
|
168
|
-
expect {
|
169
|
-
callback.close!
|
170
|
-
}.to_not raise_error
|
171
|
-
end
|
172
|
-
|
173
|
-
context "if the transition guard fails" do
|
174
|
-
it "does not run any state callback if guard is defined inline" do
|
175
|
-
show_debug_log = false
|
176
|
-
callback = Callbacks::Basic.new(:log => show_debug_log, :fail_transition_guard => true)
|
177
|
-
callback.aasm.current_state
|
178
|
-
|
179
|
-
unless show_debug_log
|
180
|
-
expect(callback).to receive(:before_all_events).once.ordered
|
181
|
-
expect(callback).to receive(:before_event).once.ordered
|
182
|
-
expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
183
|
-
expect(callback).to receive(:transition_guard).once.ordered.and_return(false)
|
184
|
-
expect(callback).to_not receive(:before_exit_open)
|
185
|
-
expect(callback).to_not receive(:exit_open)
|
186
|
-
expect(callback).to_not receive(:after_all_transitions)
|
187
|
-
expect(callback).to_not receive(:after_transition)
|
188
|
-
expect(callback).to_not receive(:before_enter_closed)
|
189
|
-
expect(callback).to_not receive(:enter_closed)
|
190
|
-
expect(callback).to_not receive(:aasm_write_state)
|
191
|
-
expect(callback).to_not receive(:event_before_success)
|
192
|
-
expect(callback).to_not receive(:success_transition)
|
193
|
-
expect(callback).to_not receive(:after_exit_open)
|
194
|
-
expect(callback).to_not receive(:after_enter_closed)
|
195
|
-
expect(callback).to_not receive(:after_event)
|
196
|
-
expect(callback).to_not receive(:after_all_events)
|
197
|
-
expect(callback).to receive(:ensure_event).once.ordered
|
198
|
-
expect(callback).to receive(:ensure_on_all_events).once.ordered
|
199
|
-
end
|
200
|
-
|
201
|
-
expect {
|
202
|
-
callback.close!
|
203
|
-
}.to raise_error(AASM::InvalidTransition)
|
204
|
-
end
|
205
|
-
|
206
|
-
it "does not run transition_guard twice for multiple permitted transitions" do
|
207
|
-
show_debug_log = false
|
208
|
-
callback = Callbacks::MultipleTransitionsTransitionGuard.new(:log => show_debug_log, :fail_transition_guard => true)
|
209
|
-
callback.aasm.current_state
|
210
|
-
|
211
|
-
unless show_debug_log
|
212
|
-
expect(callback).to receive(:before).once.ordered
|
213
|
-
expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
214
|
-
expect(callback).to receive(:transition_guard).once.ordered.and_return(false)
|
215
|
-
expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
216
|
-
expect(callback).to receive(:before_exit_open).once.ordered
|
217
|
-
expect(callback).to receive(:exit_open).once.ordered
|
218
|
-
expect(callback).to receive(:aasm_write_state).once.ordered.and_return(true) # this is when the state changes
|
219
|
-
expect(callback).to receive(:after_exit_open).once.ordered
|
220
|
-
expect(callback).to receive(:after).once.ordered
|
221
|
-
|
222
|
-
expect(callback).to_not receive(:transitioning)
|
223
|
-
expect(callback).to_not receive(:event_before_success)
|
224
|
-
expect(callback).to_not receive(:success_transition)
|
225
|
-
expect(callback).to_not receive(:before_enter_closed)
|
226
|
-
expect(callback).to_not receive(:enter_closed)
|
227
|
-
expect(callback).to_not receive(:after_enter_closed)
|
228
|
-
end
|
229
|
-
|
230
|
-
callback.close!
|
231
|
-
expect(callback.aasm.current_state).to eql :failed
|
232
|
-
end
|
233
|
-
|
234
|
-
it "does not run any state callback if guard is defined with block" do
|
235
|
-
callback = Callbacks::GuardWithinBlock.new #(:log => true, :fail_transition_guard => true)
|
236
|
-
callback.aasm.current_state
|
237
|
-
|
238
|
-
expect(callback).to receive(:before).once.ordered
|
239
|
-
expect(callback).to receive(:event_guard).once.ordered.and_return(true)
|
240
|
-
expect(callback).to receive(:transition_guard).once.ordered.and_return(false)
|
241
|
-
expect(callback).to_not receive(:before_exit_open)
|
242
|
-
expect(callback).to_not receive(:exit_open)
|
243
|
-
expect(callback).to_not receive(:transitioning)
|
244
|
-
expect(callback).to_not receive(:before_enter_closed)
|
245
|
-
expect(callback).to_not receive(:enter_closed)
|
246
|
-
expect(callback).to_not receive(:aasm_write_state)
|
247
|
-
expect(callback).to_not receive(:event_before_success)
|
248
|
-
expect(callback).to_not receive(:success_transition)
|
249
|
-
expect(callback).to_not receive(:after_exit_open)
|
250
|
-
expect(callback).to_not receive(:after_enter_closed)
|
251
|
-
expect(callback).to_not receive(:after)
|
252
|
-
|
253
|
-
expect {
|
254
|
-
callback.close!
|
255
|
-
}.to raise_error(AASM::InvalidTransition)
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
it "should properly pass arguments" do
|
260
|
-
cb = Callbacks::WithArgs.new(:log => false)
|
261
|
-
cb.aasm.current_state
|
262
|
-
|
263
|
-
cb.reset_data
|
264
|
-
cb.close!(:arg1, :arg2)
|
265
|
-
expect(cb.data).to eql 'before(:arg1,:arg2) before_exit_open(:arg1,:arg2) transition_proc(:arg1,:arg2) before_enter_closed(:arg1,:arg2) aasm_write_state transition_success(:arg1,:arg2) after_exit_open(:arg1,:arg2) after_enter_closed(:arg1,:arg2) after(:arg1,:arg2)'
|
266
|
-
end
|
267
|
-
|
268
|
-
it "should call the callbacks given the to-state as argument" do
|
269
|
-
cb = Callbacks::WithStateArg.new
|
270
|
-
expect(cb).to receive(:before_method).with(:arg1).once.ordered
|
271
|
-
expect(cb).to receive(:transition_method).never
|
272
|
-
expect(cb).to receive(:success_method).never
|
273
|
-
expect(cb).to receive(:transition_method2).with(:arg1).once.ordered
|
274
|
-
expect(cb).to receive(:success_method2).with(:arg1).once.ordered
|
275
|
-
expect(cb).to receive(:after_method).with(:arg1).once.ordered
|
276
|
-
cb.close!(:out_to_lunch, :arg1)
|
277
|
-
|
278
|
-
cb = Callbacks::WithStateArg.new
|
279
|
-
some_object = double('some object')
|
280
|
-
expect(cb).to receive(:before_method).with(some_object).once.ordered
|
281
|
-
expect(cb).to receive(:transition_method2).with(some_object).once.ordered
|
282
|
-
expect(cb).to receive(:success_method2).with(some_object).once.ordered
|
283
|
-
expect(cb).to receive(:after_method).with(some_object).once.ordered
|
284
|
-
cb.close!(:out_to_lunch, some_object)
|
285
|
-
end
|
286
|
-
|
287
|
-
it "should call the proper methods just with arguments" do
|
288
|
-
cb = Callbacks::WithStateArg.new
|
289
|
-
expect(cb).to receive(:before_method).with(:arg1).once.ordered
|
290
|
-
expect(cb).to receive(:transition_method).with(:arg1).once.ordered
|
291
|
-
expect(cb).to receive(:transition_method).never
|
292
|
-
expect(cb).to receive(:success_method).with(:arg1).once.ordered
|
293
|
-
expect(cb).to receive(:success_method).never
|
294
|
-
expect(cb).to receive(:after_method).with(:arg1).once.ordered
|
295
|
-
cb.close!(:arg1)
|
296
|
-
|
297
|
-
cb = Callbacks::WithStateArg.new
|
298
|
-
some_object = double('some object')
|
299
|
-
expect(cb).to receive(:before_method).with(some_object).once.ordered
|
300
|
-
expect(cb).to receive(:transition_method).with(some_object).once.ordered
|
301
|
-
expect(cb).to receive(:transition_method).never
|
302
|
-
expect(cb).to receive(:success_method).with(some_object).once.ordered
|
303
|
-
expect(cb).to receive(:success_method).never
|
304
|
-
expect(cb).to receive(:after_method).with(some_object).once.ordered
|
305
|
-
cb.close!(some_object)
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
describe 'event callbacks' do
|
310
|
-
describe "with an error callback defined" do
|
311
|
-
before do
|
312
|
-
class Foo
|
313
|
-
# this hack is needed to allow testing of parameters, since RSpec
|
314
|
-
# destroys a method's arity when mocked
|
315
|
-
attr_accessor :data
|
316
|
-
|
317
|
-
aasm do
|
318
|
-
event :safe_close, :success => :success_callback, :error => :error_callback do
|
319
|
-
transitions :to => :closed, :from => [:open], :success => :transition_success_callback
|
320
|
-
end
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
@foo = Foo.new
|
325
|
-
end
|
326
|
-
|
327
|
-
it_behaves_like 'an implemented callback that accepts error' do
|
328
|
-
let(:aasm_model) { @foo }
|
329
|
-
let(:callback_name) { :error_callback }
|
330
|
-
end
|
331
|
-
|
332
|
-
it "should raise NoMethodError if exception is raised and error_callback is declared but not defined" do
|
333
|
-
allow(@foo).to receive(:before_enter).and_raise(StandardError)
|
334
|
-
expect{@foo.safe_close!}.to raise_error(NoMethodError)
|
335
|
-
end
|
336
|
-
|
337
|
-
it "should propagate an error if no error callback is declared" do
|
338
|
-
allow(@foo).to receive(:before_enter).and_raise("Cannot enter safe")
|
339
|
-
expect{@foo.close!}.to raise_error(StandardError, "Cannot enter safe")
|
340
|
-
end
|
341
|
-
end
|
342
|
-
|
343
|
-
describe 'with an ensure callback defined' do
|
344
|
-
before do
|
345
|
-
class Foo
|
346
|
-
# this hack is needed to allow testing of parameters, since RSpec
|
347
|
-
# destroys a method's arity when mocked
|
348
|
-
attr_accessor :data
|
349
|
-
|
350
|
-
aasm do
|
351
|
-
event :safe_close, :success => :success_callback, :ensure => :ensure_callback do
|
352
|
-
transitions :to => :closed, :from => [:open]
|
353
|
-
end
|
354
|
-
end
|
355
|
-
end
|
356
|
-
|
357
|
-
@foo = Foo.new
|
358
|
-
end
|
359
|
-
|
360
|
-
it_behaves_like 'an implemented callback' do
|
361
|
-
let(:aasm_model) { @foo }
|
362
|
-
let(:callback_name) { :ensure_callback }
|
363
|
-
end
|
364
|
-
|
365
|
-
it "should raise NoMethodError if ensure_callback is declared but not defined" do
|
366
|
-
expect{@foo.safe_close!}.to raise_error(NoMethodError)
|
367
|
-
end
|
368
|
-
|
369
|
-
it "should not raise any error if no ensure_callback is declared" do
|
370
|
-
expect{@foo.close!}.to_not raise_error
|
371
|
-
end
|
372
|
-
end
|
373
|
-
|
374
|
-
describe "with aasm_event_fired defined" do
|
375
|
-
before do
|
376
|
-
@foo = Foo.new
|
377
|
-
def @foo.aasm_event_fired(event, from, to); end
|
378
|
-
end
|
379
|
-
|
380
|
-
it 'should call it for successful bang fire' do
|
381
|
-
expect(@foo).to receive(:aasm_event_fired).with(:close, :open, :closed)
|
382
|
-
@foo.close!
|
383
|
-
end
|
384
|
-
|
385
|
-
it 'should call it for successful non-bang fire' do
|
386
|
-
expect(@foo).to receive(:aasm_event_fired)
|
387
|
-
@foo.close
|
388
|
-
end
|
389
|
-
|
390
|
-
it 'should not call it for failing bang fire' do
|
391
|
-
allow(@foo.aasm).to receive(:set_current_state_with_persistence).and_return(false)
|
392
|
-
expect(@foo).not_to receive(:aasm_event_fired)
|
393
|
-
@foo.close!
|
394
|
-
end
|
395
|
-
end
|
396
|
-
|
397
|
-
describe "with aasm_event_failed defined" do
|
398
|
-
before do
|
399
|
-
@foo = Foo.new
|
400
|
-
def @foo.aasm_event_failed(event, from); end
|
401
|
-
end
|
402
|
-
|
403
|
-
it 'should call it when transition failed for bang fire' do
|
404
|
-
expect(@foo).to receive(:aasm_event_failed).with(:null, :open)
|
405
|
-
expect {@foo.null!}.to raise_error(AASM::InvalidTransition)
|
406
|
-
end
|
407
|
-
|
408
|
-
it 'should call it when transition failed for non-bang fire' do
|
409
|
-
expect(@foo).to receive(:aasm_event_failed).with(:null, :open)
|
410
|
-
expect {@foo.null}.to raise_error(AASM::InvalidTransition)
|
411
|
-
end
|
412
|
-
|
413
|
-
it 'should not call it if persist fails for bang fire' do
|
414
|
-
allow(@foo.aasm).to receive(:set_current_state_with_persistence).and_return(false)
|
415
|
-
expect(@foo).to receive(:aasm_event_failed)
|
416
|
-
@foo.close!
|
417
|
-
end
|
418
|
-
end
|
419
|
-
end
|
420
|
-
|
421
|
-
describe 'global error_on_all_events_callback callbacks' do
|
422
|
-
describe "with an error_on_all_events" do
|
423
|
-
before do
|
424
|
-
class FooGlobal
|
425
|
-
# this hack is needed to allow testing of parameters, since RSpec
|
426
|
-
# destroys a method's arity when mocked
|
427
|
-
attr_accessor :data
|
428
|
-
|
429
|
-
aasm do
|
430
|
-
error_on_all_events :error_on_all_events_callback
|
431
|
-
|
432
|
-
event :safe_close do
|
433
|
-
transitions :to => :closed, :from => [:open]
|
434
|
-
end
|
435
|
-
end
|
436
|
-
end
|
437
|
-
|
438
|
-
@foo = FooGlobal.new
|
439
|
-
end
|
440
|
-
|
441
|
-
it_behaves_like 'an implemented callback that accepts error' do
|
442
|
-
let(:aasm_model) { @foo }
|
443
|
-
let(:callback_name) { :error_on_all_events_callback }
|
444
|
-
end
|
445
|
-
|
446
|
-
it "should raise NoMethodError if exception is raised and error_callback is declared but not defined" do
|
447
|
-
allow(@foo).to receive(:before_enter).and_raise(StandardError)
|
448
|
-
expect{@foo.safe_close!}.to raise_error(NoMethodError)
|
449
|
-
end
|
450
|
-
|
451
|
-
it "should raise NoMethodError if no error callback is declared" do
|
452
|
-
allow(@foo).to receive(:before_enter).and_raise("Cannot enter safe")
|
453
|
-
expect{@foo.close!}.to raise_error(NoMethodError)
|
454
|
-
end
|
455
|
-
end
|
456
|
-
end
|
457
|
-
|
458
|
-
describe 'global ensure_on_all_events_callback callbacks' do
|
459
|
-
describe "with an ensure_on_all_events" do
|
460
|
-
before do
|
461
|
-
class FooGlobal
|
462
|
-
# this hack is needed to allow testing of parameters, since RSpec
|
463
|
-
# destroys a method's arity when mocked
|
464
|
-
attr_accessor :data
|
465
|
-
|
466
|
-
aasm do
|
467
|
-
ensure_on_all_events :ensure_on_all_events_callback
|
468
|
-
|
469
|
-
event :safe_close do
|
470
|
-
transitions :to => :closed, :from => [:open]
|
471
|
-
end
|
472
|
-
end
|
473
|
-
end
|
474
|
-
|
475
|
-
@foo = FooGlobal.new
|
476
|
-
end
|
477
|
-
|
478
|
-
it_behaves_like 'an implemented callback' do
|
479
|
-
let(:aasm_model) { @foo }
|
480
|
-
let(:callback_name) { :ensure_on_all_events_callback }
|
481
|
-
end
|
482
|
-
|
483
|
-
it "should raise NoMethodError if ensure_on_all_events callback is declared but not defined" do
|
484
|
-
expect{@foo.safe_close!}.to raise_error(NoMethodError)
|
485
|
-
end
|
486
|
-
|
487
|
-
it "should raise NoMethodError if no ensure_on_all_events callback is declared" do
|
488
|
-
expect{@foo.close!}.to raise_error(NoMethodError)
|
489
|
-
end
|
490
|
-
end
|
491
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'on initialization' do
|
4
|
-
let(:auth) {ComplexExample.new}
|
5
|
-
|
6
|
-
it 'should be in the pending state' do
|
7
|
-
expect(auth.aasm.current_state).to eq(:pending)
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'should have an activation code' do
|
11
|
-
expect(auth.has_activation_code?).to be_truthy
|
12
|
-
expect(auth.activation_code).not_to be_nil
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe 'when being unsuspended' do
|
17
|
-
let(:auth) {ComplexExample.new}
|
18
|
-
|
19
|
-
it 'should be able to be unsuspended' do
|
20
|
-
auth.activate!
|
21
|
-
auth.suspend!
|
22
|
-
expect(auth.may_unsuspend?).to be true
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'should not be able to be unsuspended into active' do
|
26
|
-
auth.suspend!
|
27
|
-
expect(auth.may_unsuspend?(:active)).not_to be true
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should be able to be unsuspended into active if polite' do
|
31
|
-
auth.suspend!
|
32
|
-
expect(auth.may_wait?(:waiting, :please)).to be true
|
33
|
-
auth.wait!(:please)
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should not be able to be unsuspended into active if not polite' do
|
37
|
-
auth.suspend!
|
38
|
-
expect(auth.may_wait?(:waiting)).not_to be true
|
39
|
-
expect(auth.may_wait?(:waiting, :rude)).not_to be true
|
40
|
-
expect {auth.wait!(:rude)}.to raise_error(AASM::InvalidTransition)
|
41
|
-
expect {auth.wait!}.to raise_error(AASM::InvalidTransition)
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'should not be able to be unpassified' do
|
45
|
-
auth.activate!
|
46
|
-
auth.suspend!
|
47
|
-
auth.unsuspend!
|
48
|
-
|
49
|
-
expect(auth.may_unpassify?).not_to be true
|
50
|
-
expect {auth.unpassify!}.to raise_error(AASM::InvalidTransition)
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'should be active if previously activated' do
|
54
|
-
auth.activate!
|
55
|
-
auth.suspend!
|
56
|
-
auth.unsuspend!
|
57
|
-
|
58
|
-
expect(auth.aasm.current_state).to eq(:active)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'should be pending if not previously activated, but an activation code is present' do
|
62
|
-
auth.suspend!
|
63
|
-
auth.unsuspend!
|
64
|
-
|
65
|
-
expect(auth.aasm.current_state).to eq(:pending)
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'should be passive if not previously activated and there is no activation code' do
|
69
|
-
auth.activation_code = nil
|
70
|
-
auth.suspend!
|
71
|
-
auth.unsuspend!
|
72
|
-
|
73
|
-
expect(auth.aasm.current_state).to eq(:passive)
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should be able to fire known events" do
|
77
|
-
expect(auth.aasm.may_fire_event?(:activate)).to be true
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should be able to fire event by name" do
|
81
|
-
expect(auth.aasm.fire(:activate)).to be true
|
82
|
-
expect(auth.aasm.current_state).to eq(:active)
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should be able to fire! event by name" do
|
86
|
-
expect(auth.aasm.fire!(:activate)).to be true
|
87
|
-
expect(auth.aasm.current_state).to eq(:active)
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should not be able to fire unknown events" do
|
91
|
-
expect(auth.aasm.may_fire_event?(:unknown)).to be false
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
@@ -1,115 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'on initialization' do
|
4
|
-
let(:auth) {ComplexExampleMultiple.new}
|
5
|
-
|
6
|
-
it 'should be in the initial state' do
|
7
|
-
expect(auth.aasm(:left).current_state).to eq(:pending)
|
8
|
-
expect(auth.aasm(:right).current_state).to eq(:pending)
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'should have an activation code' do
|
12
|
-
expect(auth.has_activation_code?).to be_truthy
|
13
|
-
expect(auth.activation_code).to eq '12'
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe 'when being unsuspended' do
|
18
|
-
let(:auth) {ComplexExampleMultiple.new}
|
19
|
-
|
20
|
-
it 'should be able to unsuspend' do
|
21
|
-
auth.left_activate!
|
22
|
-
auth.left_suspend!
|
23
|
-
expect(auth.may_left_unsuspend?).to be true
|
24
|
-
|
25
|
-
auth.right_activate!
|
26
|
-
auth.right_suspend!
|
27
|
-
expect(auth.may_right_unsuspend?).to be true
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should not be able to unsuspend into active' do
|
31
|
-
auth.left_suspend!
|
32
|
-
expect(auth.may_left_unsuspend?(:active)).not_to be true
|
33
|
-
|
34
|
-
auth.right_activate!
|
35
|
-
auth.right_suspend!
|
36
|
-
expect(auth.may_right_unsuspend?(:active)).to be true
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'should be able to wait into waiting if polite' do
|
40
|
-
auth.left_suspend!
|
41
|
-
expect(auth.may_left_wait?(:waiting, :please)).to be true
|
42
|
-
auth.left_wait!(:please)
|
43
|
-
|
44
|
-
auth.right_suspend!
|
45
|
-
expect(auth.may_right_wait?(:waiting)).to be false
|
46
|
-
auth.right_wait!(:please)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'should not be able to be unsuspended into active if not polite' do
|
50
|
-
auth.left_suspend!
|
51
|
-
expect(auth.may_left_wait?(:waiting)).not_to be true
|
52
|
-
expect(auth.may_left_wait?(:waiting, :rude)).not_to be true
|
53
|
-
expect {auth.left_wait!(:rude)}.to raise_error(AASM::InvalidTransition)
|
54
|
-
expect {auth.left_wait!}.to raise_error(AASM::InvalidTransition)
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'should not be able to be unpassified' do
|
58
|
-
auth.left_activate!
|
59
|
-
auth.left_suspend!
|
60
|
-
auth.left_unsuspend!
|
61
|
-
|
62
|
-
expect(auth.may_left_unpassify?).not_to be true
|
63
|
-
expect {auth.left_unpassify!}.to raise_error(AASM::InvalidTransition)
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'should be active if previously activated' do
|
67
|
-
auth.left_activate!
|
68
|
-
auth.left_suspend!
|
69
|
-
auth.left_unsuspend!
|
70
|
-
|
71
|
-
expect(auth.aasm(:left).current_state).to eq(:active)
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'should be pending if not previously activated, but an activation code is present' do
|
75
|
-
auth.left_suspend!
|
76
|
-
auth.left_unsuspend!
|
77
|
-
|
78
|
-
expect(auth.aasm(:left).current_state).to eq(:pending)
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'should be passive if not previously activated and there is no activation code' do
|
82
|
-
auth.activation_code = nil
|
83
|
-
auth.left_suspend!
|
84
|
-
auth.left_unsuspend!
|
85
|
-
|
86
|
-
expect(auth.aasm(:left).current_state).to eq(:passive)
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should be able to fire known events" do
|
90
|
-
expect(auth.aasm(:left).may_fire_event?(:left_activate)).to be true
|
91
|
-
expect(auth.aasm(:right).may_fire_event?(:right_activate)).to be true
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'should not be able to fire unknown events' do
|
95
|
-
expect(auth.aasm(:left).may_fire_event?(:unknown)).to be false
|
96
|
-
expect(auth.aasm(:right).may_fire_event?(:unknown)).to be false
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'should be able to fire event by name' do
|
100
|
-
expect(auth.aasm(:left).fire(:left_activate)).to be true
|
101
|
-
expect(auth.aasm(:left).current_state).to eq(:active)
|
102
|
-
|
103
|
-
expect(auth.aasm(:right).fire(:right_activate)).to be true
|
104
|
-
expect(auth.aasm(:right).current_state).to eq(:active)
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'should be able to fire! event by name' do
|
108
|
-
expect(auth.aasm(:left).fire!(:left_activate)).to be true
|
109
|
-
expect(auth.aasm(:left).current_state).to eq(:active)
|
110
|
-
|
111
|
-
expect(auth.aasm(:right).fire!(:right_activate)).to be true
|
112
|
-
expect(auth.aasm(:right).current_state).to eq(:active)
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|