From db38a8720524efe080560f29f92a23ecbfd4d035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Mon, 21 Jan 2019 12:45:16 +0100 Subject: [PATCH] Add specs to check how paranoia and globalize work together Create shared model spec to test paranoia and globalize behavior on globalizable and paranoid models. --- spec/shared/models/acts_as_paranoid.rb | 65 ++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 spec/shared/models/acts_as_paranoid.rb diff --git a/spec/shared/models/acts_as_paranoid.rb b/spec/shared/models/acts_as_paranoid.rb new file mode 100644 index 000000000..ee88d13a8 --- /dev/null +++ b/spec/shared/models/acts_as_paranoid.rb @@ -0,0 +1,65 @@ +shared_examples "acts as paranoid" do |factory_name| + let!(:resource) { create(factory_name) } + + it "#{described_class} can be recovered after soft deletion" do + resource.destroy + resource.reload + + expect(resource.hidden_at).not_to be_blank + resource.restore! + resource.reload + + expect(resource.hidden_at).to be_blank + end + + describe "#{described_class} translations" do + + it "should be hidden after parent resource destroy" do + resource.destroy + resource.reload + + expect(resource.translations.with_deleted.first.hidden_at).not_to be_blank + end + + it "should be destroyed after parent resource really_destroy" do + expect{ resource.really_destroy! }.to change { resource.translations.with_deleted.count }.from(1).to(0) + end + + it "cannot be recovered through non recursive restore" do + resource.destroy + resource.reload + + expect{ resource.restore }.not_to change { resource.translations.with_deleted.first.hidden_at } + end + + it "can be recovered through recursive restore after non-recursive restore" do + resource.destroy + resource.restore + resource.destroy + resource.reload + + expect{ resource.restore(recursive: true) }.to change { resource.translations.with_deleted.first.hidden_at } + end + + it "can be recovered after soft deletion through recursive restore" do + original_translation = resource.translations.first + new_translation = resource.translations.build + described_class.translated_attribute_names.each do |translated_attribute_name| + new_translation.send("#{translated_attribute_name}=", original_translation.send(translated_attribute_name)) + end + new_translation.locale = :fr + new_translation.save + + expect(resource.translations.with_deleted.count).to eq(2) + resource.destroy + resource.reload + expect(resource.translations.with_deleted.count).to eq(2) + expect(resource.translations.with_deleted.first.hidden_at).not_to be_blank + expect(resource.translations.with_deleted.second.hidden_at).not_to be_blank + resource.restore!(recursive: true) + resource.reload + expect(resource.translations.with_deleted.first.hidden_at).to be_blank + expect(resource.translations.with_deleted.second.hidden_at).to be_blank + end + end +end