/
chain.js
123 lines (98 loc) · 3.21 KB
/
chain.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
var persist = require("../../lib/persist");
var type = persist.type;
var nodeunit = require("nodeunit");
var util = require("util");
var testUtils = require("../../test_helpers/test_utils");
exports['Chain'] = nodeunit.testCase({
setUp: function(callback) {
var self = this;
this.Phone = persist.define("Phone", {
"number": { type: type.STRING, dbColumnName: 'numbr' }
});
this.Person = persist.define("Person", {
"name": type.STRING,
"age": type.INTEGER
}).hasMany(this.Phone);
testUtils.connect(persist, function(err, connection) {
if(err) { console.log(err); return; }
self.connection = connection;
self.person1 = new self.Person({ name: "Bob O'Neill", age: 21 });
self.person2 = new self.Person({ name: "john", age: 23 });
self.phone1 = new self.Phone({ person: self.person1, number: '111-2222' });
self.phone2 = new self.Phone({ person: self.person1, number: '222-3333' });
self.phone3 = new self.Phone({ person: self.person2, number: '333-4444' });
self.connection.save([self.person1, self.person2, self.phone1, self.phone2, self.phone3], function(err) {
if(err) { console.log(err); return; }
callback();
});
});
},
tearDown: function(callback) {
if(this.connection) {
this.connection.close();
}
callback();
},
"chain": function(test) {
var self = this;
var person3 = new self.Person({ name: "fred", age: 25 });
var phone1Id = self.phone1.id;
this.connection.chain([
person3.save,
self.Person.min('age'),
self.Person.max('age'),
self.phone3.delete,
self.person2.delete,
self.Person.orderBy('name').all,
self.Phone.orderBy('number').first,
self.Phone.count,
self.Phone.update(phone1Id, { number: '555-5555' }),
self.Phone.all,
self.Phone.deleteAll,
self.Phone.all
], function(err, results) {
if(err) { console.error(err); return; }
// person3.save
test.equal(results[0].name, 'fred');
// Person.min
test.equal(results[1], 21);
// Person.max
test.equal(results[2], 25);
// phone3.delete
test.ok(results[3]);
// person2.delete
test.ok(results[4]);
// person select all
test.equal(results[5].length, 2);
test.equal(results[5][0].name, "Bob O'Neill");
test.equal(results[5][1].name, "fred");
// phone select first
test.equal(results[6].number, "111-2222");
// phone select count
test.equal(results[7], 2);
// phone.update
test.ok(results[8]);
// phone all
test.equal(results[9].length, 2);
var updatedPhone1 = results[9].getById(phone1Id);
test.equal(updatedPhone1.number, '555-5555');
// phone.deleteAll
test.ok(results[10]);
// phone.all
test.equal(results[11].length, 0);
test.done();
});
},
"named chain": function(test) {
var self = this;
this.connection.chain({
minAge: self.Person.min('age'),
maxAge: self.Person.max('age'),
}, function(err, results) {
if(err) { console.error(err); return; }
test.equal(results.minAge, 21);
test.equal(results.maxAge, 23);
test.done();
});
}
});