Skip to content

Commit 08744f9

Browse files
committed
Fix beforeSubscribe
1 parent bff0ea9 commit 08744f9

File tree

2 files changed

+95
-1
lines changed

2 files changed

+95
-1
lines changed

spec/ParseLiveQuery.spec.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,95 @@ describe('ParseLiveQuery', function () {
115115
});
116116
});
117117

118+
it('can handle mutate beforeSubscribe query', async done => {
119+
await reconfigureServer({
120+
liveQuery: {
121+
classNames: ['TestObject'],
122+
},
123+
startLiveQueryServer: true,
124+
verbose: false,
125+
silent: true,
126+
});
127+
Parse.Cloud.beforeSubscribe(TestObject, request => {
128+
const query = request.query;
129+
query.equalTo('yolo', 'abc');
130+
});
131+
132+
const object = new TestObject();
133+
await object.save();
134+
135+
const query = new Parse.Query(TestObject);
136+
query.equalTo('objectId', object.id);
137+
const subscription = await query.subscribe();
138+
139+
subscription.on('update', () => {
140+
fail();
141+
});
142+
object.set({ foo: 'bar' });
143+
await object.save();
144+
setTimeout(async () => {
145+
done();
146+
}, 1000);
147+
});
148+
149+
it('can return a new beforeSubscribe query', async done => {
150+
await reconfigureServer({
151+
liveQuery: {
152+
classNames: ['TestObject'],
153+
},
154+
startLiveQueryServer: true,
155+
verbose: false,
156+
silent: true,
157+
});
158+
Parse.Cloud.beforeSubscribe(TestObject, () => {
159+
const query = new Parse.Query(TestObject);
160+
query.equalTo('foo', 'yolo');
161+
return query;
162+
});
163+
164+
const query = new Parse.Query(TestObject);
165+
query.equalTo('foo', 'bar');
166+
const subscription = await query.subscribe();
167+
168+
subscription.on('create', object => {
169+
expect(object.get('foo')).toBe('yolo');
170+
done();
171+
});
172+
const object = new TestObject();
173+
object.set({ foo: 'yolo' });
174+
await object.save();
175+
});
176+
177+
it('can handle select beforeSubscribe query', async done => {
178+
await reconfigureServer({
179+
liveQuery: {
180+
classNames: ['TestObject'],
181+
},
182+
startLiveQueryServer: true,
183+
verbose: false,
184+
silent: true,
185+
});
186+
Parse.Cloud.beforeSubscribe(TestObject, request => {
187+
const query = request.query;
188+
query.select('yolo');
189+
});
190+
191+
const object = new TestObject();
192+
await object.save();
193+
194+
const query = new Parse.Query(TestObject);
195+
query.equalTo('objectId', object.id);
196+
const subscription = await query.subscribe();
197+
198+
subscription.on('update', object => {
199+
expect(object.get('foo')).toBeUndefined();
200+
expect(object.get('yolo')).toBe('abc');
201+
done();
202+
});
203+
object.set({ foo: 'bar', yolo: 'abc' });
204+
await object.save();
205+
});
206+
118207
it('handle invalid websocket payload length', async done => {
119208
await reconfigureServer({
120209
liveQuery: {

src/triggers.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,12 @@ export async function maybeRunSubscribeTrigger(
794794
parseQuery.withJSON(request.query);
795795
request.query = parseQuery;
796796
request.user = await userForSessionToken(request.sessionToken);
797-
return trigger(request);
797+
const result = (await trigger(request)) || request.query;
798+
const query = result.toJSON();
799+
if (query.keys) {
800+
query.fields = query.keys.split(',');
801+
}
802+
request.query = query;
798803
}
799804

800805
async function userForSessionToken(sessionToken) {

0 commit comments

Comments
 (0)