@@ -4,6 +4,7 @@ const assert = require('assert');
44const Parse = require ( '../../node' ) ;
55const sleep = require ( './sleep' ) ;
66const { resolvingPromise } = require ( '../../lib/node/promiseUtils' ) ;
7+ const { EventEmitter } = require ( 'events' ) ;
78
89describe ( 'Parse LiveQuery' , ( ) => {
910 beforeEach ( ( ) => {
@@ -367,4 +368,41 @@ describe('Parse LiveQuery', () => {
367368 client . state = 'closed' ;
368369 await client . close ( ) ;
369370 } ) ;
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+ } ) ;
370408} ) ;
0 commit comments