simple_record 2.1.3 → 2.1.6

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.
data/test/test_shards.rb DELETED
@@ -1,148 +0,0 @@
1
- require 'test/unit'
2
- require File.join(File.dirname(__FILE__), "/../lib/simple_record")
3
- require File.join(File.dirname(__FILE__), "./test_helpers")
4
- require File.join(File.dirname(__FILE__), "./test_base")
5
- require "yaml"
6
- require 'aws'
7
- require_relative 'my_sharded_model'
8
-
9
- # Tests for SimpleRecord
10
- #
11
- class TestShards < TestBase
12
-
13
- def setup
14
- super
15
- delete_all MyShardedModel
16
- delete_all MyShardedByFieldModel
17
- end
18
-
19
- def teardown
20
- super
21
-
22
- end
23
-
24
- # We'll want to shard based on ID's, user decides how many shards and some mapping function will
25
- # be used to select the shard.
26
- def test_id_sharding
27
-
28
- mm = MyShardedModel.new(:name=>"single")
29
- mm.save
30
- sleep 1
31
- puts 'finding by id'
32
- mm2 = MyShardedModel.find(mm.id)
33
- p mm2
34
- assert_equal mm.id, mm2.id
35
- puts 'deleting'
36
- mm2.delete
37
- sleep 1
38
- mm3 = MyShardedModel.find(mm.id)
39
- assert_nil mm3
40
-
41
- puts "saving 20 now"
42
- saved = []
43
- 20.times do |i|
44
- mm = MyShardedModel.new(:name=>"name #{i}")
45
- mm.save
46
- saved << mm
47
- end
48
-
49
- # todo: assert that we're actually sharding
50
-
51
- puts "finding them all"
52
- found = []
53
- rs = MyShardedModel.find(:all)
54
- rs.each do |m|
55
- p m
56
- found << m
57
- end
58
- saved.each do |so|
59
- assert(found.find { |m1| m1.id == so.id })
60
- end
61
-
62
- puts "deleting all of them"
63
- found.each do |fo|
64
- fo.delete
65
- end
66
-
67
- puts "Now ensure that all are deleted"
68
- rs = MyShardedModel.find(:all)
69
- assert rs.size == 0
70
-
71
- puts "Testing belongs_to sharding"
72
-
73
-
74
- end
75
-
76
- def test_field_sharding
77
-
78
- states = MyShardedByFieldModel.shards
79
- puts "states=" + states.inspect
80
-
81
- mm = MyShardedByFieldModel.new(:name=>"single", :state=>"CA")
82
- mm.save
83
- sleep 1
84
- puts 'finding by id'
85
- mm2 = MyShardedByFieldModel.find(mm.id)
86
- p mm2
87
- assert_equal mm.id, mm2.id
88
- puts 'deleting'
89
- mm2.delete
90
- sleep 1
91
- mm3 = MyShardedByFieldModel.find(mm.id)
92
- assert_nil mm3
93
-
94
- puts "saving 20 now"
95
- saved = []
96
- 20.times do |i|
97
- mm = MyShardedByFieldModel.new(:name=>"name #{i}", :state=>states[i % states.size])
98
- mm.save
99
- p mm
100
- saved << mm
101
- end
102
-
103
- sleep 1
104
- # todo: assert that we're actually sharding
105
-
106
- puts "finding them all"
107
- found = []
108
- rs = MyShardedByFieldModel.find(:all)
109
- rs.each do |m|
110
- p m
111
- found << m
112
- end
113
- saved.each do |so|
114
- assert(found.find { |m1| m1.id == so.id })
115
- end
116
-
117
- rs = MyShardedByFieldModel.find(:all)
118
- rs.each do |m|
119
- p m
120
- found << m
121
- end
122
- saved.each do |so|
123
- assert(found.find { |m1| m1.id == so.id })
124
- end
125
-
126
- # Try to find on a specific known shard
127
- selects = SimpleRecord.stats.selects
128
- cali_models = MyShardedByFieldModel.find(:all, :shard => "CA")
129
- puts 'cali_models=' + cali_models.inspect
130
- assert_equal(5, cali_models.size)
131
- assert_equal(selects + 1, SimpleRecord.stats.selects)
132
-
133
- puts "deleting all of them"
134
- found.each do |fo|
135
- fo.delete
136
- end
137
- sleep 1
138
-
139
- puts "Now ensure that all are deleted"
140
- rs = MyShardedByFieldModel.find(:all)
141
- assert rs.size == 0
142
- end
143
-
144
- def test_time_sharding
145
-
146
- end
147
-
148
- end
@@ -1,693 +0,0 @@
1
- require 'test/unit'
2
- require File.join(File.dirname(__FILE__), "/../lib/simple_record")
3
- require File.join(File.dirname(__FILE__), "./test_helpers")
4
- require_relative "test_base"
5
- require "yaml"
6
- require 'aws'
7
- require_relative 'my_model'
8
- require_relative 'my_child_model'
9
- require_relative 'model_with_enc'
10
- require_relative 'my_simple_model'
11
-
12
- # Tests for SimpleRecord
13
- #
14
-
15
- class TestSimpleRecord < TestBase
16
-
17
-
18
- def test_save_get
19
- mm = MyModel.new
20
- mm.name = "Travis"
21
- mm.age = 32
22
- mm.cool = true
23
- mm.save
24
- sleep 1
25
-
26
- assert !mm.created.nil?
27
- assert !mm.updated.nil?
28
- assert !mm.id.nil?
29
- assert mm.age == 32
30
- assert mm.cool == true
31
- assert mm.name == "Travis"
32
-
33
- id = mm.id
34
- puts 'id=' + id.to_s
35
- # Get the object back
36
- mm2 = MyModel.find(id)
37
- #puts 'got=' + mm2.name + ' and he/she is ' + mm2.age.to_s + ' years old and he/she is cool? ' + mm2.cool.to_s
38
- #puts mm2.cool.class.name
39
- assert mm2.id == mm.id
40
- assert mm2.age == mm.age
41
- assert mm2.cool == mm.cool
42
- assert mm2.age == 32
43
- assert mm2.cool == true
44
- assert mm2.name == "Travis"
45
- assert mm2.created.is_a? DateTime
46
-
47
- # test nilification
48
- mm2.age = nil
49
- mm2.save
50
- puts mm2.errors.inspect
51
- sleep 1
52
- mm2 = MyModel.find(id)
53
- puts mm2.inspect
54
- assert mm2.age.nil?, "doh, age should be nil, but it's " + mm2.age.inspect
55
- end
56
-
57
-
58
- def test_updates
59
- mm = MyModel.new
60
- mm.name = "Travis"
61
- mm.age = 32
62
- mm.cool = true
63
- mm.s1 = "Initial value"
64
- mm.save
65
- id = mm.id
66
- sleep 1
67
-
68
- mm = MyModel.find(id)
69
- mm.name = "Travis2"
70
- mm.age = 10
71
- mm.cool = false
72
- mm.s1 = "" # test blank string
73
-
74
- puts 'mm=' + mm.inspect
75
- mm.save
76
- sleep 1
77
-
78
- puts 'mm2=' + mm.inspect
79
-
80
- assert mm.s1 == "", "mm.s1 is not empty string, it is " + mm.s1.inspect
81
-
82
- mm = MyModel.find(id)
83
- assert mm.name == "Travis2", "Name was not Travis2, it was #{mm.name}"
84
- assert mm.age == 10
85
- assert mm.cool == false
86
- assert mm.s1 == "", "mm.s1 is not empty string, it is #{mm.s1.inspect}"
87
-
88
- end
89
-
90
- def test_funky_values
91
- mm = MyModel.new(:name=>"Funky")
92
- mm.s1 = "other/2009-11-10/04/84.eml" # reported here: http://groups.google.com/group/simple-record/browse_thread/thread/3659e82491d03a2c?hl=en
93
- assert mm.save
94
- assert mm.errors.size == 0
95
-
96
- mm2 = MyModel.find(mm.id)
97
- puts 'mm2=' + mm2.inspect
98
-
99
- end
100
-
101
-
102
- def test_create
103
- mm = MyModel.create(:name=>"Travis", :age=>32, :cool=>true)
104
- puts 'mm=' + mm.inspect
105
- assert !mm.id.nil?
106
- end
107
-
108
- def test_bad_query
109
- assert_raise Aws::AwsError do
110
- mm2 = MyModel.find(:all, :conditions=>["name =4?", "1"])
111
- end
112
- end
113
-
114
- def test_batch_save
115
- items = []
116
- mm = MyModel.new
117
- mm.name = "Travis"
118
- mm.age = 32
119
- mm.cool = true
120
- items << mm
121
- mm = MyModel.new
122
- mm.name = "Tritt"
123
- mm.age = 44
124
- mm.cool = false
125
- items << mm
126
- MyModel.batch_save(items)
127
- sleep 2
128
- items.each do |item|
129
- puts 'id=' + item.id
130
- new_item = MyModel.find(item.id)
131
- #puts 'new=' + new_item.inspect
132
- assert item.id == new_item.id
133
- assert item.name == new_item.name
134
- assert item.cool == new_item.cool
135
- end
136
- end
137
-
138
- # Testing getting the association ID without materializing the obejct
139
- def test_get_belongs_to_id
140
- mm = MyModel.new
141
- mm.name = "Parent"
142
- mm.age = 55
143
- mm.cool = true
144
- mm.save
145
-
146
- child = MyChildModel.new
147
- child.name = "Child"
148
- child.my_model = mm
149
- puts 'c1=' + child.inspect
150
- puts 'mmid1=' + child.my_model_id.to_s
151
- assert child.my_model_id == mm.id
152
- child.save
153
- puts 'mmid2=' + child.my_model_id.to_s
154
-
155
- puts "child=" + child.inspect
156
- sleep 1
157
-
158
- child = MyChildModel.find(child.id)
159
- puts "child find=" + child.inspect
160
- puts "child.my_model_id = " + child.my_model_id.to_s
161
- assert !child.my_model_id.nil?
162
- assert !child.my_model.nil?
163
- assert child.my_model_id == mm.id
164
- end
165
-
166
- def test_callbacks
167
-
168
-
169
- mm = MyModel.new
170
- assert !mm.save
171
- assert mm.errors.count == 1 # name is required
172
-
173
- # test queued callback before_create
174
- mm.name = "Travis"
175
- assert mm.save
176
- sleep 1
177
- # now nickname should be set on before_create
178
- assert mm.nickname == mm.name
179
-
180
- mm2 = MyModel.find(mm.id)
181
- assert_equal mm2.nickname, mm.nickname
182
- assert_equal mm2.name, mm.name
183
-
184
-
185
- end
186
-
187
- def test_dirty
188
- mm = MyModel.new
189
- mm.name = "Travis"
190
- mm.age = 32
191
- mm.cool = true
192
- mm.save
193
- id = mm.id
194
- puts 'id=' + id.to_s
195
- sleep 1
196
- # Get the object back
197
- mm2 = MyModel.find(id)
198
- puts 'mm2=' + mm2.inspect
199
- puts 'got=' + mm2.name.to_s + ' and he/she is ' + mm2.age.to_s + ' years old and he/she is cool? ' + mm2.cool.to_s
200
- assert mm2.id == mm.id
201
- assert mm2.age == mm.age
202
- assert mm2.cool == mm.cool
203
-
204
- mm2.name = "Travis 2"
205
- mm2.save(:dirty=>true)
206
-
207
- # todo: how do we assert this? perhaps change a value directly in sdb and see that it doesn't get overwritten.
208
- # or check stats and ensure only 1 attribute was put
209
-
210
- # Test to ensure that if an item is not dirty, sdb doesn't get hit
211
- puts SimpleRecord.stats.saves.to_s
212
- SimpleRecord.stats.clear
213
- mm2.save(:dirty=>true)
214
- puts SimpleRecord.stats.saves.to_s
215
- assert SimpleRecord.stats.saves == 0
216
-
217
- mmc = MyChildModel.new
218
- mmc.my_model = mm
219
- mmc.x = mm
220
- mmc.save
221
-
222
- sleep 1
223
-
224
- mmc2 = MyChildModel.find(mmc.id)
225
- assert mmc2.my_model_id == mmc.my_model_id, "mm2.my_model_id=#{mmc2.my_model_id} mmc.my_model_id=#{mmc.my_model_id}"
226
- puts 'setting my_model to nil'
227
- mmc2.my_model = nil
228
- mmc2.x = nil
229
- puts 'saving my_model to nil'
230
- SimpleRecord.stats.clear
231
- assert mmc2.save(:dirty=>true)
232
- assert SimpleRecord.stats.saves == 1, "saves is #{SimpleRecord.stats.saves}" # 1 put only for updated, should have a count of attributes saved in stats
233
- assert SimpleRecord.stats.deletes == 1, "deletes is #{SimpleRecord.stats.deletes}"
234
- assert mmc2.id == mmc.id
235
- assert mmc2.my_model_id == nil
236
- assert mmc2.my_model == nil, "my_model not nil? #{mmc2.my_model.inspect}"
237
-
238
- sleep 1
239
-
240
- mmc3 = MyChildModel.find(mmc.id)
241
- puts "mmc3 1 =" + mmc3.inspect
242
- assert mmc3.my_model_id == nil, "my_model_id not nil? #{mmc3.my_model_id.inspect}"
243
- assert mmc3.my_model == nil
244
-
245
- mm3 = MyModel.new(:name=>"test")
246
- assert mm3.save
247
- sleep 1
248
-
249
- mmc3.my_model = mm3
250
- assert mmc3.my_model_changed?
251
- assert mmc3.save(:dirty=>true)
252
- assert mmc3.my_model_id == mm3.id
253
- assert mmc3.my_model.id == mm3.id
254
-
255
- sleep 1
256
- mmc3 = MyChildModel.find(mmc3.id)
257
- puts "mmc3=" + mmc3.inspect
258
- assert mmc3.my_model_id == mm3.id, "my_model_id=#{mmc3.my_model_id.inspect} mm3.id=#{mm3.id.inspect}"
259
- assert mmc3.my_model.id == mm3.id
260
-
261
- mmc3 = MyChildModel.find(mmc3.id)
262
- mmc3.my_model_id = mm2.id
263
- assert mmc3.my_model_id == mm2.id
264
- assert mmc3.changed?
265
- assert mmc3.my_model_changed?
266
- assert mmc3.my_model.id == mm2.id
267
-
268
- end
269
-
270
- # http://api.rubyonrails.org/classes/ActiveRecord/Dirty.html#M002136
271
- def test_changed
272
- mm = MySimpleModel.new
273
- mm.name = "Travis"
274
- mm.age = 32
275
- mm.cool = true
276
- mm.save
277
-
278
- puts 'changed?=' + mm.changed?.to_s
279
- p mm.changed
280
- assert !mm.changed?
281
- assert mm.changed.size == 0
282
- assert mm.changes.size == 0
283
- assert !mm.name_changed?
284
-
285
- mm.name = "Jim"
286
- assert mm.changed?
287
- assert mm.changed.size == 1
288
- assert mm.changed[0] == "name"
289
-
290
- assert mm.changes.size == 1
291
- puts 'CHANGES=' + mm.changes.inspect
292
- assert mm.changes["name"][0] == "Travis"
293
- assert mm.changes["name"][1] == "Jim"
294
-
295
- assert mm.name_changed?
296
- assert mm.name_was == "Travis", "was #{mm.name_was}"
297
- assert mm.name_change[0] == "Travis"
298
- assert mm.name_change[1] == "Jim"
299
-
300
- end
301
-
302
- def test_count
303
-
304
- SimpleRecord.stats.clear
305
-
306
- count = MyModel.find(:count) # select 1
307
- assert count > 0
308
-
309
- mms = MyModel.find(:all) # select 2
310
- puts 'mms=' + mms.inspect
311
- assert mms.size > 0 # select 3
312
- puts 'mms=' + mms.inspect
313
- assert mms.size == count, "size != count! size=" + mms.size.to_s + " count=" + count.to_s
314
- assert SimpleRecord.stats.selects == 3, "should have been 3 select, but was actually #{SimpleRecord.stats.selects}" # count should not have been called twice
315
-
316
- count = MyModel.find(:count, :conditions=>["name=?", "Travis"])
317
- assert count > 0
318
-
319
- mms = MyModel.find(:all, :conditions=>["name=?", "Travis"])
320
- assert mms.size > 0
321
- assert mms.size == count
322
-
323
- end
324
-
325
- def test_attributes_correct
326
- # child should contain child class attributes + parent class attributes
327
-
328
- #MyModel.defined_attributes.each do |a|
329
- #
330
- #end
331
- #MyChildModel.defined_attributes.inspect
332
-
333
- end
334
-
335
- def test_results_array
336
- mms = MyModel.find(:all) # select 2
337
- assert !mms.first.nil?
338
- assert !mms.last.nil?
339
- assert !mms.empty?
340
- assert mms.include?(mms[0])
341
-
342
- assert mms[2, 2].size == 2
343
- assert mms[2..5].size == 4
344
- assert mms[2...5].size == 3
345
-
346
- end
347
-
348
- def test_random_index
349
- create_my_models(120)
350
- mms = MyModel.find(:all)
351
- o = mms[85]
352
- puts 'o=' + o.inspect
353
- assert !o.nil?
354
- o = mms[111]
355
- puts 'o=' + o.inspect
356
- assert !o.nil?
357
- end
358
-
359
- def test_objects_in_constructor
360
- mm = MyModel.new(:name=>"model1")
361
- mm.save
362
- # my_model should be treated differently since it's a belong_to
363
- mcm = MyChildModel.new(:name=>"johnny", :my_model=>mm)
364
- mcm.save
365
- sleep 1
366
-
367
- assert mcm.my_model != nil
368
-
369
- mcm = MyChildModel.find(mcm.id)
370
- puts 'mcm=' + mcm.inspect
371
- assert mcm.my_model != nil
372
-
373
- end
374
-
375
-
376
- def test_nil_attr_deletion
377
- mm = MyModel.new
378
- mm.name = "Chad"
379
- mm.age = 30
380
- mm.cool = false
381
- mm.save
382
-
383
- sleep 1
384
-
385
- # Should have 1 age attribute
386
- sdb_atts = @@sdb.get_attributes('simplerecord_tests_my_models', mm.id, 'age')
387
- puts 'sdb_atts=' + sdb_atts.inspect
388
- assert sdb_atts[:attributes].size == 1, "hmmm, not size 1: " + sdb_atts[:attributes].size.to_s
389
-
390
- mm.age = nil
391
- mm.save
392
- sleep 1
393
-
394
- # Should be NIL
395
- assert mm.age == nil, "age is #{mm.age}"
396
-
397
- # Should have NO age attributes
398
- assert @@sdb.get_attributes('simplerecord_tests_my_models', mm.id, 'age')[:attributes].size == 0
399
- end
400
-
401
- def test_null
402
- puts Time.now.to_i.to_s
403
- TestHelpers.clear_out_my_models
404
-
405
- mm = MyModel.new(:name=>"birthay is null")
406
- mm.save
407
- mm2 = MyModel.new(:name=>"birthday is not null")
408
- mm2.birthday = Time.now
409
- mm2.save
410
- sleep 2
411
- mms = MyModel.find(:all, :conditions=>["birthday is null"])
412
- mms.each do |m|
413
- puts m.inspect
414
- end
415
- assert mms.size == 1
416
- assert mms[0].id = mm.id
417
- mms = MyModel.find(:all, :conditions=>["birthday is not null"])
418
- mms.each do |m|
419
- puts m.inspect
420
- end
421
- assert mms.size == 1
422
- assert mms[0].id = mm2.id
423
-
424
- end
425
-
426
- # Test to add support for IN
427
- def test_in_clause
428
- # mms = MyModel.find(:all)
429
-
430
- # mms2 = MyModel.find(:all, :conditions=>["id in ?"])
431
-
432
- end
433
-
434
- def test_base_attributes
435
- mm = MyModel.new()
436
- mm.name = "test name"
437
- mm.base_string = "in base class"
438
- mm.save_with_validation!
439
- sleep 1
440
-
441
- mm2 = MyModel.find(mm.id)
442
- assert mm2.base_string == mm.base_string
443
-
444
- mm2.base_string = "changed base string"
445
- mm2.save_with_validation!
446
- sleep 1
447
-
448
- mm3 = MyModel.find(mm2.id)
449
- assert mm3.base_string == mm2.base_string
450
- puts mm3.inspect
451
-
452
-
453
- end
454
-
455
- def test_dates
456
- mm = MyModel.new()
457
- mm.name = "test name"
458
- mm.date1 = Date.today
459
- mm.date2 = Time.now
460
- mm.date3 = DateTime.now
461
- mm.save
462
-
463
- sleep 1
464
-
465
- mm = MyModel.find(:first, :conditions=>["date1 >= ?", 1.days.ago.to_date])
466
- puts 'mm=' + mm.inspect
467
- assert mm.is_a? MyModel
468
-
469
- mm = MyModel.find(:first, :conditions=>["date2 >= ?", 1.minutes.ago])
470
- puts 'mm=' + mm.inspect
471
- assert mm.is_a? MyModel
472
-
473
- mm = MyModel.find(:first, :conditions=>["date3 >= ?", 1.minutes.ago])
474
- puts 'mm=' + mm.inspect
475
- assert mm.is_a? MyModel
476
-
477
- end
478
-
479
- def test_attr_encrypted
480
- require_relative 'model_with_enc'
481
- ssn = "123456789"
482
- password = "my_password"
483
-
484
- ob = ModelWithEnc.new
485
- ob.name = "my name"
486
- ob.ssn = ssn
487
- ob.password = password
488
- puts "ob before save=" + ob.inspect
489
- assert ssn == ob.ssn, "#{ssn} != #{ob.ssn} apparently!?"
490
- puts "#{ob.password.class.name} ob.password=#{ob.password} password=#{password}"
491
- assert password != ob.password # we know this doesn't work right
492
- assert ob.password == password, "#{ob.password.class.name} ob.password=#{ob.password} password=#{password}"
493
- ob.save
494
-
495
- # try also with constructor, just to be safe
496
- ob = ModelWithEnc.create(:ssn=>ssn, :name=>"my name", :password=>password)
497
- assert ssn == ob.ssn, "#{ssn} != #{ob.ssn} apparently!?"
498
- puts "#{ob.password.class.name} ob.password=#{ob.password} password=#{password}"
499
- assert password != ob.password # we know this doesn't work right
500
- assert ob.password == password, "#{ob.password.class.name} ob.password=#{ob.password} password=#{password}"
501
- puts "ob after save=" + ob.inspect
502
- assert ssn == ob.ssn
503
- assert ob.password == password, "#{ob.password.class.name} ob.password=#{ob.password} password=#{password}"
504
-
505
- sleep 2
506
-
507
- ob2 = ModelWithEnc.find(ob.id)
508
- puts 'ob2=' + ob2.inspect
509
- assert ob2.name == ob.name, "#{ob2.name} vs #{ob.name}"
510
- assert ob2.ssn == ob.ssn, "#{ob2.ssn} vs #{ob.ssn}"
511
- assert ob2.ssn == ssn, "#{ob2.ssn} vs #{ssn}"
512
- assert ob2.password == password, "#{ob2.password} vs #{password}"
513
- assert ob2.attributes["password"] != password
514
- assert ob2.password == ob.password, "#{ob2.password} vs #{ob.password}"
515
-
516
- end
517
-
518
- def test_non_persistent_attributes
519
- mm = MyModel.new({:some_np_att=>"word"})
520
- mm = MyModel.new({"some_other_np_att"=>"up"})
521
-
522
- end
523
-
524
- def test_atts_using_strings_and_symbols
525
- mm = MyModel.new({:name=>"myname"})
526
- mm2 = MyModel.new({"name"=>"myname"})
527
- assert_equal(mm.name, mm2.name)
528
-
529
- mm.save
530
- mm2.save
531
- sleep 1
532
-
533
- mm = MyModel.find(mm.id)
534
- mm2 = MyModel.find(mm2.id)
535
- assert_equal mm.name, mm2.name
536
- end
537
-
538
- def test_constructor_using_belongs_to_ids
539
- mm = MyModel.new({:name=>"myname"})
540
- mm.save
541
- sleep 1
542
-
543
- mm2 = MyChildModel.new({"name"=>"myname2", :my_model_id=>mm.id})
544
- puts 'mm2=' + mm2.inspect
545
- assert_equal mm.id, mm2.my_model_id, "#{mm.id} != #{mm2.my_model_id}"
546
- mm3 = mm2.my_model
547
- puts 'mm3=' + mm3.inspect
548
- assert_equal mm.name, mm3.name
549
-
550
- mm3 = MyChildModel.create(:my_model_id=>mm.id, :name=>"myname3")
551
-
552
- sleep 2
553
- mm4 = MyChildModel.find(mm3.id)
554
- assert_equal mm4.my_model_id, mm.id
555
- assert !mm4.my_model.nil?
556
-
557
- end
558
-
559
- def test_update_attributes
560
- mm = MyModel.new({:name=>"myname"})
561
- mm.save
562
-
563
- now = Time.now
564
- mm.update_attributes(:name=>"name2", :age=>21, "date2"=>now)
565
- assert mm.name == "name2", "Name is #{mm.name}"
566
- assert mm.age == 21
567
- # assert mm.date2.to_time.utc == now.utc, "#{mm.date2.class.name} #{mm.date2.to_time.inspect} != #{now.inspect}"
568
- sleep 1
569
-
570
- mm = MyModel.find(mm.id)
571
- assert mm.name == "name2", "Name is #{mm.name}"
572
- assert mm.age == 21, "Age is not 21, it is #{mm.age}"
573
- # assert mm.date2 == now, "Date is not correct, it is #{mm.date2}"
574
- end
575
-
576
- def test_explicit_class_name
577
- mm = MyModel.new({:name=>"myname"})
578
- mm.save
579
- sleep 1
580
-
581
- mm2 = MyChildModel.new({"name"=>"myname2"})
582
- mm2.x = mm
583
- assert mm2.x.id == mm.id
584
- mm2.save
585
- sleep 1
586
-
587
- mm3 = MyChildModel.find(mm2.id)
588
- puts "mm3.x=" + mm3.x.inspect
589
- assert mm3.x.id == mm.id
590
- end
591
-
592
- def test_storage_format
593
-
594
- mm = MyModel.new({:name=>"myname"})
595
- mm.date1 = Time.now
596
- mm.date2 = DateTime.now
597
- mm.save
598
- sleep 1
599
-
600
- raw = @@sdb.get_attributes(MyModel.domain, mm.id)
601
- puts "raw=" + raw.inspect
602
- assert raw[:attributes]["updated"][0].size == "2010-01-06T16:04:23".size
603
- assert raw[:attributes]["date1"][0].size == "2010-01-06T16:04:23".size
604
- assert raw[:attributes]["date2"][0].size == "2010-01-06T16:04:23".size
605
-
606
- end
607
-
608
- def test_empty_initialize
609
- mm = MyModel.new
610
-
611
- mme = ModelWithEnc.new
612
- mme = ModelWithEnc.new(:ssn=>"", :password=>"") # this caused encryptor errors
613
- mme = ModelWithEnc.new(:ssn=>nil, :password=>nil)
614
- end
615
-
616
- def test_string_ints
617
- mm = MyModel.new
618
- mm.name = "whatever"
619
- mm.age = "1"
620
- puts mm.inspect
621
-
622
- mm2 = MyModel.new
623
- mm2.name = "whatever2"
624
- mm2.age = 1
625
- params = {:name=>"scooby", :age=>"123"}
626
- mm3 = MyModel.new(params)
627
-
628
-
629
- assert mm.age == 1, "mm.age=#{mm.age}"
630
- assert mm2.age == 1
631
- assert mm3.age == 123
632
-
633
- mm.save!
634
- mm2.save!
635
- mm3.save!
636
- sleep 1
637
-
638
- assert mm.age == 1
639
- assert mm2.age == 1
640
- assert mm3.age == 123
641
-
642
- mmf1 = MyModel.find(mm.id)
643
- mmf2 = MyModel.find(mm2.id)
644
- mmf3 = MyModel.find(mm3.id)
645
-
646
- assert mmf1.age == 1
647
- assert mmf2.age == 1
648
- assert mmf3.age == 123
649
-
650
- mmf1.update_attributes({:age=>"456"})
651
-
652
- mmf1.age == 456
653
-
654
- end
655
-
656
- def test_box_usage
657
- mm = MyModel.new
658
- mm.name = "whatever"
659
- mm.age = "1"
660
- mm.save
661
- sleep 1
662
-
663
- mms = MyModel.all
664
-
665
- assert mms.box_usage && mms.box_usage > 0
666
- assert mms.request_id
667
-
668
- end
669
-
670
- def test_multi_value_attributes
671
-
672
- val = ['a', 'b', 'c']
673
- val2 = [1, 2, 3]
674
-
675
- mm = MyModel.new
676
- mm.name = val
677
- mm.age = val2
678
- assert_equal val, mm.name
679
- assert_equal val2, mm.age
680
- mm.save
681
-
682
- sleep 1
683
- mm = MyModel.find(mm.id)
684
- # Values are not returned in order
685
- assert_equal val, mm.name.sort
686
- assert_equal val2, mm.age.sort
687
-
688
-
689
-
690
-
691
- end
692
-
693
- end