diff --git a/src/LiveQueryClient.js b/src/LiveQueryClient.js index 3066ac1c6..2210dee4d 100644 --- a/src/LiveQueryClient.js +++ b/src/LiveQueryClient.js @@ -419,7 +419,10 @@ class LiveQueryClient extends EventEmitter { data.original = ParseObject.fromJSON(data.original, false); } delete data.object.__type; - const parseObject = ParseObject.fromJSON(data.object, override); + const parseObject = ParseObject.fromJSON( + data.object, + !(subscription.query && subscription.query._select) ? override : false + ); if (data.original) { subscription.emit(data.op, parseObject, data.original, response); diff --git a/src/__tests__/LiveQueryClient-test.js b/src/__tests__/LiveQueryClient-test.js index 812ebb978..4329bcd01 100644 --- a/src/__tests__/LiveQueryClient-test.js +++ b/src/__tests__/LiveQueryClient-test.js @@ -522,6 +522,43 @@ describe('LiveQueryClient', () => { spy.mockRestore(); }); + it('can handle select in websocket payload', () => { + const liveQueryClient = new LiveQueryClient({ + applicationId: 'applicationId', + serverURL: 'ws://test', + javascriptKey: 'javascriptKey', + masterKey: 'masterKey', + sessionToken: 'sessionToken', + }); + // Add mock subscription + const subscription = new events.EventEmitter(); + subscription.query = new ParseQuery('Test').select('foo'); + liveQueryClient.subscriptions.set(1, subscription); + const object = new ParseObject('Test'); + const original = new ParseObject('Test'); + object.set('key', 'value'); + original.set('key', 'old'); + const data = { + op: 'update', + clientId: 1, + requestId: 1, + object: object._toFullJSON(), + original: original._toFullJSON(), + }; + const event = { + data: JSON.stringify(data), + }; + + const spy = jest + .spyOn(ParseObject, 'fromJSON') + .mockImplementationOnce(() => original) + .mockImplementationOnce(() => object); + + liveQueryClient._handleWebSocketMessage(event); + expect(ParseObject.fromJSON.mock.calls[1][1]).toEqual(false); + spy.mockRestore(); + }); + it('can handle WebSocket response unset field', async () => { const liveQueryClient = new LiveQueryClient({ applicationId: 'applicationId',