Skip to content

Commit b80eee4

Browse files
authored
fix: subscription to a LiveQuery containing ParseQuery.select overrides properties (parse-community#1488)
1 parent e5420ff commit b80eee4

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

src/LiveQueryClient.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,10 @@ class LiveQueryClient extends EventEmitter {
419419
data.original = ParseObject.fromJSON(data.original, false);
420420
}
421421
delete data.object.__type;
422-
const parseObject = ParseObject.fromJSON(data.object, override);
422+
const parseObject = ParseObject.fromJSON(
423+
data.object,
424+
!(subscription.query && subscription.query._select) ? override : false
425+
);
423426

424427
if (data.original) {
425428
subscription.emit(data.op, parseObject, data.original, response);

src/__tests__/LiveQueryClient-test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,43 @@ describe('LiveQueryClient', () => {
522522
spy.mockRestore();
523523
});
524524

525+
it('can handle select in websocket payload', () => {
526+
const liveQueryClient = new LiveQueryClient({
527+
applicationId: 'applicationId',
528+
serverURL: 'ws://test',
529+
javascriptKey: 'javascriptKey',
530+
masterKey: 'masterKey',
531+
sessionToken: 'sessionToken',
532+
});
533+
// Add mock subscription
534+
const subscription = new events.EventEmitter();
535+
subscription.query = new ParseQuery('Test').select('foo');
536+
liveQueryClient.subscriptions.set(1, subscription);
537+
const object = new ParseObject('Test');
538+
const original = new ParseObject('Test');
539+
object.set('key', 'value');
540+
original.set('key', 'old');
541+
const data = {
542+
op: 'update',
543+
clientId: 1,
544+
requestId: 1,
545+
object: object._toFullJSON(),
546+
original: original._toFullJSON(),
547+
};
548+
const event = {
549+
data: JSON.stringify(data),
550+
};
551+
552+
const spy = jest
553+
.spyOn(ParseObject, 'fromJSON')
554+
.mockImplementationOnce(() => original)
555+
.mockImplementationOnce(() => object);
556+
557+
liveQueryClient._handleWebSocketMessage(event);
558+
expect(ParseObject.fromJSON.mock.calls[1][1]).toEqual(false);
559+
spy.mockRestore();
560+
});
561+
525562
it('can handle WebSocket response unset field', async () => {
526563
const liveQueryClient = new LiveQueryClient({
527564
applicationId: 'applicationId',

0 commit comments

Comments
 (0)