Skip to content

Commit 2c60aeb

Browse files
jyspermleeyeh
authored andcommitted
Add tests for ignore hooks
1 parent 37e8b15 commit 2c60aeb

File tree

5 files changed

+200
-2
lines changed

5 files changed

+200
-2
lines changed

src/object.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,8 +1228,8 @@ module.exports = function(AV) {
12281228
console.trace('Unsupported hookName: ' + hookName);
12291229
}
12301230

1231-
if (!AV.masterKey || !AV._useMasterKey) {
1232-
console.trace('ignoreHook required masterKey');
1231+
if (!AV.hookKey) {
1232+
console.trace('ignoreHook required hookKey');
12331233
}
12341234

12351235
if (!this._flags.__ignore_hooks) {

test/hooks.js

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
var IgnoreHookTest = AV.Object.extend('IgnoreHookTest');
2+
3+
describe('hooks', function() {
4+
it('Object#save (new object)', function() {
5+
var object = new IgnoreHookTest();
6+
object.set('title', 'test');
7+
return object.save().then(function() {
8+
return object.fetch(function(object) {
9+
expect(object.get('byBeforeSave')).to.be.ok();
10+
expect(object.get('byAfterSave')).to.be.ok();
11+
});
12+
});
13+
});
14+
15+
it('Object#save (new object) disableBeforeHook', function() {
16+
var object = new IgnoreHookTest();
17+
object.set('title', 'test');
18+
object.disableBeforeHook();
19+
return object.save().then(function() {
20+
return object.fetch(function(object) {
21+
expect(object.get('byBeforeSave')).to.not.be.ok();
22+
expect(object.get('byAfterSave')).to.be.ok();
23+
});
24+
});
25+
});
26+
27+
it('Object#save (new object) ignore afterSave', function() {
28+
var object = new IgnoreHookTest();
29+
object.set('title', 'test');
30+
object.ignoreHook('afterSave');
31+
return object.save().then(function() {
32+
return object.fetch(function(object) {
33+
expect(object.get('byBeforeSave')).to.be.ok();
34+
expect(object.get('byAfterSave')).to.not.be.ok();
35+
});
36+
});
37+
});
38+
39+
it('Object#save (update object)', function() {
40+
var object = new IgnoreHookTest();
41+
object.set('title', 'test');
42+
return object.save().then(function() {
43+
object.set('title', 'something')
44+
return object.save().then(function() {
45+
return object.fetch(function(object) {
46+
expect(object.get('byBeforeSave')).to.be.ok();
47+
expect(object.get('byAfterSave')).to.be.ok();
48+
expect(object.get('byBeforeUpdate')).to.be.ok();
49+
expect(object.get('byAfterUpdate')).to.be.ok();
50+
});
51+
});
52+
});
53+
});
54+
55+
it('Object#save (update object) disableAfterHook', function() {
56+
var object = new IgnoreHookTest();
57+
object.set('title', 'test');
58+
return object.save().then(function() {
59+
object.set('title', 'something');
60+
object.disableAfterHook();
61+
return object.save().then(function() {
62+
return object.fetch(function(object) {
63+
expect(object.get('byBeforeSave')).to.be.ok();
64+
expect(object.get('byAfterSave')).to.be.ok();
65+
expect(object.get('byBeforeUpdate')).to.be.ok();
66+
expect(object.get('byAfterUpdate')).to.not.be.ok();
67+
});
68+
});
69+
});
70+
});
71+
72+
it('Object#save (modify children)', function() {
73+
var object = new IgnoreHookTest();
74+
var child1 = new IgnoreHookTest();
75+
var child2 = new IgnoreHookTest();
76+
child1.set('title', 'test');
77+
child1.disableBeforeHook();
78+
object.set('child1', child1);
79+
object.disableAfterHook();
80+
return object.save().then(function() {
81+
return object.fetch(function(object) {
82+
expect(object.get('byBeforeSave')).to.be.ok();
83+
expect(object.get('byAfterSave')).to.not.be.ok();
84+
}).then(function() {
85+
return child1.fetch(function(child1) {
86+
expect(child1.get('byBeforeSave')).to.not.be.ok();
87+
expect(child1.get('byAfterSave')).to.be.ok();
88+
});
89+
}).then(function() {
90+
child1.set('title', 'something');
91+
object.set('child1', child1);
92+
child2.set('title', 'test');
93+
child2.disableAfterHook();
94+
object.set('child2', child2);
95+
return object.save().then(function() {
96+
object.fetch(function(object) {
97+
expect(object.get('byBeforeUpdate')).to.be.ok();
98+
expect(object.get('byAfterUpdate')).to.not.be.ok();
99+
});
100+
});
101+
}).then(function() {
102+
child1.fetch().then(function(child1) {
103+
expect(child1.get('byBeforeUpdate')).to.not.be.ok();
104+
expect(child1.get('byAfterUpdate')).to.be.ok();
105+
});
106+
}).then(function() {
107+
child2.fetch().then(function(child2) {
108+
expect(child2.get('byBeforeSave')).to.be.ok();
109+
expect(child2.get('byAfterSave')).to.not.be.ok();
110+
});
111+
});
112+
});
113+
});
114+
115+
it('Object.saveAll', function() {
116+
var object = new IgnoreHookTest();
117+
var objectIgnoreBefore = new IgnoreHookTest();
118+
var objectIgnoreAfter = new IgnoreHookTest();
119+
var newObject = new IgnoreHookTest();
120+
var newObjectIgnoreAll = new IgnoreHookTest();
121+
122+
return Promise.all([object, objectIgnoreBefore, objectIgnoreAfter].map(function(object) {
123+
object.set('title', 'test');
124+
return object.save();
125+
})).then(function() {
126+
newObjectIgnoreAll.disableBeforeHook();
127+
newObjectIgnoreAll.disableAfterHook();
128+
129+
objectIgnoreBefore.disableBeforeHook();
130+
objectIgnoreAfter.disableAfterHook();
131+
132+
var objects = [object, objectIgnoreBefore, objectIgnoreAfter, newObject, newObjectIgnoreAll];
133+
134+
objects.forEach(function(object) {
135+
object.set('title', 'something');
136+
});
137+
138+
return AV.Object.saveAll(objects).then(function(objects) {
139+
return Promise.all(objects.map(function(object) {
140+
return object.fetch();
141+
})).then(function() {
142+
expect(object.get('byBeforeSave')).to.be.ok();
143+
expect(object.get('byAfterSave')).to.be.ok();
144+
expect(object.get('byBeforeUpdate')).to.be.ok();
145+
expect(object.get('byAfterUpdate')).to.be.ok();
146+
147+
expect(objectIgnoreBefore.get('byBeforeSave')).to.be.ok();
148+
expect(objectIgnoreBefore.get('byAfterSave')).to.be.ok();
149+
expect(objectIgnoreBefore.get('byBeforeUpdate')).to.not.be.ok();
150+
expect(objectIgnoreBefore.get('byAfterUpdate')).to.be.ok();
151+
152+
expect(objectIgnoreAfter.get('byBeforeSave')).to.be.ok();
153+
expect(objectIgnoreAfter.get('byAfterSave')).to.be.ok();
154+
expect(objectIgnoreAfter.get('byBeforeUpdate')).to.be.ok();
155+
expect(objectIgnoreAfter.get('byAfterUpdate')).to.not.be.ok();
156+
157+
expect(newObject.get('byBeforeSave')).to.be.ok();
158+
expect(newObject.get('byAfterSave')).to.be.ok();
159+
expect(newObject.get('byBeforeUpdate')).to.not.be.ok();
160+
expect(newObject.get('byAfterUpdate')).to.not.be.ok();
161+
162+
expect(newObjectIgnoreAll.get('byBeforeSave')).to.not.be.ok();
163+
expect(newObjectIgnoreAll.get('byAfterSave')).to.not.be.ok();
164+
expect(newObjectIgnoreAll.get('byBeforeUpdate')).to.not.be.ok();
165+
expect(newObjectIgnoreAll.get('byAfterUpdate')).to.not.be.ok();
166+
});
167+
});
168+
});
169+
});
170+
171+
it('Object#destroy', function() {
172+
var object = new IgnoreHookTest();
173+
object.set('title', 'test');
174+
return object.save().then(function() {
175+
object.set('title', 'something');
176+
object.disableBeforeHook();
177+
return object.destroy();
178+
});
179+
});
180+
181+
it('Object#destroyAll', function() {
182+
var object = new IgnoreHookTest();
183+
var objectIgnoreBefore = new IgnoreHookTest();
184+
objectIgnoreBefore.disableBeforeHook();
185+
186+
return Promise.all([object, objectIgnoreBefore].map(function(object) {
187+
return object.save();
188+
})).then(function() {
189+
return AV.Object.destroyAll([object, objectIgnoreBefore]);
190+
}).then(function(result) {
191+
expect(result[0].error).to.be.ok();
192+
expect(result[1].error).to.not.be.ok();
193+
});
194+
});
195+
});

test/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ require('./role.js');
1212
require('./status.js');
1313
require('./sms.js');
1414
require('./search.js');
15+
require('./hooks.js');

test/test.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
<script src="sms.js"></script>
3838
<script src="search.js"></script>
3939
<script src="cloud.js"></script>
40+
<script src="hooks.js"></script>
4041
<script>
4142
onload = function(){
4243
mocha.checkLeaks();

test/test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ AV.init({
1616
appId: '95TNUaOSUd8IpKNW0RSqSEOm-9Nh9j0Va',
1717
appKey: 'gNAE1iHowdQvV7cqpfCMGaGN',
1818
masterKey: 'ue9M9nqwD4MQNXD3oiN5rAOv',
19+
hookKey: '2iCbUZDgEF0siKxmCn2kVQXV'
1920
});
2021
AV.setProduction(true);

0 commit comments

Comments
 (0)