mongo_mapper-unstable 2010.2.28 → 2010.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,243 +10,313 @@ class ModifierTest < Test::Unit::TestCase
10
10
  key :tags, Array
11
11
  end
12
12
  end
13
-
13
+
14
14
  def assert_page_counts(page, day_count, week_count, month_count)
15
15
  page.reload
16
16
  page.day_count.should == day_count
17
17
  page.week_count.should == week_count
18
18
  page.month_count.should == month_count
19
19
  end
20
-
21
- should "be able to increment with criteria and modifier hashes" do
22
- page = @page_class.create(:title => 'Home')
23
- page2 = @page_class.create(:title => 'Home')
24
-
25
- @page_class.increment({:title => 'Home'}, {
26
- :day_count => 1, :week_count => 2, :month_count => 3
27
- })
28
-
29
- assert_page_counts page, 1, 2, 3
30
- assert_page_counts page2, 1, 2, 3
31
- end
32
-
33
- should "be able to increment with ids and modifier hash" do
34
- page = @page_class.create(:title => 'Home')
35
- page2 = @page_class.create(:title => 'Home')
36
-
37
- @page_class.increment(page.id, page2.id, {
38
- :day_count => 1, :week_count => 2, :month_count => 3
39
- })
40
-
41
- assert_page_counts page, 1, 2, 3
42
- assert_page_counts page2, 1, 2, 3
43
- end
44
-
45
- should "be able to decrement with criteria and modifier hashes" do
46
- page = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
47
- page2 = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
48
-
49
- @page_class.decrement({:title => 'Home'}, {
50
- :day_count => 1, :week_count => 2, :month_count => 3
51
- })
52
-
53
- assert_page_counts page, 0, 0, 0
54
- assert_page_counts page2, 0, 0, 0
55
- end
56
-
57
- should "be able to decrement with ids and modifier hash" do
58
- page = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
59
- page2 = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
60
-
61
- @page_class.decrement(page.id, page2.id, {
62
- :day_count => 1, :week_count => 2, :month_count => 3
63
- })
64
-
65
- assert_page_counts page, 0, 0, 0
66
- assert_page_counts page2, 0, 0, 0
67
- end
68
-
69
- should "always decrement when decrement is called whether number is positive or negative" do
70
- page = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
71
- page2 = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
72
-
73
- @page_class.decrement(page.id, page2.id, {
74
- :day_count => -1, :week_count => 2, :month_count => -3
75
- })
76
-
77
- assert_page_counts page, 0, 0, 0
78
- assert_page_counts page2, 0, 0, 0
79
- end
80
-
81
- should "be able to set with criteria and modifier hashes" do
82
- page = @page_class.create(:title => 'Home')
83
- page2 = @page_class.create(:title => 'Home')
84
-
85
- @page_class.set({:title => 'Home'}, :title => 'Home Revised')
86
-
87
- page.reload
88
- page.title.should == 'Home Revised'
89
-
90
- page2.reload
91
- page2.title.should == 'Home Revised'
92
- end
93
-
94
- should "be able to set with ids and modifier hash" do
95
- page = @page_class.create(:title => 'Home')
96
- page2 = @page_class.create(:title => 'Home')
97
-
98
- @page_class.set(page.id, page2.id, :title => 'Home Revised')
99
-
100
- page.reload
101
- page.title.should == 'Home Revised'
102
-
103
- page2.reload
104
- page2.title.should == 'Home Revised'
105
- end
106
-
107
- should "be able to push with criteria and modifier hashes" do
108
- page = @page_class.create(:title => 'Home')
109
- page2 = @page_class.create(:title => 'Home')
110
-
111
- @page_class.push({:title => 'Home'}, :tags => 'foo')
112
-
113
- page.reload
114
- page.tags.should == %w(foo)
115
-
116
- page2.reload
117
- page.tags.should == %w(foo)
118
- end
119
-
120
- should "be able to push with ids and modifier hash" do
121
- page = @page_class.create(:title => 'Home')
122
- page2 = @page_class.create(:title => 'Home')
123
-
124
- @page_class.push(page.id, page2.id, :tags => 'foo')
125
-
126
- page.reload
127
- page.tags.should == %w(foo)
128
-
129
- page2.reload
130
- page.tags.should == %w(foo)
131
- end
132
20
 
133
- should "be able to push all with criteria and modifier hashes" do
134
- page = @page_class.create(:title => 'Home')
135
- page2 = @page_class.create(:title => 'Home')
136
- tags = %w(foo bar)
137
-
138
- @page_class.push_all({:title => 'Home'}, :tags => tags)
139
-
140
- page.reload
141
- page.tags.should == tags
142
-
143
- page2.reload
144
- page.tags.should == tags
145
- end
146
-
147
- should "be able to push all with ids and modifier hash" do
148
- page = @page_class.create(:title => 'Home')
149
- page2 = @page_class.create(:title => 'Home')
150
- tags = %w(foo bar)
151
-
152
- @page_class.push_all(page.id, page2.id, :tags => tags)
153
-
154
- page.reload
155
- page.tags.should == tags
156
-
157
- page2.reload
158
- page.tags.should == tags
159
- end
160
-
161
- should "be able to pull with criteria and modifier hashes" do
162
- page = @page_class.create(:title => 'Home', :tags => %w(foo bar))
163
- page2 = @page_class.create(:title => 'Home', :tags => %w(foo bar))
164
-
165
- @page_class.pull({:title => 'Home'}, :tags => 'foo')
166
-
167
- page.reload
168
- page.tags.should == %w(bar)
169
-
170
- page2.reload
171
- page.tags.should == %w(bar)
172
- end
173
-
174
- should "be able to pull with ids and modifier hash" do
175
- page = @page_class.create(:title => 'Home', :tags => %w(foo bar))
176
- page2 = @page_class.create(:title => 'Home', :tags => %w(foo bar))
177
-
178
- @page_class.pull(page.id, page2.id, :tags => 'foo')
179
-
180
- page.reload
181
- page.tags.should == %w(bar)
182
-
183
- page2.reload
184
- page.tags.should == %w(bar)
185
- end
21
+ context "using class methods" do
22
+ should "be able to increment with criteria and modifier hashes" do
23
+ page = @page_class.create(:title => 'Home')
24
+ page2 = @page_class.create(:title => 'Home')
186
25
 
187
- should "be able to pull all with criteria and modifier hashes" do
188
- page = @page_class.create(:title => 'Home', :tags => %w(foo bar baz))
189
- page2 = @page_class.create(:title => 'Home', :tags => %w(foo bar baz))
190
-
191
- @page_class.pull_all({:title => 'Home'}, :tags => %w(foo bar))
192
-
193
- page.reload
194
- page.tags.should == %w(baz)
195
-
196
- page2.reload
197
- page.tags.should == %w(baz)
198
- end
199
-
200
- should "be able to pull all with ids and modifier hash" do
201
- page = @page_class.create(:title => 'Home', :tags => %w(foo bar baz))
202
- page2 = @page_class.create(:title => 'Home', :tags => %w(foo bar baz))
203
-
204
- @page_class.pull_all(page.id, page2.id, :tags => %w(foo bar))
205
-
206
- page.reload
207
- page.tags.should == %w(baz)
208
-
209
- page2.reload
210
- page.tags.should == %w(baz)
211
- end
26
+ @page_class.increment({:title => 'Home'}, {
27
+ :day_count => 1, :week_count => 2, :month_count => 3
28
+ })
212
29
 
213
- should "be able to push uniq with criteria and modifier hash" do
214
- page = @page_class.create(:title => 'Home', :tags => 'foo')
215
- page2 = @page_class.create(:title => 'Home')
216
-
217
- @page_class.push_uniq({:title => 'Home'}, :tags => 'foo')
218
-
219
- page.reload
220
- page.tags.should == %w(foo)
221
-
222
- page2.reload
223
- page.tags.should == %w(foo)
224
- end
225
-
226
- should "be able to push uniq with ids and modifier hash" do
227
- page = @page_class.create(:title => 'Home', :tags => 'foo')
228
- page2 = @page_class.create(:title => 'Home')
229
-
230
- @page_class.push_uniq(page.id, page2.id, :tags => 'foo')
231
-
232
- page.reload
233
- page.tags.should == %w(foo)
234
-
235
- page2.reload
236
- page.tags.should == %w(foo)
237
- end
238
-
239
- should "be able to remove the last element the array" do
240
- page = @page_class.create(:title => 'Home', :tags => %w(foo bar))
241
- @page_class.pop(page.id, :tags => 1)
242
- page.reload
243
- page.tags.should == %w(foo)
30
+ assert_page_counts page, 1, 2, 3
31
+ assert_page_counts page2, 1, 2, 3
32
+ end
33
+
34
+ should "be able to increment with ids and modifier hash" do
35
+ page = @page_class.create(:title => 'Home')
36
+ page2 = @page_class.create(:title => 'Home')
37
+
38
+ @page_class.increment(page.id, page2.id, {
39
+ :day_count => 1, :week_count => 2, :month_count => 3
40
+ })
41
+
42
+ assert_page_counts page, 1, 2, 3
43
+ assert_page_counts page2, 1, 2, 3
44
+ end
45
+
46
+ should "be able to decrement with criteria and modifier hashes" do
47
+ page = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
48
+ page2 = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
49
+
50
+ @page_class.decrement({:title => 'Home'}, {
51
+ :day_count => 1, :week_count => 2, :month_count => 3
52
+ })
53
+
54
+ assert_page_counts page, 0, 0, 0
55
+ assert_page_counts page2, 0, 0, 0
56
+ end
57
+
58
+ should "be able to decrement with ids and modifier hash" do
59
+ page = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
60
+ page2 = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
61
+
62
+ @page_class.decrement(page.id, page2.id, {
63
+ :day_count => 1, :week_count => 2, :month_count => 3
64
+ })
65
+
66
+ assert_page_counts page, 0, 0, 0
67
+ assert_page_counts page2, 0, 0, 0
68
+ end
69
+
70
+ should "always decrement when decrement is called whether number is positive or negative" do
71
+ page = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
72
+ page2 = @page_class.create(:title => 'Home', :day_count => 1, :week_count => 2, :month_count => 3)
73
+
74
+ @page_class.decrement(page.id, page2.id, {
75
+ :day_count => -1, :week_count => 2, :month_count => -3
76
+ })
77
+
78
+ assert_page_counts page, 0, 0, 0
79
+ assert_page_counts page2, 0, 0, 0
80
+ end
81
+
82
+ should "be able to set with criteria and modifier hashes" do
83
+ page = @page_class.create(:title => 'Home')
84
+ page2 = @page_class.create(:title => 'Home')
85
+
86
+ @page_class.set({:title => 'Home'}, :title => 'Home Revised')
87
+
88
+ page.reload
89
+ page.title.should == 'Home Revised'
90
+
91
+ page2.reload
92
+ page2.title.should == 'Home Revised'
93
+ end
94
+
95
+ should "be able to set with ids and modifier hash" do
96
+ page = @page_class.create(:title => 'Home')
97
+ page2 = @page_class.create(:title => 'Home')
98
+
99
+ @page_class.set(page.id, page2.id, :title => 'Home Revised')
100
+
101
+ page.reload
102
+ page.title.should == 'Home Revised'
103
+
104
+ page2.reload
105
+ page2.title.should == 'Home Revised'
106
+ end
107
+
108
+ should "be able to push with criteria and modifier hashes" do
109
+ page = @page_class.create(:title => 'Home')
110
+ page2 = @page_class.create(:title => 'Home')
111
+
112
+ @page_class.push({:title => 'Home'}, :tags => 'foo')
113
+
114
+ page.reload
115
+ page.tags.should == %w(foo)
116
+
117
+ page2.reload
118
+ page.tags.should == %w(foo)
119
+ end
120
+
121
+ should "be able to push with ids and modifier hash" do
122
+ page = @page_class.create(:title => 'Home')
123
+ page2 = @page_class.create(:title => 'Home')
124
+
125
+ @page_class.push(page.id, page2.id, :tags => 'foo')
126
+
127
+ page.reload
128
+ page.tags.should == %w(foo)
129
+
130
+ page2.reload
131
+ page.tags.should == %w(foo)
132
+ end
133
+
134
+ should "be able to push all with criteria and modifier hashes" do
135
+ page = @page_class.create(:title => 'Home')
136
+ page2 = @page_class.create(:title => 'Home')
137
+ tags = %w(foo bar)
138
+
139
+ @page_class.push_all({:title => 'Home'}, :tags => tags)
140
+
141
+ page.reload
142
+ page.tags.should == tags
143
+
144
+ page2.reload
145
+ page.tags.should == tags
146
+ end
147
+
148
+ should "be able to push all with ids and modifier hash" do
149
+ page = @page_class.create(:title => 'Home')
150
+ page2 = @page_class.create(:title => 'Home')
151
+ tags = %w(foo bar)
152
+
153
+ @page_class.push_all(page.id, page2.id, :tags => tags)
154
+
155
+ page.reload
156
+ page.tags.should == tags
157
+
158
+ page2.reload
159
+ page.tags.should == tags
160
+ end
161
+
162
+ should "be able to pull with criteria and modifier hashes" do
163
+ page = @page_class.create(:title => 'Home', :tags => %w(foo bar))
164
+ page2 = @page_class.create(:title => 'Home', :tags => %w(foo bar))
165
+
166
+ @page_class.pull({:title => 'Home'}, :tags => 'foo')
167
+
168
+ page.reload
169
+ page.tags.should == %w(bar)
170
+
171
+ page2.reload
172
+ page.tags.should == %w(bar)
173
+ end
174
+
175
+ should "be able to pull with ids and modifier hash" do
176
+ page = @page_class.create(:title => 'Home', :tags => %w(foo bar))
177
+ page2 = @page_class.create(:title => 'Home', :tags => %w(foo bar))
178
+
179
+ @page_class.pull(page.id, page2.id, :tags => 'foo')
180
+
181
+ page.reload
182
+ page.tags.should == %w(bar)
183
+
184
+ page2.reload
185
+ page.tags.should == %w(bar)
186
+ end
187
+
188
+ should "be able to pull all with criteria and modifier hashes" do
189
+ page = @page_class.create(:title => 'Home', :tags => %w(foo bar baz))
190
+ page2 = @page_class.create(:title => 'Home', :tags => %w(foo bar baz))
191
+
192
+ @page_class.pull_all({:title => 'Home'}, :tags => %w(foo bar))
193
+
194
+ page.reload
195
+ page.tags.should == %w(baz)
196
+
197
+ page2.reload
198
+ page.tags.should == %w(baz)
199
+ end
200
+
201
+ should "be able to pull all with ids and modifier hash" do
202
+ page = @page_class.create(:title => 'Home', :tags => %w(foo bar baz))
203
+ page2 = @page_class.create(:title => 'Home', :tags => %w(foo bar baz))
204
+
205
+ @page_class.pull_all(page.id, page2.id, :tags => %w(foo bar))
206
+
207
+ page.reload
208
+ page.tags.should == %w(baz)
209
+
210
+ page2.reload
211
+ page.tags.should == %w(baz)
212
+ end
213
+
214
+ should "be able to push uniq with criteria and modifier hash" do
215
+ page = @page_class.create(:title => 'Home', :tags => 'foo')
216
+ page2 = @page_class.create(:title => 'Home')
217
+
218
+ @page_class.push_uniq({:title => 'Home'}, :tags => 'foo')
219
+
220
+ page.reload
221
+ page.tags.should == %w(foo)
222
+
223
+ page2.reload
224
+ page.tags.should == %w(foo)
225
+ end
226
+
227
+ should "be able to push uniq with ids and modifier hash" do
228
+ page = @page_class.create(:title => 'Home', :tags => 'foo')
229
+ page2 = @page_class.create(:title => 'Home')
230
+
231
+ @page_class.push_uniq(page.id, page2.id, :tags => 'foo')
232
+
233
+ page.reload
234
+ page.tags.should == %w(foo)
235
+
236
+ page2.reload
237
+ page.tags.should == %w(foo)
238
+ end
239
+
240
+ should "be able to remove the last element the array" do
241
+ page = @page_class.create(:title => 'Home', :tags => %w(foo bar))
242
+ @page_class.pop(page.id, :tags => 1)
243
+ page.reload
244
+ page.tags.should == %w(foo)
245
+ end
246
+
247
+ should "be able to remove the first element of the array" do
248
+ page = @page_class.create(:title => 'Home', :tags => %w(foo bar))
249
+ @page_class.pop(page.id, :tags => -1)
250
+ page.reload
251
+ page.tags.should == %w(bar)
252
+ end
244
253
  end
245
254
 
246
- should "be able to remove the first element of the array" do
247
- page = @page_class.create(:title => 'Home', :tags => %w(foo bar))
248
- @page_class.pop(page.id, :tags => -1)
249
- page.reload
250
- page.tags.should == %w(bar)
255
+ context "using instance methods" do
256
+ should "be able to increment with modifier hashes" do
257
+ page = @page_class.create
258
+
259
+ page.increment({:day_count => 1, :week_count => 2, :month_count => 3})
260
+
261
+ assert_page_counts page, 1, 2, 3
262
+ end
263
+
264
+ should "be able to decrement with modifier hashes" do
265
+ page = @page_class.create(:day_count => 1, :week_count => 2, :month_count => 3)
266
+
267
+ page.decrement({:day_count => 1, :week_count => 2, :month_count => 3})
268
+
269
+ assert_page_counts page, 0, 0, 0
270
+ end
271
+
272
+ should "always decrement when decrement is called whether number is positive or negative" do
273
+ page = @page_class.create(:day_count => 1, :week_count => 2, :month_count => 3)
274
+
275
+ page.decrement({:day_count => -1, :week_count => 2, :month_count => -3})
276
+
277
+ assert_page_counts page, 0, 0, 0
278
+ end
279
+
280
+ should "be able to set with modifier hashes" do
281
+ page = @page_class.create(:title => 'Home')
282
+
283
+ page.set(:title => 'Home Revised')
284
+
285
+ page.reload
286
+ page.title.should == 'Home Revised'
287
+ end
288
+
289
+ should "be able to push with modifier hashes" do
290
+ page = @page_class.create
291
+
292
+ page.push(:tags => 'foo')
293
+
294
+ page.reload
295
+ page.tags.should == %w(foo)
296
+ end
297
+
298
+ should "be able to pull with criteria and modifier hashes" do
299
+ page = @page_class.create(:tags => %w(foo bar))
300
+
301
+ page.pull(:tags => 'foo')
302
+
303
+ page.reload
304
+ page.tags.should == %w(bar)
305
+ end
306
+
307
+ should "be able to push uniq with criteria and modifier hash" do
308
+ page = @page_class.create(:tags => 'foo')
309
+ page2 = @page_class.create
310
+
311
+ page.push_uniq(:tags => 'foo')
312
+ page.push_uniq(:tags => 'foo')
313
+
314
+ page.reload
315
+ page.tags.should == %w(foo)
316
+
317
+ page2.reload
318
+ page.tags.should == %w(foo)
319
+ end
251
320
  end
321
+
252
322
  end
@@ -0,0 +1,64 @@
1
+ require 'test_helper'
2
+
3
+ class TimestampsTest < Test::Unit::TestCase
4
+ context "timestamping" do
5
+ setup do
6
+ @klass = Doc do
7
+ set_collection_name 'users'
8
+
9
+ key :first_name, String
10
+ key :last_name, String
11
+ key :age, Integer
12
+ key :date, Date
13
+ end
14
+ @klass.timestamps!
15
+ end
16
+
17
+ should "set created_at and updated_at on create" do
18
+ doc = @klass.new(:first_name => 'John', :age => 27)
19
+ doc.created_at.should be(nil)
20
+ doc.updated_at.should be(nil)
21
+ doc.save
22
+ doc.created_at.should_not be(nil)
23
+ doc.updated_at.should_not be(nil)
24
+ end
25
+
26
+ should "not overwrite created_at if it already exists" do
27
+ original_created_at = 1.month.ago
28
+ doc = @klass.new(:first_name => 'John', :age => 27, :created_at => original_created_at)
29
+ doc.created_at.to_i.should == original_created_at.to_i
30
+ doc.updated_at.should be_nil
31
+ doc.save
32
+ doc.created_at.to_i.should == original_created_at.to_i
33
+ doc.updated_at.should_not be_nil
34
+ end
35
+
36
+ should "set updated_at on field update but leave created_at alone" do
37
+ doc = @klass.create(:first_name => 'John', :age => 27)
38
+ old_created_at = doc.created_at
39
+ old_updated_at = doc.updated_at
40
+ doc.first_name = 'Johnny'
41
+
42
+ Timecop.freeze(Time.now + 5.seconds) do
43
+ doc.save
44
+ end
45
+
46
+ doc.created_at.should == old_created_at
47
+ doc.updated_at.should_not == old_updated_at
48
+ end
49
+
50
+ should "set updated_at on document update but leave created_at alone" do
51
+ doc = @klass.create(:first_name => 'John', :age => 27)
52
+ old_created_at = doc.created_at
53
+ old_updated_at = doc.updated_at
54
+
55
+ Timecop.freeze(Time.now + 5.seconds) do
56
+ @klass.update(doc._id, { :first_name => 'Johnny' })
57
+ end
58
+
59
+ doc = doc.reload
60
+ doc.created_at.should == old_created_at
61
+ doc.updated_at.should_not == old_updated_at
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class UserstampsTest < Test::Unit::TestCase
4
+ context "userstamping" do
5
+ setup do
6
+ @document = Doc do
7
+ set_collection_name 'users'
8
+ userstamps!
9
+ end
10
+ end
11
+
12
+ should "add creator_id key" do
13
+ @document.keys.keys.should include('creator_id')
14
+ end
15
+
16
+ should "add updater_id key" do
17
+ @document.keys.keys.should include('updater_id')
18
+ end
19
+
20
+ should "add belongs_to creator" do
21
+ @document.associations.keys.should include('creator')
22
+ end
23
+
24
+ should "add belongs_to updater" do
25
+ @document.associations.keys.should include('updater')
26
+ end
27
+ end
28
+ end
@@ -5,7 +5,7 @@ class Test::Unit::TestCase
5
5
  end_time = Time.now
6
6
 
7
7
  duration = end_time - begin_time
8
- threshold = 3.0
8
+ threshold = 5.0
9
9
 
10
10
  if duration > threshold
11
11
  puts "\nSLOW TEST: #{duration} - #{self.name}"
data/test/test_helper.rb CHANGED
@@ -11,10 +11,6 @@ require 'timecop'
11
11
  require 'mocha'
12
12
  require 'pp'
13
13
 
14
- if RUBY_VERSION.to_f < 1.9
15
- require 'leftright' rescue nil
16
- end
17
-
18
14
  require 'support/custom_matchers'
19
15
  require 'support/timing'
20
16