state_machine 0.7.6 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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