Skip to content

Commit 3e31d7f

Browse files
committed
Adds e2e test to validate liveQuery hooks is properly called
1 parent 81b27eb commit 3e31d7f

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
@@ -146,6 +146,85 @@ describe('ParseLiveQueryServer', function() {
146146
parseServer.server.close(done);
147147
});
148148

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

150229
it('can handle connect command', function() {
151230
var 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)