@@ -7,6 +7,15 @@ const validatorFail = () => {
77} ;
88
99describe ( 'ParseLiveQuery' , function ( ) {
10+ beforeEach ( ( ) => {
11+ Parse . CoreManager . getLiveQueryController ( ) . setDefaultLiveQueryClient ( null ) ;
12+ } ) ;
13+ afterEach ( async ( ) => {
14+ const client = await Parse . CoreManager . getLiveQueryController ( ) . getDefaultLiveQueryClient ( ) ;
15+ client . close ( ) ;
16+ // Wait for live query client to disconnect
17+ await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
18+ } ) ;
1019 it ( 'access user on onLiveQueryEvent disconnect' , async done => {
1120 await reconfigureServer ( {
1221 liveQuery : {
@@ -16,7 +25,6 @@ describe('ParseLiveQuery', function () {
1625 verbose : false ,
1726 silent : true ,
1827 } ) ;
19- Parse . CoreManager . getLiveQueryController ( ) . setDefaultLiveQueryClient ( null ) ;
2028 const requestedUser = new Parse . User ( ) ;
2129 requestedUser . setUsername ( 'username' ) ;
2230 requestedUser . setPassword ( 'password' ) ;
@@ -513,88 +521,77 @@ describe('ParseLiveQuery', function () {
513521 classNames : [ 'TestObject' ] ,
514522 } ,
515523 startLiveQueryServer : true ,
516- verbose : false ,
517- silent : true ,
518524 } ) ;
519525 const object = new TestObject ( ) ;
520526 await object . save ( ) ;
521-
522- Parse . Cloud . beforeSubscribe ( 'TestObject' , req => {
523- expect ( req . op ) . toBe ( 'subscribe' ) ;
524- expect ( req . requestId ) . toBe ( 1 ) ;
525- expect ( req . query ) . toBeDefined ( ) ;
526- expect ( req . user ) . toBeUndefined ( ) ;
527- } ) ;
528-
529- Parse . Cloud . beforeConnect ( req => {
530- expect ( req . event ) . toBe ( 'connect' ) ;
531- expect ( req . clients ) . toBe ( 0 ) ;
532- expect ( req . subscriptions ) . toBe ( 0 ) ;
533- expect ( req . useMasterKey ) . toBe ( false ) ;
534- expect ( req . installationId ) . toBeDefined ( ) ;
535- expect ( req . user ) . toBeUndefined ( ) ;
536- expect ( req . client ) . toBeDefined ( ) ;
537- } ) ;
527+ const hooks = {
528+ beforeSubscribe ( req ) {
529+ expect ( req . op ) . toBe ( 'subscribe' ) ;
530+ expect ( req . requestId ) . toBe ( 1 ) ;
531+ expect ( req . query ) . toBeDefined ( ) ;
532+ expect ( req . user ) . toBeUndefined ( ) ;
533+ } ,
534+ beforeConnect ( req ) {
535+ expect ( req . event ) . toBe ( 'connect' ) ;
536+ expect ( req . clients ) . toBe ( 0 ) ;
537+ expect ( req . subscriptions ) . toBe ( 0 ) ;
538+ expect ( req . useMasterKey ) . toBe ( false ) ;
539+ expect ( req . installationId ) . toBeDefined ( ) ;
540+ expect ( req . user ) . toBeUndefined ( ) ;
541+ expect ( req . client ) . toBeDefined ( ) ;
542+ } ,
543+ } ;
544+ spyOn ( hooks , 'beforeSubscribe' ) . and . callThrough ( ) ;
545+ spyOn ( hooks , 'beforeConnect' ) . and . callThrough ( ) ;
546+ Parse . Cloud . beforeSubscribe ( 'TestObject' , hooks . beforeSubscribe ) ;
547+ Parse . Cloud . beforeConnect ( hooks . beforeConnect ) ;
538548 const query = new Parse . Query ( TestObject ) ;
539549 query . equalTo ( 'objectId' , object . id ) ;
540550 const subscription = await query . subscribe ( ) ;
541551 subscription . on ( 'update' , object => {
542552 expect ( object . get ( 'foo' ) ) . toBe ( 'bar' ) ;
553+ expect ( hooks . beforeConnect ) . toHaveBeenCalled ( ) ;
554+ expect ( hooks . beforeSubscribe ) . toHaveBeenCalled ( ) ;
543555 done ( ) ;
544556 } ) ;
545557 object . set ( { foo : 'bar' } ) ;
546558 await object . save ( ) ;
547559 } ) ;
548560
549- it ( 'can handle beforeConnect validation function' , async done => {
561+ it ( 'can handle beforeConnect validation function' , async ( ) => {
550562 await reconfigureServer ( {
551563 liveQuery : {
552564 classNames : [ 'TestObject' ] ,
553565 } ,
554566 startLiveQueryServer : true ,
555- verbose : false ,
556- silent : true ,
557567 } ) ;
558568
559569 const object = new TestObject ( ) ;
560570 await object . save ( ) ;
561-
562571 Parse . Cloud . beforeConnect ( ( ) => { } , validatorFail ) ;
563- let complete = false ;
564- Parse . LiveQuery . on ( 'error' , error => {
565- Parse . LiveQuery . removeAllListeners ( 'error' ) ;
566- if ( complete ) {
567- return ;
568- }
569- complete = true ;
570- expect ( error ) . toBe ( 'you are not authorized' ) ;
571- done ( ) ;
572- } ) ;
573572 const query = new Parse . Query ( TestObject ) ;
574573 query . equalTo ( 'objectId' , object . id ) ;
575- await query . subscribe ( ) ;
574+ await expectAsync ( query . subscribe ( ) ) . toBeRejectedWith (
575+ new Parse . Error ( Parse . Error . VALIDATION_ERROR , 'you are not authorized' )
576+ ) ;
576577 } ) ;
577578
578- it ( 'can handle beforeSubscribe validation function' , async done => {
579+ it ( 'can handle beforeSubscribe validation function' , async ( ) => {
579580 await reconfigureServer ( {
580581 liveQuery : {
581582 classNames : [ 'TestObject' ] ,
582583 } ,
583584 startLiveQueryServer : true ,
584- verbose : false ,
585- silent : true ,
586585 } ) ;
587586 const object = new TestObject ( ) ;
588587 await object . save ( ) ;
589588
590589 Parse . Cloud . beforeSubscribe ( TestObject , ( ) => { } , validatorFail ) ;
591590 const query = new Parse . Query ( TestObject ) ;
592591 query . equalTo ( 'objectId' , object . id ) ;
593- const subscription = await query . subscribe ( ) ;
594- subscription . on ( 'error' , error => {
595- expect ( error ) . toBe ( 'you are not authorized' ) ;
596- done ( ) ;
597- } ) ;
592+ await expectAsync ( query . subscribe ( ) ) . toBeRejectedWith (
593+ new Parse . Error ( Parse . Error . VALIDATION_ERROR , 'you are not authorized' )
594+ ) ;
598595 } ) ;
599596
600597 it ( 'can handle afterEvent validation function' , async done => {
@@ -620,29 +617,22 @@ describe('ParseLiveQuery', function () {
620617 await object . save ( ) ;
621618 } ) ;
622619
623- it ( 'can handle beforeConnect error' , async done => {
620+ it ( 'can handle beforeConnect error' , async ( ) => {
624621 await reconfigureServer ( {
625622 liveQuery : {
626623 classNames : [ 'TestObject' ] ,
627624 } ,
628625 startLiveQueryServer : true ,
629- verbose : false ,
630- silent : true ,
631626 } ) ;
632627 const object = new TestObject ( ) ;
633628 await object . save ( ) ;
634629
635630 Parse . Cloud . beforeConnect ( ( ) => {
636631 throw new Error ( 'You shall not pass!' ) ;
637632 } ) ;
638- Parse . LiveQuery . on ( 'error' , error => {
639- Parse . LiveQuery . removeAllListeners ( 'error' ) ;
640- expect ( error ) . toBe ( 'You shall not pass!' ) ;
641- done ( ) ;
642- } ) ;
643633 const query = new Parse . Query ( TestObject ) ;
644634 query . equalTo ( 'objectId' , object . id ) ;
645- await query . subscribe ( ) ;
635+ await expectAsync ( query . subscribe ( ) ) . toBeRejectedWith ( new Error ( 'You shall not pass!' ) ) ;
646636 } ) ;
647637
648638 it ( 'can log on beforeConnect throw' , async ( ) => {
@@ -651,8 +641,6 @@ describe('ParseLiveQuery', function () {
651641 classNames : [ 'TestObject' ] ,
652642 } ,
653643 startLiveQueryServer : true ,
654- verbose : false ,
655- silent : true ,
656644 } ) ;
657645
658646 const logger = require ( '../lib/logger' ) . logger ;
@@ -664,40 +652,30 @@ describe('ParseLiveQuery', function () {
664652 foo . bar ( ) ;
665653 /* eslint-enable no-undef */
666654 } ) ;
667- new Parse . Query ( TestObject ) . subscribe ( ) ;
668- await new Promise ( resolve => Parse . LiveQuery . on ( 'error' , resolve ) ) ;
669- Parse . LiveQuery . removeAllListeners ( 'error' ) ;
655+ await expectAsync ( new Parse . Query ( TestObject ) . subscribe ( ) ) . toBeRejectedWith (
656+ new Error ( 'foo is not defined' )
657+ ) ;
670658 expect ( logger . error ) . toHaveBeenCalledWith (
671659 `Failed running beforeConnect for session ${ token } with:\n Error: {"message":"foo is not defined","code":141}`
672660 ) ;
673661 } ) ;
674662
675- it ( 'can handle beforeSubscribe error' , async done => {
663+ it ( 'can handle beforeSubscribe error' , async ( ) => {
676664 await reconfigureServer ( {
677665 liveQuery : {
678666 classNames : [ 'TestObject' ] ,
679667 } ,
680668 startLiveQueryServer : true ,
681- verbose : false ,
682- silent : true ,
683669 } ) ;
684670 const object = new TestObject ( ) ;
685671 await object . save ( ) ;
686672
687673 Parse . Cloud . beforeSubscribe ( TestObject , ( ) => {
688674 throw new Error ( 'You shall not subscribe!' ) ;
689675 } ) ;
690- Parse . LiveQuery . on ( 'error' , error => {
691- expect ( error ) . toBe ( 'You shall not subscribe!' ) ;
692- } ) ;
693676 const query = new Parse . Query ( TestObject ) ;
694677 query . equalTo ( 'objectId' , object . id ) ;
695- const subscription = await query . subscribe ( ) ;
696- subscription . on ( 'error' , error => {
697- Parse . LiveQuery . removeAllListeners ( 'error' ) ;
698- expect ( error ) . toBe ( 'You shall not subscribe!' ) ;
699- done ( ) ;
700- } ) ;
678+ await expectAsync ( query . subscribe ( ) ) . toBeRejectedWith ( new Error ( 'You shall not subscribe!' ) ) ;
701679 } ) ;
702680
703681 it ( 'can log on beforeSubscribe error' , async ( ) => {
@@ -706,8 +684,6 @@ describe('ParseLiveQuery', function () {
706684 classNames : [ 'TestObject' ] ,
707685 } ,
708686 startLiveQueryServer : true ,
709- verbose : false ,
710- silent : true ,
711687 } ) ;
712688
713689 const logger = require ( '../lib/logger' ) . logger ;
@@ -720,8 +696,7 @@ describe('ParseLiveQuery', function () {
720696 } ) ;
721697
722698 const query = new Parse . Query ( TestObject ) ;
723- const subscription = await query . subscribe ( ) ;
724- await new Promise ( resolve => subscription . on ( 'error' , resolve ) ) ;
699+ await expectAsync ( query . subscribe ( ) ) . toBeRejectedWith ( new Error ( 'foo is not defined' ) ) ;
725700
726701 expect ( logger . error ) . toHaveBeenCalledWith (
727702 `Failed running beforeSubscribe on TestObject for session undefined with:\n Error: {"message":"foo is not defined","code":141}`
@@ -734,29 +709,35 @@ describe('ParseLiveQuery', function () {
734709 classNames : [ 'TestObject' ] ,
735710 } ,
736711 startLiveQueryServer : true ,
737- verbose : false ,
738- silent : true ,
739- } ) ;
740- Parse . Cloud . beforeSubscribe ( TestObject , request => {
741- const query = request . query ;
742- query . equalTo ( 'yolo' , 'abc' ) ;
743712 } ) ;
744-
713+ const hook = {
714+ beforeSubscribe ( request ) {
715+ request . query . equalTo ( 'yolo' , 'abc' ) ;
716+ } ,
717+ } ;
718+ spyOn ( hook , 'beforeSubscribe' ) . and . callThrough ( ) ;
719+ Parse . Cloud . beforeSubscribe ( 'TestObject' , hook . beforeSubscribe ) ;
745720 const object = new TestObject ( ) ;
746721 await object . save ( ) ;
747722
748- const query = new Parse . Query ( TestObject ) ;
723+ const query = new Parse . Query ( ' TestObject' ) ;
749724 query . equalTo ( 'objectId' , object . id ) ;
750725 const subscription = await query . subscribe ( ) ;
751-
752726 subscription . on ( 'update' , ( ) => {
753- fail ( ) ;
727+ fail ( 'beforeSubscribe should restrict subscription' ) ;
754728 } ) ;
755- object . set ( { foo : 'bar' } ) ;
729+ subscription . on ( 'enter' , object => {
730+ if ( object . get ( 'yolo' ) === 'abc' ) {
731+ done ( ) ;
732+ } else {
733+ fail ( 'beforeSubscribe should restrict queries' ) ;
734+ }
735+ } ) ;
736+ object . set ( { yolo : 'bar' } ) ;
756737 await object . save ( ) ;
757- setTimeout ( async ( ) => {
758- done ( ) ;
759- } , 1000 ) ;
738+ object . set ( { yolo : 'abc' } ) ;
739+ await object . save ( ) ;
740+ expect ( hook . beforeSubscribe ) . toHaveBeenCalled ( ) ;
760741 } ) ;
761742
762743 it ( 'can return a new beforeSubscribe query' , async done => {
@@ -954,26 +935,15 @@ describe('ParseLiveQuery', function () {
954935 await Parse . User . logIn ( 'username' , 'password' ) ;
955936 } ) ;
956937
957- it ( 'prevent liveQuery on Session class when not logged in' , async done => {
938+ it ( 'prevent liveQuery on Session class when not logged in' , async ( ) => {
958939 await reconfigureServer ( {
959940 liveQuery : {
960941 classNames : [ Parse . Session ] ,
961942 } ,
962943 startLiveQueryServer : true ,
963- verbose : false ,
964- silent : true ,
965- } ) ;
966-
967- Parse . LiveQuery . on ( 'error' , error => {
968- expect ( error ) . toBe ( 'Invalid session token' ) ;
969944 } ) ;
970945 const query = new Parse . Query ( Parse . Session ) ;
971- const subscription = await query . subscribe ( ) ;
972- subscription . on ( 'error' , error => {
973- Parse . LiveQuery . removeAllListeners ( 'error' ) ;
974- expect ( error ) . toBe ( 'Invalid session token' ) ;
975- done ( ) ;
976- } ) ;
946+ await expectAsync ( query . subscribe ( ) ) . toBeRejectedWith ( new Error ( 'Invalid session token' ) ) ;
977947 } ) ;
978948
979949 it ( 'handle invalid websocket payload length' , async done => {
@@ -1242,13 +1212,4 @@ describe('ParseLiveQuery', function () {
12421212 object . set ( { location : secondPoint } ) ;
12431213 await object . save ( ) ;
12441214 } ) ;
1245-
1246- afterEach ( async function ( done ) {
1247- const client = await Parse . CoreManager . getLiveQueryController ( ) . getDefaultLiveQueryClient ( ) ;
1248- client . close ( ) ;
1249- // Wait for live query client to disconnect
1250- setTimeout ( ( ) => {
1251- done ( ) ;
1252- } , 1000 ) ;
1253- } ) ;
12541215} ) ;
0 commit comments