simply_stored 0.5.4 → 0.6.0

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.
@@ -1,468 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
- require File.expand_path(File.dirname(__FILE__) + '/fixtures/couch')
3
-
4
- class SoftDeletableTest < Test::Unit::TestCase
5
- context "when using soft deletable" do
6
- setup do
7
- CouchPotato::Config.database_name = 'simply_stored_test'
8
- recreate_db
9
- end
10
- should "know when it is enabled" do
11
- assert Hemorrhoid.soft_deleting_enabled?
12
- assert !User.soft_deleting_enabled?
13
- end
14
-
15
- should "define a :deleted_at attribute" do
16
- h = Hemorrhoid.new
17
- assert h.respond_to?(:deleted_at)
18
- assert h.respond_to?(:deleted_at=)
19
- assert_equal :deleted_at, Hemorrhoid.soft_delete_attribute
20
- end
21
-
22
- should "define a hard delete methods" do
23
- h = Hemorrhoid.new
24
- assert h.respond_to?(:destroy!)
25
- assert h.respond_to?(:delete!)
26
- end
27
-
28
- context "when deleting" do
29
- setup do
30
- @user = User.new(:name => 'BigT', :title => 'Dr.')
31
- @user.save!
32
- @hemorrhoid = Hemorrhoid.new
33
- @hemorrhoid.user = @user
34
- @hemorrhoid.save!
35
- end
36
-
37
- should "not delete the object but populate the soft_delete_attribute" do
38
- now = Time.now
39
- Time.stubs(:now).returns(now)
40
- assert_nil @hemorrhoid.deleted_at
41
- assert @hemorrhoid.delete
42
- assert_equal now, @hemorrhoid.deleted_at
43
- end
44
-
45
- should "survive reloads with the new attribute" do
46
- assert_nil @hemorrhoid.deleted_at
47
- assert @hemorrhoid.delete
48
- @hemorrhoid.reload
49
- assert_not_nil @hemorrhoid.deleted_at
50
- end
51
-
52
- should "know when it is deleted" do
53
- assert !@hemorrhoid.deleted?
54
- @hemorrhoid.delete
55
- assert @hemorrhoid.deleted?
56
- end
57
-
58
- should "not consider objects without soft-deleted as deleted" do
59
- assert !@user.deleted?
60
- @user.delete
61
- assert !@user.deleted?
62
- end
63
-
64
- should "not delete in DB" do
65
- CouchPotato.database.expects(:destroy_document).never
66
- @hemorrhoid.destroy
67
- end
68
-
69
- should "really delete if asked to" do
70
- CouchPotato.database.expects(:destroy_document).with(@hemorrhoid)
71
- @hemorrhoid.destroy!
72
- end
73
-
74
- context "callbacks" do
75
-
76
- should "still fire the callbacks" do
77
- @hemorrhoid = Hemorrhoid.create
78
- $before = nil
79
- $after = nil
80
- def @hemorrhoid.before_destroy_callback
81
- $before = "now"
82
- end
83
-
84
- def @hemorrhoid.after_destroy_callback
85
- $after = "now"
86
- end
87
-
88
- @hemorrhoid.destroy
89
-
90
- assert_not_nil $before
91
- assert_not_nil $after
92
- end
93
-
94
- should "not fire the callbacks on the real destroy if the object is already deleted" do
95
- @hemorrhoid = Hemorrhoid.create
96
- def @hemorrhoid.before_destroy_callback
97
- raise "Callback called even though #{skip_callbacks.inspect}"
98
- end
99
-
100
- def @hemorrhoid.after_destroy_callback
101
- raise "Callback called even though #{skip_callbacks.inspect}"
102
- end
103
-
104
- def @hemorrhoid.deleted?
105
- true
106
- end
107
-
108
- assert_nothing_raised do
109
- @hemorrhoid.destroy!
110
- end
111
- end
112
-
113
- should "not fire the callbacks on the real destroy if the object is not deleted" do
114
- @hemorrhoid = Hemorrhoid.create
115
- $before = nil
116
- $after = nil
117
- def @hemorrhoid.before_destroy_callback
118
- $before = "now"
119
- end
120
-
121
- def @hemorrhoid.after_destroy_callback
122
- $after = "now"
123
- end
124
-
125
- @hemorrhoid.destroy!
126
-
127
- assert_not_nil $before
128
- assert_not_nil $after
129
- end
130
- end
131
-
132
- context "when handling the dependent objects" do
133
- setup do
134
- @sub = SubHemorrhoid.new
135
- @sub.hemorrhoid = @hemorrhoid
136
- @sub.save!
137
-
138
- @easy_sub = EasySubHemorrhoid.new
139
- @easy_sub.hemorrhoid = @hemorrhoid
140
- @easy_sub.save!
141
-
142
- @rash = Rash.new
143
- @rash.hemorrhoid = @hemorrhoid
144
- @rash.save!
145
-
146
- @hemorrhoid.reload
147
- end
148
-
149
- should "delete them" do
150
- @hemorrhoid.delete
151
- @sub.reload
152
- assert @sub.deleted?
153
- assert_raise(SimplyStored::RecordNotFound) do
154
- EasySubHemorrhoid.find(@easy_sub.id, :with_deleted => true)
155
- end
156
- @rash = Rash.find(@rash.id)
157
- assert_nil @rash.hemorrhoid_id
158
- end
159
-
160
- should "really delete them if the parent is really deleted" do
161
- @hemorrhoid.delete!
162
- assert_raise(SimplyStored::RecordNotFound) do
163
- EasySubHemorrhoid.find(@sub.id, :with_deleted => true)
164
- end
165
-
166
- assert_raise(SimplyStored::RecordNotFound) do
167
- EasySubHemorrhoid.find(@easy_sub.id, :with_deleted => true)
168
- end
169
-
170
- @rash = Rash.find(@rash.id)
171
- assert_nil @rash.hemorrhoid_id
172
- end
173
-
174
- should "nullify dependents if they are soft-deletable and deleted" do
175
- small_rash = SmallRash.create(:hemorrhoid => @hemorrhoid)
176
- @hemorrhoid.reload
177
- @hemorrhoid.destroy
178
- assert @hemorrhoid.deleted?
179
- small_rash = SmallRash.find(small_rash.id)
180
- assert_nil small_rash.hemorrhoid_id
181
- end
182
-
183
- should "not nullify dependents if they are soft-deletable and not deleted" do
184
- small_rash = SmallRash.create(:hemorrhoid => @hemorrhoid)
185
- @hemorrhoid.reload
186
- assert !@hemorrhoid.deleted?
187
- small_rash = SmallRash.find(small_rash.id)
188
- assert_not_nil small_rash.hemorrhoid_id
189
- assert_equal @hemorrhoid.id, small_rash.hemorrhoid_id
190
- end
191
- end
192
-
193
- end
194
-
195
- context "when loading" do
196
- setup do
197
- @user = User.new(:name => 'BigT', :title => 'Dr.')
198
- @user.save!
199
- @hemorrhoid = Hemorrhoid.new
200
- @hemorrhoid.user = @user
201
- @hemorrhoid.save!
202
- end
203
-
204
- context "by id" do
205
- should "not be found by default" do
206
- @hemorrhoid.destroy
207
- assert_raise(SimplyStored::RecordNotFound) do
208
- Hemorrhoid.find(@hemorrhoid.id)
209
- end
210
- end
211
-
212
- should "be found if supplied with :with_deleted" do
213
- @hemorrhoid.destroy
214
-
215
- assert_not_nil Hemorrhoid.find(@hemorrhoid.id, :with_deleted => true)
216
- end
217
-
218
- should "not be found if it is really gone" do
219
- old_id = @hemorrhoid.id
220
- @hemorrhoid.destroy!
221
-
222
- assert_raise(SimplyStored::RecordNotFound) do
223
- Hemorrhoid.find(old_id)
224
- end
225
- end
226
-
227
- should "always reload" do
228
- @hemorrhoid.destroy
229
- assert_nothing_raised do
230
- @hemorrhoid.reload
231
- end
232
- assert_not_nil @hemorrhoid.deleted_at
233
- end
234
- end
235
-
236
- context "all" do
237
- setup do
238
- recreate_db
239
- @hemorrhoid = Hemorrhoid.create
240
- assert @hemorrhoid.destroy
241
- assert @hemorrhoid.reload.deleted?
242
- end
243
-
244
- should "not load deleted" do
245
- assert_equal [], Hemorrhoid.find(:all)
246
- assert_equal [], Hemorrhoid.find(:all, :with_deleted => false)
247
- end
248
-
249
- should "load non-deleted" do
250
- hemorrhoid = Hemorrhoid.create
251
- assert_not_equal [], Hemorrhoid.find(:all)
252
- assert_not_equal [], Hemorrhoid.find(:all, :with_deleted => false)
253
- end
254
-
255
- should "load deleted if asked to" do
256
- assert_equal [@hemorrhoid.id], Hemorrhoid.find(:all, :with_deleted => true).map(&:id)
257
- end
258
- end
259
-
260
- context "first" do
261
- setup do
262
- recreate_db
263
- @hemorrhoid = Hemorrhoid.create
264
- assert @hemorrhoid.destroy
265
- assert @hemorrhoid.reload.deleted?
266
- end
267
-
268
- should "not load deleted" do
269
- assert_nil Hemorrhoid.find(:first)
270
- assert_nil Hemorrhoid.find(:first, :with_deleted => false)
271
- end
272
-
273
- should "load non-deleted" do
274
- hemorrhoid = Hemorrhoid.create
275
- assert_not_nil Hemorrhoid.find(:first)
276
- assert Hemorrhoid.find(:first).is_a?(Hemorrhoid), Hemorrhoid.find(:first).inspect
277
- assert_not_nil Hemorrhoid.find(:first, :with_deleted => false)
278
- assert Hemorrhoid.find(:first, :with_deleted => false).is_a?(Hemorrhoid), Hemorrhoid.find(:first, :with_deleted => false).inspect
279
- end
280
-
281
- should "load deleted if asked to" do
282
- assert_equal @hemorrhoid, Hemorrhoid.find(:first, :with_deleted => true)
283
- end
284
- end
285
-
286
- context "find_by and find_all_by" do
287
- setup do
288
- recreate_db
289
- @hemorrhoid = Hemorrhoid.create(:nickname => 'Claas', :size => 3)
290
- @hemorrhoid.destroy
291
- end
292
-
293
- context "find_by" do
294
- should "not load deleted" do
295
- assert_nil Hemorrhoid.find_by_nickname('Claas')
296
- assert_nil Hemorrhoid.find_by_nickname('Claas', :with_deleted => false)
297
-
298
- assert_nil Hemorrhoid.find_by_nickname_and_size('Claas', 3)
299
- assert_nil Hemorrhoid.find_by_nickname_and_size('Claas', 3, :with_deleted => false)
300
- end
301
-
302
- should "load non-deleted" do
303
- hemorrhoid = Hemorrhoid.create(:nickname => 'OtherNick', :size => 3)
304
- assert_equal hemorrhoid.id, Hemorrhoid.find_by_nickname('OtherNick', :with_deleted => true).id
305
- assert_equal hemorrhoid.id, Hemorrhoid.find_by_nickname('OtherNick').id
306
- end
307
-
308
- should "load deleted if asked to" do
309
- assert_not_nil Hemorrhoid.find_by_nickname('Claas', :with_deleted => true)
310
- assert_equal @hemorrhoid.id, Hemorrhoid.find_by_nickname('Claas', :with_deleted => true).id
311
-
312
- assert_not_nil Hemorrhoid.find_by_nickname_and_size('Claas', 3, :with_deleted => true)
313
- assert_equal @hemorrhoid.id, Hemorrhoid.find_by_nickname_and_size('Claas', 3, :with_deleted => true).id
314
- end
315
- end
316
-
317
- context "find_all_by" do
318
- should "not load deleted" do
319
- assert_equal [], Hemorrhoid.find_all_by_nickname('Claas')
320
- assert_equal [], Hemorrhoid.find_all_by_nickname('Claas', :with_deleted => false)
321
-
322
- assert_equal [], Hemorrhoid.find_all_by_nickname_and_size('Claas', 3)
323
- assert_equal [], Hemorrhoid.find_all_by_nickname_and_size('Claas', 3, :with_deleted => false)
324
- end
325
-
326
- should "load non-deleted" do
327
- hemorrhoid = Hemorrhoid.create(:nickname => 'Lampe', :size => 4)
328
- assert_equal [hemorrhoid.id], Hemorrhoid.find_all_by_nickname('Lampe').map(&:id)
329
- end
330
-
331
- should "load deleted if asked to" do
332
- assert_equal [@hemorrhoid.id], Hemorrhoid.find_all_by_nickname('Claas', :with_deleted => true).map(&:id)
333
- assert_equal [@hemorrhoid.id], Hemorrhoid.find_all_by_nickname_and_size('Claas', 3, :with_deleted => true).map(&:id)
334
- end
335
- end
336
-
337
- should "reuse the same view - when find_all_by is called first" do
338
- assert_equal [], Hemorrhoid.find_all_by_nickname('Claas')
339
- assert_nil Hemorrhoid.find_by_nickname('Claas')
340
- end
341
-
342
- should "reuse the same view - when find_by is called first" do
343
- assert_nil Hemorrhoid.find_by_nickname('Claas')
344
- assert_equal [], Hemorrhoid.find_all_by_nickname('Claas')
345
- end
346
- end
347
-
348
- context "by relation" do
349
- setup do
350
- @hemorrhoid.destroy
351
- end
352
-
353
- context "has_many" do
354
- should "not load deleted by default" do
355
- assert_equal [], @user.hemorrhoids
356
- end
357
-
358
- should "load deleted if asked to" do
359
- assert_equal [@hemorrhoid.id], @user.hemorrhoids(:with_deleted => true).map(&:id)
360
- end
361
- end
362
-
363
- context "has_many :through" do
364
- setup do
365
- @user = User.create(:name => 'BigT', :title => 'Dr.')
366
- @pain = Pain.create
367
-
368
- @hemorrhoid = Hemorrhoid.new
369
- @hemorrhoid.user = @user
370
- @hemorrhoid.pain = @pain
371
- @hemorrhoid.save!
372
-
373
- @hemorrhoid.destroy
374
- end
375
-
376
- should "not load deleted by default" do
377
- assert_equal [], @user.pains
378
- end
379
-
380
- should "load deleted if asked to" do
381
- assert_equal [@pain.id], @user.pains(:with_deleted => true).map(&:id)
382
- end
383
- end
384
-
385
- context "has_one" do
386
- setup do
387
- @spot = Spot.create
388
-
389
- @hemorrhoid = Hemorrhoid.new
390
- @hemorrhoid.spot = @spot
391
- @hemorrhoid.save!
392
-
393
- @hemorrhoid.destroy
394
- end
395
-
396
- should "not load deleted by default" do
397
- assert_nil @spot.hemorrhoid
398
- end
399
-
400
- should "load deleted if asked to" do
401
- assert_equal @hemorrhoid.id, @spot.hemorrhoid(:with_deleted => true).id
402
- end
403
- end
404
-
405
- context "belongs_to" do
406
- setup do
407
- @hemorrhoid = Hemorrhoid.new
408
- @hemorrhoid.save!
409
-
410
- @sub = SubHemorrhoid.new
411
- @sub.hemorrhoid = @hemorrhoid
412
- @sub.save!
413
-
414
- @hemorrhoid.destroy
415
- end
416
-
417
- should "not load deleted by default" do
418
- @sub.reload
419
- assert_raise(SimplyStored::RecordNotFound) do
420
- assert_nil @sub.hemorrhoid
421
- end
422
- end
423
-
424
- should "load deleted if asked to" do
425
- @sub.reload
426
- assert_equal @hemorrhoid.id, @sub.hemorrhoid(:with_deleted => true).id
427
- end
428
- end
429
-
430
- end
431
-
432
- end
433
-
434
- context "when counting" do
435
- setup do
436
- @hemorrhoid = Hemorrhoid.create(:nickname => 'Claas')
437
- assert @hemorrhoid.destroy
438
- assert @hemorrhoid.reload.deleted?
439
- end
440
-
441
- should "not count deleted" do
442
- assert_equal 0, Hemorrhoid.count
443
- assert_equal 0, Hemorrhoid.count(:with_deleted => false)
444
- end
445
-
446
- should "count non-deleted" do
447
- hemorrhoid = Hemorrhoid.create(:nickname => 'Claas')
448
- assert_equal 1, Hemorrhoid.count
449
- assert_equal 1, Hemorrhoid.count(:with_deleted => false)
450
- end
451
-
452
- should "count deleted if asked to" do
453
- assert_equal 1, Hemorrhoid.count(:with_deleted => true)
454
- end
455
-
456
- context "count_by" do
457
- should "not count deleted" do
458
- assert_equal 0, Hemorrhoid.count_by_nickname('Claas')
459
- assert_equal 0, Hemorrhoid.count_by_nickname('Claas', :with_deleted => false)
460
- end
461
-
462
- should "count deleted if asked to" do
463
- assert_equal 1, Hemorrhoid.count_by_nickname('Claas', :with_deleted => true)
464
- end
465
- end
466
- end
467
- end
468
- end
data/test/test_helper.rb DELETED
@@ -1,19 +0,0 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'bundler/setup'
4
- require 'active_support/testing/assertions'
5
- require 'shoulda'
6
- require 'mocha'
7
- $:.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
8
- puts File.expand_path(File.dirname(__FILE__) + "/lib")
9
- require 'simply_stored'
10
-
11
- class Test::Unit::TestCase
12
- include ActiveSupport::Testing::Assertions
13
-
14
- def recreate_db
15
- CouchPotato.couchrest_database.delete! rescue nil
16
- CouchPotato.couchrest_database.server.create_db CouchPotato::Config.database_name
17
- end
18
-
19
- end
@@ -1,142 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
- require File.expand_path(File.dirname(__FILE__) + '/fixtures/couch')
3
-
4
- class ValidationsTest < Test::Unit::TestCase
5
- context "with additional validations" do
6
- setup do
7
- CouchPotato::Config.database_name = 'simply_stored_test'
8
- recreate_db
9
- end
10
-
11
- context "with validates_inclusion_of" do
12
- should "validate inclusion of an attribute in an array" do
13
- category = Category.new(:name => "other")
14
- assert !category.save
15
- end
16
-
17
- should "validate when the attribute is an array" do
18
- category = Category.new(:name => ['drinks', 'food'])
19
- assert_nothing_raised do
20
- category.save!
21
- end
22
- end
23
-
24
- should "add an error message" do
25
- category = Category.new(:name => "other")
26
- category.valid?
27
- assert_match(/must be one or more of food, drinks, party/, category.errors.full_messages.first)
28
- end
29
-
30
- should "allow blank" do
31
- category = Category.new(:name => nil)
32
- assert category.valid?
33
- end
34
- end
35
-
36
- context "with validates_format_of" do
37
- class ValidatedUser
38
- include SimplyStored::Couch
39
- property :name
40
- validates_format_of :name, :with => /Paul/
41
- end
42
-
43
- should 'validate the format and fail when not matched' do
44
- user = ValidatedUser.new(:name => "John")
45
- assert !user.valid?
46
- end
47
-
48
- should 'succeed when matched' do
49
- user = ValidatedUser.new(:name => "Paul")
50
- assert user.valid?
51
- end
52
-
53
- should 'fail when empty' do
54
- user = ValidatedUser.new(:name => nil)
55
- assert !user.valid?
56
- end
57
-
58
- context "with allow_blank" do
59
- class ValidatedBlankUser
60
- include SimplyStored::Couch
61
- property :name
62
- validates_format_of :name, :with => /Paul/, :allow_blank => true
63
- end
64
-
65
- should 'not fail when nil' do
66
- user = ValidatedBlankUser.new(:name => nil)
67
- assert user.valid?
68
- end
69
-
70
- should 'not fail when empty string' do
71
- user = ValidatedBlankUser.new(:name => '')
72
- assert user.valid?
73
- end
74
-
75
- should 'fail when not matching' do
76
- user = ValidatedBlankUser.new(:name => 'John')
77
- assert !user.valid?
78
- end
79
-
80
- should 'not fail when matching' do
81
- user = ValidatedBlankUser.new(:name => 'Paul')
82
- assert user.valid?
83
- end
84
-
85
- end
86
- end
87
-
88
- context "with validates_uniqueness_of" do
89
- should "add a view on the unique attribute" do
90
- assert UniqueUser.by_name
91
- end
92
-
93
- should "set an error when a different with the same instance exists" do
94
- assert UniqueUser.create(:name => "Host Master")
95
- user = UniqueUser.create(:name => "Host Master")
96
- assert !user.valid?
97
- end
98
-
99
- should "not have an error when we're the only one around" do
100
- user = UniqueUser.create(:name => "Host Master")
101
- assert !user.new_record?
102
- end
103
-
104
- should "not have an error when it's the same instance" do
105
- user = UniqueUser.create(:name => "Host Master")
106
- user = UniqueUser.find(user.id)
107
- assert user.valid?
108
- end
109
-
110
- should 'have a nice error message' do
111
- assert UniqueUser.create(:name => "Host Master")
112
- user = UniqueUser.create(:name => "Host Master")
113
- assert_equal "Name is already taken", user.errors.on(:name)
114
- end
115
-
116
- should 'create a view to check with' do
117
- assert UniqueUser.respond_to?(:by_name)
118
- assert_equal :name, UniqueUser.by_name.send(:options)[:key]
119
- end
120
-
121
- should 'not overwrite the view when a custom one already exists' do
122
- assert_equal :email, UniqueUserWithAView.by_name.send(:options)[:key]
123
- end
124
- end
125
-
126
- context "equality" do
127
- should "know when two objects are equal" do
128
- user = UniqueUser.create(:name => "Host Master")
129
- other_user = UniqueUser.create(:name => "The other one")
130
- assert user == user
131
- assert user != other_user
132
- end
133
-
134
- should "not bail when comparing with non-SimplyStored objects" do
135
- user = UniqueUser.create(:name => "Host Master")
136
- assert 5 != user
137
- assert user != 5
138
- end
139
- end
140
-
141
- end
142
- end
data/test/views_test.rb DELETED
@@ -1,33 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
- require File.expand_path(File.dirname(__FILE__) + '/fixtures/couch')
3
-
4
- class CustomViewUser
5
- include SimplyStored::Couch
6
-
7
- property :tags
8
- view :by_tags, :type => SimplyStored::Couch::Views::ArrayPropertyViewSpec, :key => :tags
9
- end
10
-
11
- class ViewsTest < Test::Unit::TestCase
12
-
13
- context "Custom couch views" do
14
- setup do
15
- CouchPotato::Config.database_name = 'simply_stored_test'
16
- recreate_db
17
- end
18
-
19
- context "With array views" do
20
- should "find objects with one match of the array" do
21
- CustomViewUser.create(:tags => ["agile", "cool", "extreme"])
22
- CustomViewUser.create(:tags => ["agile"])
23
- assert_equal 2, CustomViewUser.find_all_by_tags("agile").size
24
- end
25
-
26
- should "find the object when the property is not an array" do
27
- CustomViewUser.create(:tags => "agile")
28
- assert_equal 1, CustomViewUser.find_all_by_tags("agile").size
29
-
30
- end
31
- end
32
- end
33
- end