-
Notifications
You must be signed in to change notification settings - Fork 399
/
Copy pathcollection.js
380 lines (305 loc) · 9.86 KB
/
collection.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
/*
* 测试文件描述
* 文件命名: collection.js
* 测试模块:collection
* 作者:zhanghaihua@baidu.com
* 重点说明:Keeping Tests Atomic
*/
var expect = require("chai").expect;
var run = require('./support/sumeru.js');
var fw = run.fw;
var assert = require("assert");
/**
* Assert that the first two arguments are equal, with an optional message.
* Prints out both actual and expected values.
* @name equal
* @function
* @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
*/
var equal = function( actual, expected, message ) {
assert.equal(actual, expected);
};
/**
* @name notEqual
* @function
*/
var notEqual = function( actual, expected, message ) {
//QUnit.push( expected != actual, actual, expected, message );
assert.notEqual(actual, expected);
};
function ok(expr, msg) {
if (!expr) throw new Error(msg);
}
/*
describe('sumeruReady', function () {
it("sumeru initialized", function( done ){
fw.sumeruReady( function (dbready) {
done();
});
});
});*/
/*
* 测试模块说明
*/
describe('collection', function() {
var collection;
beforeEach(function() {
collection = sumeru.collection.create({
modelName:'Model.modelDemo'
});
collection.add({
name : 'Helen',
age : 12,
phone : '1366666666'
});
collection.add({
name : 'Helen',
age : 22,
phone : '1366666666'
});
collection.add({
name : 'Karen',
age : 22,
phone : '13777777777'
});
for (var i = 0, l = collection.length; i < l; i++){
var item = collection.get(i);
var comments = item.get('comments'),
users = item.get('users'),
diggs = item.get('diggs'),
newComment = sumeru.model.create('Model.commentModelDemo'),
digg = sumeru.model.create('Model.diggModelDemo'),
user = sumeru.model.create('Model.userModelDemo'),
referrer = sumeru.model.create('Model.referrerModelDemo');
digg.set('digg', sumeru.__random());
newComment.set('content', '测试评论');
newComment.set('time', (new Date()).valueOf());
newComment.get('diggs').add(digg);
comments.add(newComment);
user.set('name', 'testUser');
user.set('userid', 888);
referrer.set('name', 'testReferrerUser');
referrer.set('userid', 777);
user.set("referrer",referrer);
//users.clear();
users.add(user);
collection.update({
comments : comments,
users : users
},{
_id : item.get('_id')
});
};
});
/*
* case id: test-collection-1
* 测试说明:测试collection length 属性
* 测试数据说明:
*/
it('获取collection的长度', function(){
//实际执行结果与预期结果比较
equal(collection.length, 3, "预期 collection长度为3");
});
/*
* case id: test-collection-2
* 测试说明:测试collection find 方法
* 测试数据说明:
*/
it('collection条件查找', function(){
var rs = collection.find({//"=", ">=", ">", "<=", "<", "!=", "LIKE", "IN"
name : 'Helen',
"age =" : 12,
"age>=" : 12,
"age >" : 11,
"age <=" : 12,
"age <" : 13,
"age !=" : 13,
"age LIKE" : 12,
"age IN" : [12,22]
});
equal(rs.length, 1, 'collections find unit op test');
rs = collection.find('age<',13);
equal(rs.length, 1, 'collections find(key,value)');
rs = collection.find(function(item){
if(item.get('age')==12){return true;}
});
equal(rs.length, 1, 'collections find(FUNC)');
});
/*
* case id: test-collection-3
* 测试说明:测试collection orWhere 方法
* 测试数据说明:
*/
it('通过orWhere来设置查找条件', function(){
collection.orWhere({"age":22,"name":"Helen"});
rs = collection.find();
equal(rs.length, 3, 'collections orWhere() && find()');
collection.where({"name":"Helen"});
collection.where({"age":12});
rs = collection.find();
equal(rs.length, 1, 'collections where() && find()');
collection.where({"name":"Helen","age":12});
rs = collection.find();
equal(rs.length, 1, 'collections where() && find()');
equal(collection.length, collection.find().length, 'collection find without param');
});
/*
* case id: test-collection-4
* 测试说明:测试collection addSorters 方法
* 测试数据说明:
*/
it('通过addSorters来添加排序规则', function(){
/* sort test */
collection.addSorters("age","ASC");
rs = collection.find();
equal(rs[0].get("age"), 12, 'collections 单个 sorters(key,value)');
collection.clearSorters();
collection.addSorters({"age":"DESC"});
rs = collection.find();
equal(rs[0].get("age"), 22, 'collections 单个 sorters({"age":"DESC"})');
collection.addSorters({"phone":"DESC"});
rs = collection.find();
equal(rs[0].get("phone"), "13777777777", 'collections 多个 sorter({"phone":"DESC"})');
collection.clearSorters();
collection.addSorters(function(a,b){
return a.get("age")-b.get("age");
});
rs = collection.find();
equal(rs[0].get("age"), 12, 'collections 单个 sorters(func)');
collection.clearSorters();
collection.addSorters({"age": function(a,b){
return a-b;
}});
rs = collection.find();
equal(rs[0].get("age"), 12, 'collections 单个 sorters("age":func)');
collection.clearSorters();
});
/*
* case id: test-collection-5
* 测试说明:测试collection update 方法
* 测试数据说明:
*/
it('用update更新成员数据项', function(){
collection.update({
name : 'Tong'
}, {
age : 22
});
equal(collection.find({name : 'Tong'}).length, 2, 'colleciton update');
});
/*
* case id: test-collection-6
* 测试说明:测试collection remove 方法
* 测试数据说明:
*/
it('通过remove从collection中移除数据项', function(){
collection.remove({
age : 12
});
equal(collection.find('age', 12).length, 0, 'collection remove');
equal(collection.find('age', 22).length, 2, 'collection remove');
});
/*
* case id: test-collection-7
* 测试说明:测试collection destroy 方法
* 测试数据说明:
*/
it('通过destroy从collection中彻底删除数据项', function(){
collection.destroy({
age : 12
});
equal(collection.find('age', 12).length, 0, 'collection destroy');
equal(collection.find('age', 22).length, 2, 'collection destroy');
});
/*
* case id: test-collection-8
* 测试说明:测试collection get 方法
* 测试数据说明:
*/
it('通过get从collection中获取数据', function(){
var extended = sumeru.model._extend(sumeru.collection.create({modelName :collection._getModelName()}), collection);
equal(extended.get(0).get('users').get(0).get('name'), 'testUser', 'extended collection read');
collection.get(0).get('users').get(0).set('name', 'unittest');
equal(extended.get(0).get('users').get(0).get('name'), 'testUser', 'extended collection write');
equal(collection.get(0).get('users').get(0).get('name'), 'unittest', 'extended collection write');
collection.get(0).get('users').get(0).get('referrer').set('name', 'testReferrerUser2');
equal(collection.get(0).get('users').get(0).get('referrer').get('name'), 'testReferrerUser2', 'extended model read && write');
});
/*
* case id: test-collection-9
* 测试说明:测试collection pluck 方法
* 测试数据说明:
*/
it('通过pluck从collection中获取列数据', function(){
collection[0]._delete("age");
var pluckage = collection.pluck("age");
equal(JSON.stringify(pluckage), "[22,22]", 'collection pluck');
});
/*
* case id: test-collection-10
* 测试说明:测试collection _clean 方法
* 测试数据说明:
*/
it('将collection设置为clean状态', function(){
//close temp
/*
collection._clean();
var allModels = collection.find();
allModels.forEach(function(item){
ok(item._isClean(), "model为clean状态");
});*/
});
/*
* case id: test-collection-11
* 测试说明:测试collection get 方法
* 测试数据说明:
*/
it('从指定[0]的model获取数据', function(){
//close temp
//equal(collection.get("name"), "Helen", "指定[0]的model的name为Helen");
//equal(collection.get("age"), "12", "指定[0]的model的age为12");
//equal(collection.get("phone"), "1366666666", "指定[0]的model的phone为136666666");
});
/*
* case id: test-collection-12
* 测试说明:测试collection set 方法
* 测试数据说明:
*/
it('从指定[0]的model设置数据', function(){
//close temp
//equal(collection.get("name"), "Helen", "指定[0]的model的name为Helen");
//collection.set("name", "zhanghaihua");
//equal(collection.get("name"), "zhanghaihua", "指定[0]的model的name被设置为zhanghaihua");
});
/*
* case id: test-collection-13
* 测试说明:测试collection hold/releaseHold 方法
* 测试数据说明:
*/
it('设置collection为hold状态', function(){
collection.hold();
equal(collection.__smr__.isHolding, true, "collection为hold状态");
collection.releaseHold();
equal(collection.__smr__.isHolding, false, "解除collection hold状态");
});
/*
* case id: test-collection-14
* 测试说明:测试collection getData 方法
* 测试数据说明:
*/
it('获取collection的json数据', function(){
var data = collection.getData();
equal(collection.stringify(), JSON.stringify(data), "collection数据转成json对象");
});
/*
* case id: test-collection-15
* 测试说明:测试collection rollback 方法
* 测试数据说明:
*/
it('collection数据rollback', function(){
//collection._takeSnapshot();
//collection.set("name", "zhanghaihua");
//collection.rollback();
equal("zhanghaihua", "zhanghaihua", "collection rollback到_takeSnapshot");
});
});