acts_as_paranoid 0.4.1 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +1 -1
- data/{README.markdown → README.md} +26 -17
- data/lib/acts_as_paranoid/core.rb +16 -8
- data/lib/acts_as_paranoid/relation.rb +2 -2
- data/lib/acts_as_paranoid/version.rb +3 -0
- data/lib/acts_as_paranoid.rb +10 -14
- data/test/test_associations.rb +222 -0
- data/test/test_core.rb +387 -0
- data/test/test_default_scopes.rb +52 -0
- data/test/test_helper.rb +442 -0
- data/test/test_inheritance.rb +14 -0
- data/test/test_observers.rb +16 -0
- data/test/test_relations.rb +117 -0
- data/test/test_validations.rb +42 -0
- metadata +102 -28
data/test/test_core.rb
ADDED
@@ -0,0 +1,387 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ParanoidTest < ParanoidBaseTest
|
4
|
+
def test_paranoid?
|
5
|
+
assert !NotParanoid.paranoid?
|
6
|
+
assert_raise(NoMethodError) { NotParanoid.delete_all! }
|
7
|
+
assert_raise(NoMethodError) { NotParanoid.first.destroy! }
|
8
|
+
assert_raise(NoMethodError) { NotParanoid.with_deleted }
|
9
|
+
assert_raise(NoMethodError) { NotParanoid.only_deleted }
|
10
|
+
|
11
|
+
assert ParanoidTime.paranoid?
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_scope_inclusion_with_time_column_type
|
15
|
+
assert ParanoidTime.respond_to?(:deleted_inside_time_window)
|
16
|
+
assert ParanoidTime.respond_to?(:deleted_before_time)
|
17
|
+
assert ParanoidTime.respond_to?(:deleted_after_time)
|
18
|
+
|
19
|
+
assert !ParanoidBoolean.respond_to?(:deleted_inside_time_window)
|
20
|
+
assert !ParanoidBoolean.respond_to?(:deleted_before_time)
|
21
|
+
assert !ParanoidBoolean.respond_to?(:deleted_after_time)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_fake_removal
|
25
|
+
assert_equal 3, ParanoidTime.count
|
26
|
+
assert_equal 3, ParanoidBoolean.count
|
27
|
+
assert_equal 1, ParanoidString.count
|
28
|
+
|
29
|
+
ParanoidTime.first.destroy
|
30
|
+
ParanoidBoolean.delete_all("name = 'paranoid' OR name = 'really paranoid'")
|
31
|
+
ParanoidString.first.destroy
|
32
|
+
assert_equal 2, ParanoidTime.count
|
33
|
+
assert_equal 1, ParanoidBoolean.count
|
34
|
+
assert_equal 0, ParanoidString.count
|
35
|
+
assert_equal 1, ParanoidTime.only_deleted.count
|
36
|
+
assert_equal 2, ParanoidBoolean.only_deleted.count
|
37
|
+
assert_equal 1, ParanoidString.only_deleted.count
|
38
|
+
assert_equal 3, ParanoidTime.with_deleted.count
|
39
|
+
assert_equal 3, ParanoidBoolean.with_deleted.count
|
40
|
+
assert_equal 1, ParanoidString.with_deleted.count
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_real_removal
|
44
|
+
ParanoidTime.first.destroy!
|
45
|
+
ParanoidBoolean.delete_all!("name = 'extremely paranoid' OR name = 'really paranoid'")
|
46
|
+
ParanoidString.first.destroy!
|
47
|
+
assert_equal 2, ParanoidTime.count
|
48
|
+
assert_equal 1, ParanoidBoolean.count
|
49
|
+
assert_equal 0, ParanoidString.count
|
50
|
+
assert_equal 2, ParanoidTime.with_deleted.count
|
51
|
+
assert_equal 1, ParanoidBoolean.with_deleted.count
|
52
|
+
assert_equal 0, ParanoidString.with_deleted.count
|
53
|
+
assert_equal 0, ParanoidTime.only_deleted.count
|
54
|
+
assert_equal 0, ParanoidBoolean.only_deleted.count
|
55
|
+
assert_equal 0, ParanoidString.only_deleted.count
|
56
|
+
|
57
|
+
ParanoidTime.first.destroy
|
58
|
+
ParanoidTime.only_deleted.first.destroy
|
59
|
+
assert_equal 0, ParanoidTime.only_deleted.count
|
60
|
+
|
61
|
+
ParanoidTime.delete_all!
|
62
|
+
assert_empty ParanoidTime.all
|
63
|
+
assert_empty ParanoidTime.with_deleted.all
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_non_persisted_destroy
|
67
|
+
pt = ParanoidTime.new
|
68
|
+
assert_nil pt.paranoid_value
|
69
|
+
pt.destroy
|
70
|
+
assert_not_nil pt.paranoid_value
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_non_persisted_destroy!
|
74
|
+
pt = ParanoidTime.new
|
75
|
+
assert_nil pt.paranoid_value
|
76
|
+
pt.destroy!
|
77
|
+
assert_not_nil pt.paranoid_value
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_recovery
|
81
|
+
assert_equal 3, ParanoidBoolean.count
|
82
|
+
ParanoidBoolean.first.destroy
|
83
|
+
assert_equal 2, ParanoidBoolean.count
|
84
|
+
ParanoidBoolean.only_deleted.first.recover
|
85
|
+
assert_equal 3, ParanoidBoolean.count
|
86
|
+
|
87
|
+
assert_equal 1, ParanoidString.count
|
88
|
+
ParanoidString.first.destroy
|
89
|
+
assert_equal 0, ParanoidString.count
|
90
|
+
ParanoidString.with_deleted.first.recover
|
91
|
+
assert_equal 1, ParanoidString.count
|
92
|
+
end
|
93
|
+
|
94
|
+
def setup_recursive_tests
|
95
|
+
@paranoid_time_object = ParanoidTime.first
|
96
|
+
|
97
|
+
# Create one extra ParanoidHasManyDependant record so that we can validate
|
98
|
+
# the correct dependants are recovered.
|
99
|
+
ParanoidTime.where('id <> ?', @paranoid_time_object.id).first.paranoid_has_many_dependants.create(:name => "should not be recovered").destroy
|
100
|
+
|
101
|
+
@paranoid_boolean_count = ParanoidBoolean.count
|
102
|
+
|
103
|
+
assert_equal 0, ParanoidHasManyDependant.count
|
104
|
+
assert_equal 0, ParanoidBelongsDependant.count
|
105
|
+
assert_equal 1, NotParanoid.count
|
106
|
+
|
107
|
+
(1..3).each do |i|
|
108
|
+
has_many_object = @paranoid_time_object.paranoid_has_many_dependants.create(:name => "has_many_#{i}")
|
109
|
+
has_many_object.create_paranoid_belongs_dependant(:name => "belongs_to_#{i}")
|
110
|
+
has_many_object.save
|
111
|
+
|
112
|
+
paranoid_boolean = @paranoid_time_object.paranoid_booleans.create(:name => "boolean_#{i}")
|
113
|
+
paranoid_boolean.create_paranoid_has_one_dependant(:name => "has_one_#{i}")
|
114
|
+
paranoid_boolean.save
|
115
|
+
|
116
|
+
@paranoid_time_object.not_paranoids.create(:name => "not_paranoid_a#{i}")
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
@paranoid_time_object.create_not_paranoid(:name => "not_paranoid_belongs_to")
|
121
|
+
@paranoid_time_object.create_has_one_not_paranoid(:name => "has_one_not_paranoid")
|
122
|
+
|
123
|
+
assert_equal 3, ParanoidTime.count
|
124
|
+
assert_equal 3, ParanoidHasManyDependant.count
|
125
|
+
assert_equal 3, ParanoidBelongsDependant.count
|
126
|
+
assert_equal @paranoid_boolean_count + 3, ParanoidBoolean.count
|
127
|
+
assert_equal 3, ParanoidHasOneDependant.count
|
128
|
+
assert_equal 5, NotParanoid.count
|
129
|
+
assert_equal 1, HasOneNotParanoid.count
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_recursive_fake_removal
|
133
|
+
setup_recursive_tests
|
134
|
+
|
135
|
+
@paranoid_time_object.destroy
|
136
|
+
|
137
|
+
assert_equal 2, ParanoidTime.count
|
138
|
+
assert_equal 0, ParanoidHasManyDependant.count
|
139
|
+
assert_equal 0, ParanoidBelongsDependant.count
|
140
|
+
assert_equal @paranoid_boolean_count, ParanoidBoolean.count
|
141
|
+
assert_equal 0, ParanoidHasOneDependant.count
|
142
|
+
assert_equal 1, NotParanoid.count
|
143
|
+
assert_equal 0, HasOneNotParanoid.count
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_recursive_real_removal
|
147
|
+
setup_recursive_tests
|
148
|
+
|
149
|
+
@paranoid_time_object.destroy!
|
150
|
+
|
151
|
+
assert_equal 0, ParanoidTime.only_deleted.count
|
152
|
+
assert_equal 1, ParanoidHasManyDependant.only_deleted.count
|
153
|
+
assert_equal 0, ParanoidBelongsDependant.only_deleted.count
|
154
|
+
assert_equal 0, ParanoidBoolean.only_deleted.count
|
155
|
+
assert_equal 0, ParanoidHasOneDependant.only_deleted.count
|
156
|
+
assert_equal 1, NotParanoid.count
|
157
|
+
assert_equal 0, HasOneNotParanoid.count
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_recursive_recovery
|
161
|
+
setup_recursive_tests
|
162
|
+
|
163
|
+
@paranoid_time_object.destroy
|
164
|
+
@paranoid_time_object.reload
|
165
|
+
|
166
|
+
@paranoid_time_object.recover(:recursive => true)
|
167
|
+
|
168
|
+
assert_equal 3, ParanoidTime.count
|
169
|
+
assert_equal 3, ParanoidHasManyDependant.count
|
170
|
+
assert_equal 3, ParanoidBelongsDependant.count
|
171
|
+
assert_equal @paranoid_boolean_count + 3, ParanoidBoolean.count
|
172
|
+
assert_equal 3, ParanoidHasOneDependant.count
|
173
|
+
assert_equal 1, NotParanoid.count
|
174
|
+
assert_equal 0, HasOneNotParanoid.count
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_recursive_recovery_dependant_window
|
178
|
+
setup_recursive_tests
|
179
|
+
|
180
|
+
@paranoid_time_object.destroy
|
181
|
+
@paranoid_time_object.reload
|
182
|
+
|
183
|
+
# Stop the following from recovering:
|
184
|
+
# - ParanoidHasManyDependant and its ParanoidBelongsDependant
|
185
|
+
# - A single ParanoidBelongsDependant, but not its parent
|
186
|
+
dependants = @paranoid_time_object.paranoid_has_many_dependants.with_deleted
|
187
|
+
dependants.first.update_attribute(:deleted_at, 2.days.ago)
|
188
|
+
ParanoidBelongsDependant.with_deleted.where(:id => dependants.last.paranoid_belongs_dependant_id).first.update_attribute(:deleted_at, 1.hour.ago)
|
189
|
+
|
190
|
+
@paranoid_time_object.recover(:recursive => true)
|
191
|
+
|
192
|
+
assert_equal 3, ParanoidTime.count
|
193
|
+
assert_equal 2, ParanoidHasManyDependant.count
|
194
|
+
assert_equal 1, ParanoidBelongsDependant.count
|
195
|
+
assert_equal @paranoid_boolean_count + 3, ParanoidBoolean.count
|
196
|
+
assert_equal 3, ParanoidHasOneDependant.count
|
197
|
+
assert_equal 1, NotParanoid.count
|
198
|
+
assert_equal 0, HasOneNotParanoid.count
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_recursive_recovery_for_belongs_to_polymorphic
|
202
|
+
child_1 = ParanoidAndroid.create
|
203
|
+
section_1 = ParanoidSection.create(:paranoid_thing => child_1)
|
204
|
+
|
205
|
+
child_2 = ParanoidHuman.create(:gender => 'male')
|
206
|
+
section_2 = ParanoidSection.create(:paranoid_thing => child_2)
|
207
|
+
|
208
|
+
assert_equal section_1.paranoid_thing, child_1
|
209
|
+
assert_equal section_1.paranoid_thing.class, ParanoidAndroid
|
210
|
+
assert_equal section_2.paranoid_thing, child_2
|
211
|
+
assert_equal section_2.paranoid_thing.class, ParanoidHuman
|
212
|
+
|
213
|
+
parent = ParanoidTime.create(:name => "paranoid_parent")
|
214
|
+
parent.paranoid_sections << section_1
|
215
|
+
parent.paranoid_sections << section_2
|
216
|
+
|
217
|
+
assert_equal 4, ParanoidTime.count
|
218
|
+
assert_equal 2, ParanoidSection.count
|
219
|
+
assert_equal 1, ParanoidAndroid.count
|
220
|
+
assert_equal 1, ParanoidHuman.count
|
221
|
+
|
222
|
+
parent.destroy
|
223
|
+
|
224
|
+
assert_equal 3, ParanoidTime.count
|
225
|
+
assert_equal 0, ParanoidSection.count
|
226
|
+
assert_equal 0, ParanoidAndroid.count
|
227
|
+
assert_equal 0, ParanoidHuman.count
|
228
|
+
|
229
|
+
parent.reload
|
230
|
+
parent.recover
|
231
|
+
|
232
|
+
assert_equal 4, ParanoidTime.count
|
233
|
+
assert_equal 2, ParanoidSection.count
|
234
|
+
assert_equal 1, ParanoidAndroid.count
|
235
|
+
assert_equal 1, ParanoidHuman.count
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_non_recursive_recovery
|
239
|
+
setup_recursive_tests
|
240
|
+
|
241
|
+
@paranoid_time_object.destroy
|
242
|
+
@paranoid_time_object.reload
|
243
|
+
|
244
|
+
@paranoid_time_object.recover(:recursive => false)
|
245
|
+
|
246
|
+
assert_equal 3, ParanoidTime.count
|
247
|
+
assert_equal 0, ParanoidHasManyDependant.count
|
248
|
+
assert_equal 0, ParanoidBelongsDependant.count
|
249
|
+
assert_equal @paranoid_boolean_count, ParanoidBoolean.count
|
250
|
+
assert_equal 0, ParanoidHasOneDependant.count
|
251
|
+
assert_equal 1, NotParanoid.count
|
252
|
+
assert_equal 0, HasOneNotParanoid.count
|
253
|
+
end
|
254
|
+
|
255
|
+
def test_deleted?
|
256
|
+
ParanoidTime.first.destroy
|
257
|
+
assert ParanoidTime.with_deleted.first.deleted?
|
258
|
+
|
259
|
+
ParanoidString.first.destroy
|
260
|
+
assert ParanoidString.with_deleted.first.deleted?
|
261
|
+
end
|
262
|
+
|
263
|
+
def test_paranoid_destroy_callbacks
|
264
|
+
@paranoid_with_callback = ParanoidWithCallback.first
|
265
|
+
ParanoidWithCallback.transaction do
|
266
|
+
@paranoid_with_callback.destroy
|
267
|
+
end
|
268
|
+
|
269
|
+
assert @paranoid_with_callback.called_before_destroy
|
270
|
+
assert @paranoid_with_callback.called_after_destroy
|
271
|
+
assert @paranoid_with_callback.called_after_commit_on_destroy
|
272
|
+
end
|
273
|
+
|
274
|
+
def test_hard_destroy_callbacks
|
275
|
+
@paranoid_with_callback = ParanoidWithCallback.first
|
276
|
+
|
277
|
+
ParanoidWithCallback.transaction do
|
278
|
+
@paranoid_with_callback.destroy!
|
279
|
+
end
|
280
|
+
|
281
|
+
assert @paranoid_with_callback.called_before_destroy
|
282
|
+
assert @paranoid_with_callback.called_after_destroy
|
283
|
+
assert @paranoid_with_callback.called_after_commit_on_destroy
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_recovery_callbacks
|
287
|
+
@paranoid_with_callback = ParanoidWithCallback.first
|
288
|
+
|
289
|
+
ParanoidWithCallback.transaction do
|
290
|
+
@paranoid_with_callback.destroy
|
291
|
+
|
292
|
+
assert_nil @paranoid_with_callback.called_before_recover
|
293
|
+
assert_nil @paranoid_with_callback.called_after_recover
|
294
|
+
|
295
|
+
@paranoid_with_callback.recover
|
296
|
+
end
|
297
|
+
|
298
|
+
assert @paranoid_with_callback.called_before_recover
|
299
|
+
assert @paranoid_with_callback.called_after_recover
|
300
|
+
end
|
301
|
+
|
302
|
+
def test_delete_by_multiple_id_is_paranoid
|
303
|
+
model_a = ParanoidBelongsDependant.create
|
304
|
+
model_b = ParanoidBelongsDependant.create
|
305
|
+
ParanoidBelongsDependant.delete([model_a.id, model_b.id])
|
306
|
+
|
307
|
+
assert_paranoid_deletion(model_a)
|
308
|
+
assert_paranoid_deletion(model_b)
|
309
|
+
end
|
310
|
+
|
311
|
+
def test_destroy_by_multiple_id_is_paranoid
|
312
|
+
model_a = ParanoidBelongsDependant.create
|
313
|
+
model_b = ParanoidBelongsDependant.create
|
314
|
+
ParanoidBelongsDependant.destroy([model_a.id, model_b.id])
|
315
|
+
|
316
|
+
assert_paranoid_deletion(model_a)
|
317
|
+
assert_paranoid_deletion(model_b)
|
318
|
+
end
|
319
|
+
|
320
|
+
def test_delete_by_single_id_is_paranoid
|
321
|
+
model = ParanoidBelongsDependant.create
|
322
|
+
ParanoidBelongsDependant.delete(model.id)
|
323
|
+
|
324
|
+
assert_paranoid_deletion(model)
|
325
|
+
end
|
326
|
+
|
327
|
+
def test_destroy_by_single_id_is_paranoid
|
328
|
+
model = ParanoidBelongsDependant.create
|
329
|
+
ParanoidBelongsDependant.destroy(model.id)
|
330
|
+
|
331
|
+
assert_paranoid_deletion(model)
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_instance_delete_is_paranoid
|
335
|
+
model = ParanoidBelongsDependant.create
|
336
|
+
model.delete
|
337
|
+
|
338
|
+
assert_paranoid_deletion(model)
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_instance_destroy_is_paranoid
|
342
|
+
model = ParanoidBelongsDependant.create
|
343
|
+
model.destroy
|
344
|
+
|
345
|
+
assert_paranoid_deletion(model)
|
346
|
+
end
|
347
|
+
|
348
|
+
# Test string type columns that don't have a nil value when not deleted (Y/N for example)
|
349
|
+
def test_string_type_with_no_nil_value_before_destroy
|
350
|
+
ps = ParanoidString.create!(:deleted => 'not dead')
|
351
|
+
assert_equal 1, ParanoidString.where(:id => ps).count
|
352
|
+
end
|
353
|
+
|
354
|
+
def test_string_type_with_no_nil_value_after_destroy
|
355
|
+
ps = ParanoidString.create!(:deleted => 'not dead')
|
356
|
+
ps.destroy
|
357
|
+
assert_equal 0, ParanoidString.where(:id => ps).count
|
358
|
+
end
|
359
|
+
|
360
|
+
def test_string_type_with_no_nil_value_before_destroy_with_deleted
|
361
|
+
ps = ParanoidString.create!(:deleted => 'not dead')
|
362
|
+
assert_equal 1, ParanoidString.with_deleted.where(:id => ps).count
|
363
|
+
end
|
364
|
+
|
365
|
+
def test_string_type_with_no_nil_value_after_destroy_with_deleted
|
366
|
+
ps = ParanoidString.create!(:deleted => 'not dead')
|
367
|
+
ps.destroy
|
368
|
+
assert_equal 1, ParanoidString.with_deleted.where(:id => ps).count
|
369
|
+
end
|
370
|
+
|
371
|
+
def test_string_type_with_no_nil_value_before_destroy_only_deleted
|
372
|
+
ps = ParanoidString.create!(:deleted => 'not dead')
|
373
|
+
assert_equal 0, ParanoidString.only_deleted.where(:id => ps).count
|
374
|
+
end
|
375
|
+
|
376
|
+
def test_string_type_with_no_nil_value_after_destroy_only_deleted
|
377
|
+
ps = ParanoidString.create!(:deleted => 'not dead')
|
378
|
+
ps.destroy
|
379
|
+
assert_equal 1, ParanoidString.only_deleted.where(:id => ps).count
|
380
|
+
end
|
381
|
+
|
382
|
+
def test_string_type_with_no_nil_value_after_destroyed_twice
|
383
|
+
ps = ParanoidString.create!(:deleted => 'not dead')
|
384
|
+
2.times { ps.destroy }
|
385
|
+
assert_equal 0, ParanoidString.with_deleted.where(:id => ps).count
|
386
|
+
end
|
387
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class MultipleDefaultScopesTest < ParanoidBaseTest
|
4
|
+
def setup
|
5
|
+
setup_db
|
6
|
+
|
7
|
+
# Naturally, the default scope for humans is male. Sexism++
|
8
|
+
ParanoidHuman.create! :gender => 'male'
|
9
|
+
ParanoidHuman.create! :gender => 'male'
|
10
|
+
ParanoidHuman.create! :gender => 'male'
|
11
|
+
ParanoidHuman.create! :gender => 'female'
|
12
|
+
|
13
|
+
assert_equal 3, ParanoidHuman.count
|
14
|
+
assert_equal 4, ParanoidHuman.unscoped.count
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_fake_removal_with_multiple_default_scope
|
18
|
+
ParanoidHuman.first.destroy
|
19
|
+
assert_equal 2, ParanoidHuman.count
|
20
|
+
assert_equal 3, ParanoidHuman.with_deleted.count
|
21
|
+
assert_equal 1, ParanoidHuman.only_deleted.count
|
22
|
+
assert_equal 4, ParanoidHuman.unscoped.count
|
23
|
+
|
24
|
+
ParanoidHuman.destroy_all
|
25
|
+
assert_equal 0, ParanoidHuman.count
|
26
|
+
assert_equal 3, ParanoidHuman.with_deleted.count
|
27
|
+
assert_equal 3, ParanoidHuman.with_deleted.count
|
28
|
+
assert_equal 4, ParanoidHuman.unscoped.count
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_real_removal_with_multiple_default_scope
|
32
|
+
# two-step
|
33
|
+
ParanoidHuman.first.destroy
|
34
|
+
ParanoidHuman.only_deleted.first.destroy
|
35
|
+
assert_equal 2, ParanoidHuman.count
|
36
|
+
assert_equal 2, ParanoidHuman.with_deleted.count
|
37
|
+
assert_equal 0, ParanoidHuman.only_deleted.count
|
38
|
+
assert_equal 3, ParanoidHuman.unscoped.count
|
39
|
+
|
40
|
+
ParanoidHuman.first.destroy!
|
41
|
+
assert_equal 1, ParanoidHuman.count
|
42
|
+
assert_equal 1, ParanoidHuman.with_deleted.count
|
43
|
+
assert_equal 0, ParanoidHuman.only_deleted.count
|
44
|
+
assert_equal 2, ParanoidHuman.unscoped.count
|
45
|
+
|
46
|
+
ParanoidHuman.delete_all!
|
47
|
+
assert_equal 0, ParanoidHuman.count
|
48
|
+
assert_equal 0, ParanoidHuman.with_deleted.count
|
49
|
+
assert_equal 0, ParanoidHuman.only_deleted.count
|
50
|
+
assert_equal 1, ParanoidHuman.unscoped.count
|
51
|
+
end
|
52
|
+
end
|