test/paranoia_test.rb in paranoia-2.0.5 vs test/paranoia_test.rb in paranoia-2.1.0.pre

- old
+ new

@@ -1,15 +1,11 @@ require 'active_record' ActiveRecord::Base.raise_in_transactional_callbacks = true if ActiveRecord::VERSION::STRING >= '4.2' -test_framework = if ActiveRecord::VERSION::STRING >= "4.1" - require 'minitest/autorun' - MiniTest::Test -else - require 'test/unit' - Test::Unit::TestCase -end +require 'minitest/autorun' +test_framework = defined?(MiniTest::Test) ? MiniTest::Test : MiniTest::Unit::TestCase + require File.expand_path(File.dirname(__FILE__) + "/../lib/paranoia") def connect! ActiveRecord::Base.establish_connection :adapter => 'sqlite3', database: ':memory:' end @@ -134,10 +130,17 @@ assert_equal 0, model.class.count assert_equal 1, model.class.unscoped.count end + def test_update_columns_on_paranoia_destroyed + record = ParentModel.create + record.destroy + + assert record.update_columns deleted_at: Time.now + end + def test_scoping_behavior_for_paranoid_models parent1 = ParentModel.create parent2 = ParentModel.create p1 = ParanoidModel.create(:parent_model => parent1) p2 = ParanoidModel.create(:parent_model => parent2) @@ -158,11 +161,11 @@ assert_nil model.destroyed_at assert_equal 1, model.class.count model.destroy assert_equal false, model.destroyed_at.nil? - assert model.destroyed? + assert model.paranoia_destroyed? assert_equal 0, model.class.count assert_equal 1, model.class.unscoped.count assert_equal 1, model.class.only_deleted.count assert_equal 1, model.class.deleted.count @@ -179,11 +182,11 @@ assert_equal DateTime.new(0), model.deleted_at assert_equal 1, model.class.count model.destroy assert DateTime.new(0) != model.deleted_at - assert model.destroyed? + assert model.paranoia_destroyed? assert_equal 0, model.class.count assert_equal 1, model.class.unscoped.count assert_equal 1, model.class.only_deleted.count assert_equal 1, model.class.deleted.count @@ -282,23 +285,65 @@ model.save model.destroy assert model.instance_variable_get(:@destroy_callback_called) end + def test_destroy_on_readonly_record + # Just to demonstrate the AR behaviour + model = NonParanoidModel.create! + model.readonly! + assert_raises ActiveRecord::ReadOnlyRecord do + model.destroy + end + + # Mirrors behaviour above + model = ParanoidModel.create! + model.readonly! + assert_raises ActiveRecord::ReadOnlyRecord do + model.destroy + end + end + + def test_destroy_on_really_destroyed_record + model = ParanoidModel.create! + model.really_destroy! + assert model.really_destroyed? + assert model.paranoia_destroyed? + model.destroy + assert model.really_destroyed? + assert model.paranoia_destroyed? + end + + def test_destroy_on_unsaved_record + # Just to demonstrate the AR behaviour + model = NonParanoidModel.new + model.destroy! + assert model.really_destroyed? + model.destroy! + assert model.really_destroyed? + + # Mirrors behaviour above + model = ParanoidModel.new + model.destroy! + assert model.paranoia_destroyed? + model.destroy! + assert model.paranoia_destroyed? + end + def test_restore model = ParanoidModel.new model.save id = model.id model.destroy - assert model.destroyed? + assert model.paranoia_destroyed? model = ParanoidModel.only_deleted.find(id) model.restore! model.reload - assert_equal false, model.destroyed? + assert_equal false, model.paranoia_destroyed? end def test_restore_on_object_return_self model = ParanoidModel.create model.destroy @@ -314,10 +359,20 @@ model.destroy assert_equal 1, ParanoidModel.unscoped.where(id: model.id).count end + # Regression test for #92 + def test_destroy_bang_twice + model = ParanoidModel.new + model.save! + model.destroy! + model.destroy! + + assert_equal 1, ParanoidModel.unscoped.where(id: model.id).count + end + def test_destroy_return_value_on_success model = ParanoidModel.create return_value = model.destroy assert_equal(return_value, model) @@ -334,11 +389,11 @@ model = CallbackModel.new model.save id = model.id model.destroy - assert model.destroyed? + assert model.paranoia_destroyed? model = CallbackModel.only_deleted.find(id) model.restore! model.reload @@ -352,13 +407,19 @@ refute ParanoidModel.unscoped.exists?(model.id) end def test_real_destroy_dependent_destroy parent = ParentModel.create - child = parent.very_related_models.create + child1 = parent.very_related_models.create + child2 = parent.non_paranoid_models.create + child3 = parent.create_non_paranoid_model + parent.really_destroy! - refute RelatedModel.unscoped.exists?(child.id) + + refute RelatedModel.unscoped.exists?(child1.id) + refute NonParanoidModel.unscoped.exists?(child2.id) + refute NonParanoidModel.unscoped.exists?(child3.id) end def test_real_destroy_dependent_destroy_after_normal_destroy parent = ParentModel.create child = parent.very_related_models.create @@ -376,23 +437,14 @@ parent_1.destroy parent_1.really_destroy! assert RelatedModel.unscoped.exists?(child_2.id) end - if ActiveRecord::VERSION::STRING < "4.1" - def test_real_destroy - model = ParanoidModel.new - model.save - model.destroy! - refute ParanoidModel.unscoped.exists?(model.id) - end - end - - def test_real_delete + def test_really_delete model = ParanoidModel.new model.save - model.delete! + model.really_delete refute ParanoidModel.unscoped.exists?(model.id) end def test_multiple_restore @@ -415,13 +467,13 @@ a.reload b.reload c.reload - refute a.destroyed? - assert b.destroyed? - refute c.destroyed? + refute a.paranoia_destroyed? + assert b.paranoia_destroyed? + refute c.paranoia_destroyed? end def test_restore_with_associations parent = ParentModel.create first_child = parent.very_related_models.create @@ -748,9 +800,10 @@ acts_as_paranoid has_many :paranoid_models has_many :related_models has_many :very_related_models, :class_name => 'RelatedModel', dependent: :destroy has_many :non_paranoid_models, dependent: :destroy + has_one :non_paranoid_model, dependent: :destroy has_many :asplode_models, dependent: :destroy has_one :polymorphic_model, as: :parent, dependent: :destroy end class RelatedModel < ActiveRecord::Base