@@ -4,6 +4,7 @@ const assert = require('assert');
4
4
const Parse = require ( '../../node' ) ;
5
5
const sleep = require ( './sleep' ) ;
6
6
const { resolvingPromise } = require ( '../../lib/node/promiseUtils' ) ;
7
+ const { EventEmitter } = require ( 'events' ) ;
7
8
8
9
describe ( 'Parse LiveQuery' , ( ) => {
9
10
beforeEach ( ( ) => {
@@ -367,4 +368,41 @@ describe('Parse LiveQuery', () => {
367
368
client . state = 'closed' ;
368
369
await client . close ( ) ;
369
370
} ) ;
371
+
372
+ it ( 'can subscribe to query with EventEmitter private fields' , async ( ) => {
373
+ class CustomEmitter {
374
+ #privateEmitter;
375
+
376
+ constructor ( ) {
377
+ this . #privateEmitter = new EventEmitter ( ) ;
378
+ }
379
+ on ( event , listener ) {
380
+ this . #privateEmitter. on ( event , listener ) ;
381
+ }
382
+ emit ( event , ...args ) {
383
+ this . #privateEmitter. emit ( event , ...args ) ;
384
+ }
385
+ }
386
+
387
+ const EV = Parse . CoreManager . getEventEmitter ( ) ;
388
+
389
+ Parse . CoreManager . setEventEmitter ( CustomEmitter ) ;
390
+ const object = new TestObject ( ) ;
391
+ await object . save ( ) ;
392
+ const installationId = await Parse . CoreManager . getInstallationController ( ) . currentInstallationId ( ) ;
393
+
394
+ const query = new Parse . Query ( TestObject ) ;
395
+ query . equalTo ( 'objectId' , object . id ) ;
396
+ const subscription = await query . subscribe ( ) ;
397
+ const promise = resolvingPromise ( ) ;
398
+ subscription . on ( 'update' , ( object , original , response ) => {
399
+ assert . equal ( object . get ( 'foo' ) , 'bar' ) ;
400
+ assert . equal ( response . installationId , installationId ) ;
401
+ promise . resolve ( ) ;
402
+ } ) ;
403
+ object . set ( { foo : 'bar' } ) ;
404
+ await object . save ( ) ;
405
+ await promise ;
406
+ Parse . CoreManager . setEventEmitter ( EV ) ;
407
+ } ) ;
370
408
} ) ;
0 commit comments