state_machine 0.7.6 → 0.8.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.
@@ -628,7 +628,7 @@ class StateWithInvalidMethodCallTest < Test::Unit::TestCase
628
628
 
629
629
  def test_should_raise_an_exception
630
630
  exception = assert_raise(NoMethodError) { @state.call(@object, :invalid) }
631
- assert_equal "undefined method 'invalid' for #{@object} in state nil", exception.message
631
+ assert_equal "undefined method 'invalid' for #{@object} with idling state", exception.message
632
632
  end
633
633
  end
634
634
 
@@ -224,6 +224,27 @@ class TransitionWithCustomMachineAttributeTest < Test::Unit::TestCase
224
224
  end
225
225
  end
226
226
 
227
+ class TransitionWithoutReadingStateTest < Test::Unit::TestCase
228
+ def setup
229
+ @klass = Class.new
230
+ @machine = StateMachine::Machine.new(@klass)
231
+ @machine.state :parked, :idling
232
+ @machine.event :ignite
233
+
234
+ @object = @klass.new
235
+ @object.state = 'idling'
236
+ @transition = StateMachine::Transition.new(@object, @machine, :ignite, :parked, :idling, false)
237
+ end
238
+
239
+ def test_should_not_read_from_value_from_object
240
+ assert_equal 'parked', @transition.from
241
+ end
242
+
243
+ def test_should_have_to_value
244
+ assert_equal 'idling', @transition.to
245
+ end
246
+ end
247
+
227
248
  class TransitionWithActionTest < Test::Unit::TestCase
228
249
  def setup
229
250
  @klass = Class.new do
@@ -276,6 +297,19 @@ class TransitionAfterBeingPersistedTest < Test::Unit::TestCase
276
297
  assert_equal 'idling', @transition.to
277
298
  end
278
299
 
300
+ def test_should_not_be_able_to_persist_twice
301
+ @object.state = 'parked'
302
+ @transition.persist
303
+ assert_equal 'parked', @object.state
304
+ end
305
+
306
+ def test_should_be_able_to_persist_again_after_resetting
307
+ @object.state = 'parked'
308
+ @transition.reset
309
+ @transition.persist
310
+ assert_equal 'idling', @object.state
311
+ end
312
+
279
313
  def test_should_revert_to_from_state_on_rollback
280
314
  @transition.rollback
281
315
  assert_equal 'parked', @object.state
@@ -388,6 +422,23 @@ class TransitionWithCallbacksTest < Test::Unit::TestCase
388
422
  assert_equal 'parked', @state
389
423
  end
390
424
 
425
+ def test_should_not_be_able_to_run_before_callbacks_twice
426
+ @count = 0
427
+ @machine.before_transition(lambda {@count += 1})
428
+ @transition.before
429
+ @transition.before
430
+ assert_equal 1, @count
431
+ end
432
+
433
+ def test_should_be_able_to_run_before_callbacks_again_after_resetting
434
+ @count = 0
435
+ @machine.before_transition(lambda {@count += 1})
436
+ @transition.before
437
+ @transition.reset
438
+ @transition.before
439
+ assert_equal 2, @count
440
+ end
441
+
391
442
  def test_should_run_after_callbacks_on_after
392
443
  @machine.after_transition(lambda {|object| @run = true})
393
444
  result = @transition.after(true)
@@ -426,6 +477,12 @@ class TransitionWithCallbacksTest < Test::Unit::TestCase
426
477
  assert_equal 1, @count
427
478
  end
428
479
 
480
+ def test_should_not_run_after_callbacks_if_not_successful
481
+ @machine.after_transition(lambda {|object| @run = true})
482
+ @transition.after(nil, false)
483
+ assert !@run
484
+ end
485
+
429
486
  def test_should_pass_transition_to_after_callbacks
430
487
  @machine.after_transition(lambda {|*args| @args = args})
431
488
 
@@ -452,6 +509,23 @@ class TransitionWithCallbacksTest < Test::Unit::TestCase
452
509
 
453
510
  assert_equal 'idling', @state
454
511
  end
512
+
513
+ def test_should_not_be_able_to_run_after_callbacks_twice
514
+ @count = 0
515
+ @machine.after_transition(lambda {@count += 1})
516
+ @transition.after
517
+ @transition.after
518
+ assert_equal 1, @count
519
+ end
520
+
521
+ def test_should_be_able_to_run_after_callbacks_again_after_resetting
522
+ @count = 0
523
+ @machine.after_transition(lambda {@count += 1})
524
+ @transition.after
525
+ @transition.reset
526
+ @transition.after
527
+ assert_equal 2, @count
528
+ end
455
529
  end
456
530
 
457
531
  class TransitionAfterBeingPerformedTest < Test::Unit::TestCase
@@ -547,6 +621,7 @@ class TransitionWithoutRunningActionTest < Test::Unit::TestCase
547
621
  @machine = StateMachine::Machine.new(@klass, :action => :save)
548
622
  @machine.state :parked, :idling
549
623
  @machine.event :ignite
624
+ @machine.after_transition(lambda {|object| @run_after = true})
550
625
 
551
626
  @object = @klass.new
552
627
  @object.state = 'parked'
@@ -573,6 +648,10 @@ class TransitionWithoutRunningActionTest < Test::Unit::TestCase
573
648
  def test_should_not_run_the_action
574
649
  assert !@object.saved
575
650
  end
651
+
652
+ def test_should_run_after_callbacks
653
+ assert @run_after
654
+ end
576
655
  end
577
656
 
578
657
  class TransitionWithTransactionsTest < Test::Unit::TestCase
@@ -669,7 +748,7 @@ class TransitionHaltedDuringBeforeCallbacksTest < Test::Unit::TestCase
669
748
  end
670
749
 
671
750
  def test_should_not_be_successful
672
- assert !@result
751
+ assert_equal false, @result
673
752
  end
674
753
 
675
754
  def test_should_not_change_current_state
@@ -726,7 +805,7 @@ class TransitionHaltedAfterCallbackTest < Test::Unit::TestCase
726
805
  end
727
806
 
728
807
  def test_should_be_successful
729
- assert @result
808
+ assert_equal true, @result
730
809
  end
731
810
 
732
811
  def test_should_change_current_state
@@ -770,31 +849,45 @@ class TransitionWithActionFailedTest < Test::Unit::TestCase
770
849
 
771
850
  @machine.before_transition lambda {@before_count += 1}
772
851
  @machine.after_transition lambda {@after_count += 1}
852
+ @machine.after_transition lambda {@after_count += 1}, :include_failures => true
773
853
 
774
854
  @object = @klass.new
775
855
  @transition = StateMachine::Transition.new(@object, @machine, :ignite, :parked, :idling)
776
- @result = @transition.perform
777
856
  end
778
857
 
779
858
  def test_should_not_be_successful
780
- assert !@result
859
+ assert_equal false, @transition.perform
781
860
  end
782
861
 
783
862
  def test_should_not_change_current_state
863
+ @transition.perform
784
864
  assert_nil @object.state
785
865
  end
786
866
 
787
867
  def test_should_run_before_callbacks
868
+ @transition.perform
788
869
  assert_equal 1, @before_count
789
870
  end
790
871
 
791
- def test_should_run_after_callbacks
872
+ def test_should_only_run_after_callbacks_that_include_failures
873
+ @transition.perform
792
874
  assert_equal 1, @after_count
793
875
  end
794
876
 
795
877
  def test_should_cancel_the_transaction
878
+ @transition.perform
796
879
  assert @klass.cancelled_transaction
797
880
  end
881
+
882
+ def test_should_interpret_nil_as_failure
883
+ @klass.class_eval do
884
+ def save
885
+ nil
886
+ end
887
+ end
888
+
889
+ assert_equal false, @transition.perform
890
+ end
798
891
  end
799
892
 
800
893
  class TransitionWithActionErrorTest < Test::Unit::TestCase
@@ -1094,13 +1187,19 @@ class TransitionsWithPerformBlockTest < Test::Unit::TestCase
1094
1187
  end
1095
1188
 
1096
1189
  def test_should_be_perform_if_result_is_not_false
1097
- assert StateMachine::Transition.perform([@state_transition, @status_transition]) { true }
1190
+ assert_equal true, StateMachine::Transition.perform([@state_transition, @status_transition]) { true }
1098
1191
  assert_equal 'idling', @object.state
1099
1192
  assert_equal 'second_gear', @object.status
1100
1193
  end
1101
1194
 
1102
1195
  def test_should_not_perform_if_result_is_false
1103
- assert !StateMachine::Transition.perform([@state_transition, @status_transition]) { false }
1196
+ assert_equal false, StateMachine::Transition.perform([@state_transition, @status_transition]) { false }
1197
+ assert_equal 'parked', @object.state
1198
+ assert_equal 'first_gear', @object.status
1199
+ end
1200
+
1201
+ def test_should_not_perform_if_result_is_nil
1202
+ assert_equal false, StateMachine::Transition.perform([@state_transition, @status_transition]) { nil }
1104
1203
  assert_equal 'parked', @object.state
1105
1204
  assert_equal 'first_gear', @object.status
1106
1205
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: state_machine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Pfeifer
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-17 00:00:00 -04:00
12
+ date: 2009-08-15 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15