Fix mutating beforeSubscribe Query (#6868)
* Fix beforeSubscribe * Remove return value
This commit is contained in:
@@ -115,6 +115,95 @@ describe('ParseLiveQuery', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can handle mutate beforeSubscribe query', async done => {
|
||||||
|
await reconfigureServer({
|
||||||
|
liveQuery: {
|
||||||
|
classNames: ['TestObject'],
|
||||||
|
},
|
||||||
|
startLiveQueryServer: true,
|
||||||
|
verbose: false,
|
||||||
|
silent: true,
|
||||||
|
});
|
||||||
|
Parse.Cloud.beforeSubscribe(TestObject, request => {
|
||||||
|
const query = request.query;
|
||||||
|
query.equalTo('yolo', 'abc');
|
||||||
|
});
|
||||||
|
|
||||||
|
const object = new TestObject();
|
||||||
|
await object.save();
|
||||||
|
|
||||||
|
const query = new Parse.Query(TestObject);
|
||||||
|
query.equalTo('objectId', object.id);
|
||||||
|
const subscription = await query.subscribe();
|
||||||
|
|
||||||
|
subscription.on('update', () => {
|
||||||
|
fail();
|
||||||
|
});
|
||||||
|
object.set({ foo: 'bar' });
|
||||||
|
await object.save();
|
||||||
|
setTimeout(async () => {
|
||||||
|
done();
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can return a new beforeSubscribe query', async done => {
|
||||||
|
await reconfigureServer({
|
||||||
|
liveQuery: {
|
||||||
|
classNames: ['TestObject'],
|
||||||
|
},
|
||||||
|
startLiveQueryServer: true,
|
||||||
|
verbose: false,
|
||||||
|
silent: true,
|
||||||
|
});
|
||||||
|
Parse.Cloud.beforeSubscribe(TestObject, request => {
|
||||||
|
const query = new Parse.Query(TestObject);
|
||||||
|
query.equalTo('foo', 'yolo');
|
||||||
|
request.query = query;
|
||||||
|
});
|
||||||
|
|
||||||
|
const query = new Parse.Query(TestObject);
|
||||||
|
query.equalTo('foo', 'bar');
|
||||||
|
const subscription = await query.subscribe();
|
||||||
|
|
||||||
|
subscription.on('create', object => {
|
||||||
|
expect(object.get('foo')).toBe('yolo');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
const object = new TestObject();
|
||||||
|
object.set({ foo: 'yolo' });
|
||||||
|
await object.save();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('can handle select beforeSubscribe query', async done => {
|
||||||
|
await reconfigureServer({
|
||||||
|
liveQuery: {
|
||||||
|
classNames: ['TestObject'],
|
||||||
|
},
|
||||||
|
startLiveQueryServer: true,
|
||||||
|
verbose: false,
|
||||||
|
silent: true,
|
||||||
|
});
|
||||||
|
Parse.Cloud.beforeSubscribe(TestObject, request => {
|
||||||
|
const query = request.query;
|
||||||
|
query.select('yolo');
|
||||||
|
});
|
||||||
|
|
||||||
|
const object = new TestObject();
|
||||||
|
await object.save();
|
||||||
|
|
||||||
|
const query = new Parse.Query(TestObject);
|
||||||
|
query.equalTo('objectId', object.id);
|
||||||
|
const subscription = await query.subscribe();
|
||||||
|
|
||||||
|
subscription.on('update', object => {
|
||||||
|
expect(object.get('foo')).toBeUndefined();
|
||||||
|
expect(object.get('yolo')).toBe('abc');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
object.set({ foo: 'bar', yolo: 'abc' });
|
||||||
|
await object.save();
|
||||||
|
});
|
||||||
|
|
||||||
it('handle invalid websocket payload length', async done => {
|
it('handle invalid websocket payload length', async done => {
|
||||||
await reconfigureServer({
|
await reconfigureServer({
|
||||||
liveQuery: {
|
liveQuery: {
|
||||||
|
|||||||
@@ -794,7 +794,12 @@ export async function maybeRunSubscribeTrigger(
|
|||||||
parseQuery.withJSON(request.query);
|
parseQuery.withJSON(request.query);
|
||||||
request.query = parseQuery;
|
request.query = parseQuery;
|
||||||
request.user = await userForSessionToken(request.sessionToken);
|
request.user = await userForSessionToken(request.sessionToken);
|
||||||
return trigger(request);
|
await trigger(request);
|
||||||
|
const query = request.query.toJSON();
|
||||||
|
if (query.keys) {
|
||||||
|
query.fields = query.keys.split(',');
|
||||||
|
}
|
||||||
|
request.query = query;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function userForSessionToken(sessionToken) {
|
async function userForSessionToken(sessionToken) {
|
||||||
|
|||||||
Reference in New Issue
Block a user