@@ -30,6 +30,10 @@ def setup!
30
30
'featureful_models' => 'deleted_at DATETIME, name VARCHAR(32)' ,
31
31
'plain_models' => 'deleted_at DATETIME' ,
32
32
'callback_models' => 'deleted_at DATETIME' ,
33
+ 'after_commit_on_restore_callback_models' => 'deleted_at DATETIME' ,
34
+ 'after_restore_commit_callback_models' => 'deleted_at DATETIME' ,
35
+ 'after_commit_callback_restore_enabled_models' => 'deleted_at DATETIME' ,
36
+ 'after_other_commit_callback_restore_enabled_models' => 'deleted_at DATETIME' ,
33
37
'after_commit_callback_models' => 'deleted_at DATETIME' ,
34
38
'fail_callback_models' => 'deleted_at DATETIME' ,
35
39
'association_with_abort_models' => 'deleted_at DATETIME' ,
@@ -626,6 +630,100 @@ def test_restore_behavior_for_callbacks
626
630
model . reload
627
631
628
632
assert model . instance_variable_get ( :@restore_callback_called )
633
+ assert_nil model . instance_variable_get ( :@after_commit_callback_called )
634
+ end
635
+
636
+ def test_after_commit_on_restore
637
+ model = AfterCommitOnRestoreCallbackModel . new
638
+ model . save
639
+ id = model . id
640
+ model . destroy
641
+
642
+ assert model . paranoia_destroyed?
643
+
644
+ model = AfterCommitOnRestoreCallbackModel . only_deleted . find ( id )
645
+ model . restore!
646
+ model . reload
647
+
648
+ assert model . instance_variable_get ( :@restore_callback_called )
649
+ assert model . instance_variable_get ( :@after_restore_callback_called )
650
+ assert model . instance_variable_get ( :@after_restore_commit_callback_called )
651
+ end
652
+
653
+ def test_after_restore_commit
654
+ model = AfterRestoreCommitCallbackModel . new
655
+ model . save
656
+ id = model . id
657
+ model . destroy
658
+
659
+ assert model . paranoia_destroyed?
660
+
661
+ model = AfterRestoreCommitCallbackModel . only_deleted . find ( id )
662
+ model . restore!
663
+ model . reload
664
+
665
+ assert model . instance_variable_get ( :@restore_callback_called )
666
+ assert model . instance_variable_get ( :@after_restore_callback_called )
667
+ assert model . instance_variable_get ( :@after_restore_commit_callback_called )
668
+ end
669
+
670
+ def test_after_restore_commit_once
671
+ model = AfterRestoreCommitCallbackModel . new
672
+ model . save
673
+ id = model . id
674
+ model . destroy
675
+
676
+ assert model . paranoia_destroyed?
677
+ assert model . instance_variable_get ( :@after_destroy_commit_callback_called )
678
+
679
+ model . remove_called_variables
680
+ model = AfterRestoreCommitCallbackModel . only_deleted . find ( id )
681
+ model . restore!
682
+ model . reload
683
+
684
+ assert model . instance_variable_get ( :@restore_callback_called )
685
+ assert model . instance_variable_get ( :@after_restore_callback_called )
686
+ assert model . instance_variable_get ( :@after_restore_commit_callback_called )
687
+ assert_nil model . instance_variable_get ( :@after_destroy_commit_callback_called )
688
+
689
+ model . remove_called_variables
690
+ model . destroy
691
+ assert model . instance_variable_get ( :@after_destroy_commit_callback_called )
692
+ assert_nil model . instance_variable_get ( :@after_restore_commit_callback_called )
693
+ end
694
+
695
+ def test_after_commit_restore_enabled
696
+ model = AfterCommitCallbackRestoreEnabledModel . new
697
+ model . save
698
+ id = model . id
699
+ model . destroy
700
+
701
+ assert model . paranoia_destroyed?
702
+
703
+ model = AfterCommitCallbackRestoreEnabledModel . only_deleted . find ( id )
704
+ model . restore!
705
+ model . reload
706
+
707
+ assert model . instance_variable_get ( :@restore_callback_called )
708
+ assert model . instance_variable_get ( :@after_restore_callback_called )
709
+ assert model . instance_variable_get ( :@after_commit_callback_called )
710
+ end
711
+
712
+ def test_not_call_after_other_commit_restore_enabled
713
+ model = AfterOtherCommitCallbackRestoreEnabledModel . new
714
+ model . save
715
+ id = model . id
716
+ model . destroy
717
+
718
+ assert model . paranoia_destroyed?
719
+
720
+ model = AfterOtherCommitCallbackRestoreEnabledModel . only_deleted . find ( id )
721
+ model . restore!
722
+ model . reload
723
+
724
+ assert model . instance_variable_get ( :@restore_callback_called )
725
+ assert model . instance_variable_get ( :@after_restore_callback_called )
726
+ assert_nil model . instance_variable_get ( :@after_other_commit_callback_called )
629
727
end
630
728
631
729
def test_really_destroy
@@ -1394,6 +1492,47 @@ def remove_called_variables
1394
1492
end
1395
1493
end
1396
1494
1495
+ class AfterCommitOnRestoreCallbackModel < ActiveRecord ::Base
1496
+ acts_as_paranoid after_restore_commit : true
1497
+ before_restore { |model | model . instance_variable_set :@restore_callback_called , true }
1498
+ after_restore { |model | model . instance_variable_set :@after_restore_callback_called , true }
1499
+ after_commit :set_after_restore_commit_called , on : :restore
1500
+
1501
+ def set_after_restore_commit_called
1502
+ @after_restore_commit_callback_called = true
1503
+ end
1504
+ end
1505
+
1506
+ class AfterRestoreCommitCallbackModel < ActiveRecord ::Base
1507
+ acts_as_paranoid after_restore_commit : true
1508
+ before_restore { |model | model . instance_variable_set :@restore_callback_called , true }
1509
+ after_restore { |model | model . instance_variable_set :@after_restore_callback_called , true }
1510
+ after_restore_commit { |model | model . instance_variable_set :@after_restore_commit_callback_called , true }
1511
+ after_destroy_commit { |model | model . instance_variable_set :@after_destroy_commit_callback_called , true }
1512
+
1513
+ def remove_called_variables
1514
+ instance_variables . each { |name | ( name . to_s . end_with? ( '_called' ) ) ? remove_instance_variable ( name ) : nil }
1515
+ end
1516
+ end
1517
+
1518
+ class AfterCommitCallbackRestoreEnabledModel < ActiveRecord ::Base
1519
+ acts_as_paranoid after_restore_commit : true
1520
+ before_restore { |model | model . instance_variable_set :@restore_callback_called , true }
1521
+ after_restore { |model | model . instance_variable_set :@after_restore_callback_called , true }
1522
+ after_commit { |model | model . instance_variable_set :@after_commit_callback_called , true }
1523
+ end
1524
+
1525
+ class AfterOtherCommitCallbackRestoreEnabledModel < ActiveRecord ::Base
1526
+ acts_as_paranoid after_restore_commit : true
1527
+ before_restore { |model | model . instance_variable_set :@restore_callback_called , true }
1528
+ after_restore { |model | model . instance_variable_set :@after_restore_callback_called , true }
1529
+ after_commit :set_after_other_commit_called , on : [ :create , :destroy , :update ]
1530
+
1531
+ def set_after_other_commit_called
1532
+ @after_other_commit_callback_called = true
1533
+ end
1534
+ end
1535
+
1397
1536
class AssociationWithAbortModel < ActiveRecord ::Base
1398
1537
acts_as_paranoid
1399
1538
has_many :related_models , class_name : 'RelatedModel' , foreign_key : :parent_model_id , dependent : :destroy
0 commit comments