@@ -7,6 +7,15 @@ const validatorFail = () => {
7
7
} ;
8
8
9
9
describe ( '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
+ } ) ;
10
19
it ( 'access user on onLiveQueryEvent disconnect' , async done => {
11
20
await reconfigureServer ( {
12
21
liveQuery : {
@@ -16,7 +25,6 @@ describe('ParseLiveQuery', function () {
16
25
verbose : false ,
17
26
silent : true ,
18
27
} ) ;
19
- Parse . CoreManager . getLiveQueryController ( ) . setDefaultLiveQueryClient ( null ) ;
20
28
const requestedUser = new Parse . User ( ) ;
21
29
requestedUser . setUsername ( 'username' ) ;
22
30
requestedUser . setPassword ( 'password' ) ;
@@ -513,88 +521,77 @@ describe('ParseLiveQuery', function () {
513
521
classNames : [ 'TestObject' ] ,
514
522
} ,
515
523
startLiveQueryServer : true ,
516
- verbose : false ,
517
- silent : true ,
518
524
} ) ;
519
525
const object = new TestObject ( ) ;
520
526
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 ) ;
538
548
const query = new Parse . Query ( TestObject ) ;
539
549
query . equalTo ( 'objectId' , object . id ) ;
540
550
const subscription = await query . subscribe ( ) ;
541
551
subscription . on ( 'update' , object => {
542
552
expect ( object . get ( 'foo' ) ) . toBe ( 'bar' ) ;
553
+ expect ( hooks . beforeConnect ) . toHaveBeenCalled ( ) ;
554
+ expect ( hooks . beforeSubscribe ) . toHaveBeenCalled ( ) ;
543
555
done ( ) ;
544
556
} ) ;
545
557
object . set ( { foo : 'bar' } ) ;
546
558
await object . save ( ) ;
547
559
} ) ;
548
560
549
- it ( 'can handle beforeConnect validation function' , async done => {
561
+ it ( 'can handle beforeConnect validation function' , async ( ) => {
550
562
await reconfigureServer ( {
551
563
liveQuery : {
552
564
classNames : [ 'TestObject' ] ,
553
565
} ,
554
566
startLiveQueryServer : true ,
555
- verbose : false ,
556
- silent : true ,
557
567
} ) ;
558
568
559
569
const object = new TestObject ( ) ;
560
570
await object . save ( ) ;
561
-
562
571
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
- } ) ;
573
572
const query = new Parse . Query ( TestObject ) ;
574
573
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
+ ) ;
576
577
} ) ;
577
578
578
- it ( 'can handle beforeSubscribe validation function' , async done => {
579
+ it ( 'can handle beforeSubscribe validation function' , async ( ) => {
579
580
await reconfigureServer ( {
580
581
liveQuery : {
581
582
classNames : [ 'TestObject' ] ,
582
583
} ,
583
584
startLiveQueryServer : true ,
584
- verbose : false ,
585
- silent : true ,
586
585
} ) ;
587
586
const object = new TestObject ( ) ;
588
587
await object . save ( ) ;
589
588
590
589
Parse . Cloud . beforeSubscribe ( TestObject , ( ) => { } , validatorFail ) ;
591
590
const query = new Parse . Query ( TestObject ) ;
592
591
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
+ ) ;
598
595
} ) ;
599
596
600
597
it ( 'can handle afterEvent validation function' , async done => {
@@ -620,29 +617,22 @@ describe('ParseLiveQuery', function () {
620
617
await object . save ( ) ;
621
618
} ) ;
622
619
623
- it ( 'can handle beforeConnect error' , async done => {
620
+ it ( 'can handle beforeConnect error' , async ( ) => {
624
621
await reconfigureServer ( {
625
622
liveQuery : {
626
623
classNames : [ 'TestObject' ] ,
627
624
} ,
628
625
startLiveQueryServer : true ,
629
- verbose : false ,
630
- silent : true ,
631
626
} ) ;
632
627
const object = new TestObject ( ) ;
633
628
await object . save ( ) ;
634
629
635
630
Parse . Cloud . beforeConnect ( ( ) => {
636
631
throw new Error ( 'You shall not pass!' ) ;
637
632
} ) ;
638
- Parse . LiveQuery . on ( 'error' , error => {
639
- Parse . LiveQuery . removeAllListeners ( 'error' ) ;
640
- expect ( error ) . toBe ( 'You shall not pass!' ) ;
641
- done ( ) ;
642
- } ) ;
643
633
const query = new Parse . Query ( TestObject ) ;
644
634
query . equalTo ( 'objectId' , object . id ) ;
645
- await query . subscribe ( ) ;
635
+ await expectAsync ( query . subscribe ( ) ) . toBeRejectedWith ( new Error ( 'You shall not pass!' ) ) ;
646
636
} ) ;
647
637
648
638
it ( 'can log on beforeConnect throw' , async ( ) => {
@@ -651,8 +641,6 @@ describe('ParseLiveQuery', function () {
651
641
classNames : [ 'TestObject' ] ,
652
642
} ,
653
643
startLiveQueryServer : true ,
654
- verbose : false ,
655
- silent : true ,
656
644
} ) ;
657
645
658
646
const logger = require ( '../lib/logger' ) . logger ;
@@ -664,40 +652,30 @@ describe('ParseLiveQuery', function () {
664
652
foo . bar ( ) ;
665
653
/* eslint-enable no-undef */
666
654
} ) ;
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
+ ) ;
670
658
expect ( logger . error ) . toHaveBeenCalledWith (
671
659
`Failed running beforeConnect for session ${ token } with:\n Error: {"message":"foo is not defined","code":141}`
672
660
) ;
673
661
} ) ;
674
662
675
- it ( 'can handle beforeSubscribe error' , async done => {
663
+ it ( 'can handle beforeSubscribe error' , async ( ) => {
676
664
await reconfigureServer ( {
677
665
liveQuery : {
678
666
classNames : [ 'TestObject' ] ,
679
667
} ,
680
668
startLiveQueryServer : true ,
681
- verbose : false ,
682
- silent : true ,
683
669
} ) ;
684
670
const object = new TestObject ( ) ;
685
671
await object . save ( ) ;
686
672
687
673
Parse . Cloud . beforeSubscribe ( TestObject , ( ) => {
688
674
throw new Error ( 'You shall not subscribe!' ) ;
689
675
} ) ;
690
- Parse . LiveQuery . on ( 'error' , error => {
691
- expect ( error ) . toBe ( 'You shall not subscribe!' ) ;
692
- } ) ;
693
676
const query = new Parse . Query ( TestObject ) ;
694
677
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!' ) ) ;
701
679
} ) ;
702
680
703
681
it ( 'can log on beforeSubscribe error' , async ( ) => {
@@ -706,8 +684,6 @@ describe('ParseLiveQuery', function () {
706
684
classNames : [ 'TestObject' ] ,
707
685
} ,
708
686
startLiveQueryServer : true ,
709
- verbose : false ,
710
- silent : true ,
711
687
} ) ;
712
688
713
689
const logger = require ( '../lib/logger' ) . logger ;
@@ -720,8 +696,7 @@ describe('ParseLiveQuery', function () {
720
696
} ) ;
721
697
722
698
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' ) ) ;
725
700
726
701
expect ( logger . error ) . toHaveBeenCalledWith (
727
702
`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 () {
734
709
classNames : [ 'TestObject' ] ,
735
710
} ,
736
711
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' ) ;
743
712
} ) ;
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 ) ;
745
720
const object = new TestObject ( ) ;
746
721
await object . save ( ) ;
747
722
748
- const query = new Parse . Query ( TestObject ) ;
723
+ const query = new Parse . Query ( ' TestObject' ) ;
749
724
query . equalTo ( 'objectId' , object . id ) ;
750
725
const subscription = await query . subscribe ( ) ;
751
-
752
726
subscription . on ( 'update' , ( ) => {
753
- fail ( ) ;
727
+ fail ( 'beforeSubscribe should restrict subscription' ) ;
754
728
} ) ;
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' } ) ;
756
737
await object . save ( ) ;
757
- setTimeout ( async ( ) => {
758
- done ( ) ;
759
- } , 1000 ) ;
738
+ object . set ( { yolo : 'abc' } ) ;
739
+ await object . save ( ) ;
740
+ expect ( hook . beforeSubscribe ) . toHaveBeenCalled ( ) ;
760
741
} ) ;
761
742
762
743
it ( 'can return a new beforeSubscribe query' , async done => {
@@ -954,26 +935,15 @@ describe('ParseLiveQuery', function () {
954
935
await Parse . User . logIn ( 'username' , 'password' ) ;
955
936
} ) ;
956
937
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 ( ) => {
958
939
await reconfigureServer ( {
959
940
liveQuery : {
960
941
classNames : [ Parse . Session ] ,
961
942
} ,
962
943
startLiveQueryServer : true ,
963
- verbose : false ,
964
- silent : true ,
965
- } ) ;
966
-
967
- Parse . LiveQuery . on ( 'error' , error => {
968
- expect ( error ) . toBe ( 'Invalid session token' ) ;
969
944
} ) ;
970
945
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' ) ) ;
977
947
} ) ;
978
948
979
949
it ( 'handle invalid websocket payload length' , async done => {
@@ -1242,13 +1212,4 @@ describe('ParseLiveQuery', function () {
1242
1212
object . set ( { location : secondPoint } ) ;
1243
1213
await object . save ( ) ;
1244
1214
} ) ;
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
- } ) ;
1254
1215
} ) ;
0 commit comments