Skip to content

Commit 7cf29bf

Browse files
committed
Adds e2e test to validate liveQuery hooks is properly called
1 parent d49a761 commit 7cf29bf

File tree

3 files changed

+85
-3
lines changed

3 files changed

+85
-3
lines changed

spec/ParseLiveQueryServer.spec.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,85 @@ describe('ParseLiveQueryServer', function() {
141141
parseServer.server.close(() => done());
142142
});
143143

144+
it('properly passes the CLP to afterSave/afterDelete hook', function(done) {
145+
function setPermissionsOnClass(className, permissions, doPut) {
146+
var request = require('request');
147+
let op = request.post;
148+
if (doPut)
149+
{
150+
op = request.put;
151+
}
152+
return new Promise((resolve, reject) => {
153+
op({
154+
url: Parse.serverURL + '/schemas/' + className,
155+
headers: {
156+
'X-Parse-Application-Id': Parse.applicationId,
157+
'X-Parse-Master-Key': Parse.masterKey,
158+
},
159+
json: true,
160+
body: {
161+
classLevelPermissions: permissions
162+
}
163+
}, (error, response, body) => {
164+
if (error) {
165+
return reject(error);
166+
}
167+
if (body.error) {
168+
return reject(body);
169+
}
170+
return resolve(body);
171+
})
172+
});
173+
}
174+
175+
let saveSpy;
176+
let deleteSpy;
177+
reconfigureServer({
178+
liveQuery: {
179+
classNames: ['Yolo']
180+
}
181+
}).then((parseServer) => {
182+
saveSpy = spyOn(parseServer.config.liveQueryController, 'onAfterSave');
183+
deleteSpy = spyOn(parseServer.config.liveQueryController, 'onAfterDelete');
184+
return setPermissionsOnClass('Yolo', {
185+
create: {'*': true},
186+
delete: {'*': true}
187+
})
188+
}).then(() => {
189+
const obj = new Parse.Object('Yolo');
190+
return obj.save();
191+
}).then((obj) => {
192+
return obj.destroy();
193+
}).then(() => {
194+
expect(saveSpy).toHaveBeenCalled();
195+
const saveArgs = saveSpy.calls.mostRecent().args;
196+
expect(saveArgs.length).toBe(4);
197+
expect(saveArgs[0]).toBe('Yolo');
198+
expect(saveArgs[3]).toEqual({
199+
get: {},
200+
addField: {},
201+
create: {'*': true},
202+
find: {},
203+
update: {},
204+
delete: {'*': true},
205+
});
206+
207+
expect(deleteSpy).toHaveBeenCalled();
208+
const deleteArgs = deleteSpy.calls.mostRecent().args;
209+
expect(deleteArgs.length).toBe(4);
210+
expect(deleteArgs[0]).toBe('Yolo');
211+
expect(deleteArgs[3]).toEqual({
212+
get: {},
213+
addField: {},
214+
create: {'*': true},
215+
find: {},
216+
update: {},
217+
delete: {'*': true},
218+
});
219+
done();
220+
}).catch(done.fail);
221+
});
222+
144223

145224
it('can handle connect command', function() {
146225
const parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});

spec/helper.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,16 @@ const reconfigureServer = changedConfiguration => {
128128
});
129129
}
130130
try {
131+
var parseServer;
131132
const newConfiguration = Object.assign({}, defaultConfiguration, changedConfiguration, {
132-
__indexBuildCompletionCallbackForTests: indexBuildPromise => indexBuildPromise.then(resolve, reject),
133+
__indexBuildCompletionCallbackForTests: indexBuildPromise => indexBuildPromise.then(() => {
134+
resolve(parseServer);
135+
}, reject),
133136
mountPath: '/1',
134137
port,
135138
});
136139
cache.clear();
137-
const parseServer = ParseServer.start(newConfiguration);
140+
parseServer = ParseServer.start(newConfiguration);
138141
parseServer.app.use(require('./testing-routes').router);
139142
parseServer.expressApp.use('/1', (err) => {
140143
console.error(err);

src/rest.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ function del(config, auth, className, objectId) {
8383
// Notify LiveQuery server if possible
8484
config.database.loadSchema().then((schemaController) => {
8585
const perms = schemaController.perms[inflatedObject.className];
86-
config.liveQueryController.onAfterDelete(inflatedObject.className, inflatedObject, perms);
86+
config.liveQueryController.onAfterDelete(inflatedObject.className, inflatedObject, null, perms);
8787
});
8888
return triggers.maybeRunTrigger(triggers.Types.beforeDelete, auth, inflatedObject, null, config);
8989
}

0 commit comments

Comments
 (0)