From 8edb3f949695348291e626323a5245d1255f8e44 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 28 Dec 2018 15:35:07 -0600 Subject: [PATCH 1/2] Add original object to LiveQuery Events --- spec/ParseLiveQueryServer.spec.js | 50 +++++++++++++++++++++++++++ src/LiveQuery/Client.js | 12 ++++++- src/LiveQuery/ParseLiveQueryServer.js | 6 +++- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/spec/ParseLiveQueryServer.spec.js b/spec/ParseLiveQueryServer.spec.js index 7903ff09fd..cf29f3509e 100644 --- a/spec/ParseLiveQueryServer.spec.js +++ b/spec/ParseLiveQueryServer.spec.js @@ -899,6 +899,56 @@ describe('ParseLiveQueryServer', function() { }, jasmine.ASYNC_TEST_WAIT_TIME); }); + it('can handle update command with original object', function(done) { + jasmine.restoreLibrary('../lib/LiveQuery/Client', 'Client'); + const Client = require('../lib/LiveQuery/Client').Client; + const parseLiveQueryServer = new ParseLiveQueryServer({}); + // Make mock request message + const message = generateMockMessage(true); + + const clientId = 1; + const parseWebSocket = { + clientId, + send: jasmine.createSpy('send'), + }; + const client = new Client(clientId, parseWebSocket); + spyOn(client, 'pushUpdate').and.callThrough(); + parseLiveQueryServer.clients.set(clientId, client); + + // Add mock subscription + const requestId = 2; + + addMockSubscription( + parseLiveQueryServer, + clientId, + requestId, + parseWebSocket + ); + // Mock _matchesSubscription to return matching + parseLiveQueryServer._matchesSubscription = function(parseObject) { + if (!parseObject) { + return false; + } + return true; + }; + parseLiveQueryServer._matchesACL = function() { + return Promise.resolve(true); + }; + + parseLiveQueryServer._onAfterSave(message); + + // Make sure we send update command to client + setTimeout(function() { + expect(client.pushUpdate).toHaveBeenCalled(); + const args = parseWebSocket.send.calls.mostRecent().args; + const toSend = JSON.parse(args[0]); + + expect(toSend.object); + expect(toSend.originalParseObject); + done(); + }, jasmine.ASYNC_TEST_WAIT_TIME); + }); + it('can handle object create command which matches some subscriptions', function(done) { const parseLiveQueryServer = new ParseLiveQueryServer({}); // Make mock request message diff --git a/src/LiveQuery/Client.js b/src/LiveQuery/Client.js index 867a98e7a6..49ae8e0c08 100644 --- a/src/LiveQuery/Client.js +++ b/src/LiveQuery/Client.js @@ -78,7 +78,11 @@ class Client { } _pushEvent(type: string): Function { - return function(subscriptionId: number, parseObjectJSON: any): void { + return function( + subscriptionId: number, + parseObjectJSON: any, + parseOriginalObjectJSON: any + ): void { const response: Message = { op: type, clientId: this.id, @@ -92,6 +96,12 @@ class Client { fields = this.subscriptionInfos.get(subscriptionId).fields; } response['object'] = this._toJSONWithFields(parseObjectJSON, fields); + if (typeof parseOriginalObjectJSON !== 'undefined') { + response['originalParseObject'] = this._toJSONWithFields( + parseOriginalObjectJSON, + fields + ); + } } Client.pushResponse(this.parseWebSocket, JSON.stringify(response)); }; diff --git a/src/LiveQuery/ParseLiveQueryServer.js b/src/LiveQuery/ParseLiveQueryServer.js index 4f04805ae5..354f2d1b93 100644 --- a/src/LiveQuery/ParseLiveQueryServer.js +++ b/src/LiveQuery/ParseLiveQueryServer.js @@ -292,7 +292,11 @@ class ParseLiveQueryServer { return null; } const functionName = 'push' + type; - client[functionName](requestId, currentParseObject); + client[functionName]( + requestId, + currentParseObject, + originalParseObject + ); }, error => { logger.error('Matching ACL error : ', error); From fde09d1e858b122749e106c85f65757fa67ecd08 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 28 Dec 2018 16:16:48 -0600 Subject: [PATCH 2/2] change response original --- spec/ParseLiveQueryServer.spec.js | 4 ++-- src/LiveQuery/Client.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/ParseLiveQueryServer.spec.js b/spec/ParseLiveQueryServer.spec.js index cf29f3509e..e2870b14ae 100644 --- a/spec/ParseLiveQueryServer.spec.js +++ b/spec/ParseLiveQueryServer.spec.js @@ -943,8 +943,8 @@ describe('ParseLiveQueryServer', function() { const args = parseWebSocket.send.calls.mostRecent().args; const toSend = JSON.parse(args[0]); - expect(toSend.object); - expect(toSend.originalParseObject); + expect(toSend.object).toBeDefined(); + expect(toSend.original).toBeDefined(); done(); }, jasmine.ASYNC_TEST_WAIT_TIME); }); diff --git a/src/LiveQuery/Client.js b/src/LiveQuery/Client.js index 49ae8e0c08..c6ed8e4aa9 100644 --- a/src/LiveQuery/Client.js +++ b/src/LiveQuery/Client.js @@ -97,7 +97,7 @@ class Client { } response['object'] = this._toJSONWithFields(parseObjectJSON, fields); if (typeof parseOriginalObjectJSON !== 'undefined') { - response['originalParseObject'] = this._toJSONWithFields( + response['original'] = this._toJSONWithFields( parseOriginalObjectJSON, fields );