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