Skip to content

Commit

Permalink
Adds e2e test to validate liveQuery hooks is properly called
Browse files Browse the repository at this point in the history
  • Loading branch information
flovilmart committed Nov 26, 2017
1 parent 81b27eb commit 3e31d7f
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 3 deletions.
79 changes: 79 additions & 0 deletions spec/ParseLiveQueryServer.spec.js
Expand Up @@ -146,6 +146,85 @@ describe('ParseLiveQueryServer', function() {
parseServer.server.close(done);
});

it('properly passes the CLP to afterSave/afterDelete hook', function(done) {
function setPermissionsOnClass(className, permissions, doPut) {
var request = require('request');
let op = request.post;
if (doPut)
{
op = request.put;
}
return new Promise((resolve, reject) => {
op({
url: Parse.serverURL + '/schemas/' + className,
headers: {
'X-Parse-Application-Id': Parse.applicationId,
'X-Parse-Master-Key': Parse.masterKey,
},
json: true,
body: {
classLevelPermissions: permissions
}
}, (error, response, body) => {
if (error) {
return reject(error);
}
if (body.error) {
return reject(body);
}
return resolve(body);
})
});
}

let saveSpy;
let deleteSpy;
reconfigureServer({
liveQuery: {
classNames: ['Yolo']
}
}).then((parseServer) => {
saveSpy = spyOn(parseServer.config.liveQueryController, 'onAfterSave');
deleteSpy = spyOn(parseServer.config.liveQueryController, 'onAfterDelete');
return setPermissionsOnClass('Yolo', {
create: {'*': true},
delete: {'*': true}
})
}).then(() => {
const obj = new Parse.Object('Yolo');
return obj.save();
}).then((obj) => {
return obj.destroy();
}).then(() => {
expect(saveSpy).toHaveBeenCalled();
const saveArgs = saveSpy.calls.mostRecent().args;
expect(saveArgs.length).toBe(4);
expect(saveArgs[0]).toBe('Yolo');
expect(saveArgs[3]).toEqual({
get: {},
addField: {},
create: {'*': true},
find: {},
update: {},
delete: {'*': true},
});

expect(deleteSpy).toHaveBeenCalled();
const deleteArgs = deleteSpy.calls.mostRecent().args;
expect(deleteArgs.length).toBe(4);
expect(deleteArgs[0]).toBe('Yolo');
expect(deleteArgs[3]).toEqual({
get: {},
addField: {},
create: {'*': true},
find: {},
update: {},
delete: {'*': true},
});
done();
}).catch(done.fail);
});


it('can handle connect command', function() {
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
Expand Down
7 changes: 5 additions & 2 deletions spec/helper.js
Expand Up @@ -128,13 +128,16 @@ const reconfigureServer = changedConfiguration => {
});
}
try {
var parseServer;
const newConfiguration = Object.assign({}, defaultConfiguration, changedConfiguration, {
__indexBuildCompletionCallbackForTests: indexBuildPromise => indexBuildPromise.then(resolve, reject),
__indexBuildCompletionCallbackForTests: indexBuildPromise => indexBuildPromise.then(() => {
resolve(parseServer);
}, reject),
mountPath: '/1',
port,
});
cache.clear();
const parseServer = ParseServer.start(newConfiguration);
parseServer = ParseServer.start(newConfiguration);
parseServer.app.use(require('./testing-routes').router);
parseServer.expressApp.use('/1', (err) => {
console.error(err);
Expand Down
2 changes: 1 addition & 1 deletion src/rest.js
Expand Up @@ -83,7 +83,7 @@ function del(config, auth, className, objectId) {
// Notify LiveQuery server if possible
config.database.loadSchema().then((schemaController) => {
const perms = schemaController.perms[inflatedObject.className];
config.liveQueryController.onAfterDelete(inflatedObject.className, inflatedObject, perms);
config.liveQueryController.onAfterDelete(inflatedObject.className, inflatedObject, null, perms);
});
return triggers.maybeRunTrigger(triggers.Types.beforeDelete, auth, inflatedObject, null, config);
}
Expand Down

0 comments on commit 3e31d7f

Please sign in to comment.