Skip to content

Commit

Permalink
Fix beforeSubscribe
Browse files Browse the repository at this point in the history
  • Loading branch information
dblythy committed Aug 19, 2020
1 parent 4cec333 commit 78b8de8
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 1 deletion.
89 changes: 89 additions & 0 deletions spec/ParseLiveQuery.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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, () => {
const query = new Parse.Query(TestObject);
query.equalTo('foo', 'yolo');
return 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 => {
await reconfigureServer({
liveQuery: {
Expand Down
7 changes: 6 additions & 1 deletion src/triggers.js
Original file line number Diff line number Diff line change
Expand Up @@ -794,7 +794,12 @@ export async function maybeRunSubscribeTrigger(
parseQuery.withJSON(request.query);
request.query = parseQuery;
request.user = await userForSessionToken(request.sessionToken);
return trigger(request);
const result = (await trigger(request)) || request.query;
const query = result.toJSON();
if (query.keys) {
query.fields = query.keys.split(',');
}
request.query = query;
}

async function userForSessionToken(sessionToken) {
Expand Down

0 comments on commit 78b8de8

Please sign in to comment.