1
- import { fakeAsync , TestBed , tick } from '@angular/core/testing' ;
1
+ import { fakeAsync , flush , TestBed , tick } from '@angular/core/testing' ;
2
2
import { Subject } from 'rxjs' ;
3
3
import { first , take } from 'rxjs/operators' ;
4
4
import {
@@ -208,6 +208,7 @@ describe('ChannelService', () => {
208
208
events$ . next ( { eventType : 'connection.recovered' } as ClientEvent ) ;
209
209
210
210
tick ( ) ;
211
+ flush ( ) ;
211
212
212
213
expect ( spy ) . toHaveBeenCalledWith ( channels ) ;
213
214
expect ( activeChannelSpy ) . toHaveBeenCalledWith ( channels [ 0 ] ) ;
@@ -577,6 +578,10 @@ describe('ChannelService', () => {
577
578
578
579
it ( 'should watch for new message events' , async ( ) => {
579
580
await init ( ) ;
581
+ // wait for mark read throttle time
582
+ await new Promise ( ( resolve ) => {
583
+ setTimeout ( resolve , service [ 'markReadThrottleTime' ] ) ;
584
+ } ) ;
580
585
const spy = jasmine . createSpy ( ) ;
581
586
service . activeChannelMessages$ . subscribe ( spy ) ;
582
587
const prevCount = ( spy . calls . mostRecent ( ) . args [ 0 ] as Channel [ ] ) . length ;
@@ -991,6 +996,7 @@ describe('ChannelService', () => {
991
996
992
997
it ( 'should add the new channel to the top of the list, and start watching it, if user is added to a channel' , fakeAsync ( async ( ) => {
993
998
await init ( ) ;
999
+ flush ( ) ;
994
1000
const newChannel = generateMockChannels ( ) [ 0 ] ;
995
1001
newChannel . cid = 'newchannel' ;
996
1002
newChannel . id = 'newchannel' ;
@@ -1030,6 +1036,7 @@ describe('ChannelService', () => {
1030
1036
event : { channel : channel } as any as Event < DefaultStreamChatGenerics > ,
1031
1037
} ) ;
1032
1038
tick ( ) ;
1039
+ flush ( ) ;
1033
1040
1034
1041
const channels = spy . calls . mostRecent ( ) . args [ 0 ] as Channel [ ] ;
1035
1042
const firstChannel = channels [ 0 ] ;
@@ -1059,6 +1066,7 @@ describe('ChannelService', () => {
1059
1066
event : { channel : channel } as any as Event < DefaultStreamChatGenerics > ,
1060
1067
} ) ;
1061
1068
tick ( ) ;
1069
+ flush ( ) ;
1062
1070
1063
1071
const channels = spy . calls . mostRecent ( ) . args [ 0 ] as Channel [ ] ;
1064
1072
@@ -2242,6 +2250,7 @@ describe('ChannelService', () => {
2242
2250
2243
2251
it ( 'should relaod active channel if active channel is not present after state reconnect' , fakeAsync ( async ( ) => {
2244
2252
await init ( ) ;
2253
+ flush ( ) ;
2245
2254
let activeChannel ! : Channel < DefaultStreamChatGenerics > ;
2246
2255
service . activeChannel$ . subscribe ( ( c ) => ( activeChannel = c ! ) ) ;
2247
2256
let channels ! : Channel < DefaultStreamChatGenerics > [ ] ;
@@ -2251,6 +2260,7 @@ describe('ChannelService', () => {
2251
2260
mockChatClient . queryChannels . and . resolveTo ( channels ) ;
2252
2261
events$ . next ( { eventType : 'connection.recovered' } as ClientEvent ) ;
2253
2262
tick ( ) ;
2263
+ flush ( ) ;
2254
2264
const spy = jasmine . createSpy ( ) ;
2255
2265
service . activeChannel$ . subscribe ( spy ) ;
2256
2266
@@ -2276,6 +2286,7 @@ describe('ChannelService', () => {
2276
2286
activeChannel . state . messages . push ( newMessage ) ;
2277
2287
events$ . next ( { eventType : 'connection.recovered' } as ClientEvent ) ;
2278
2288
tick ( ) ;
2289
+ flush ( ) ;
2279
2290
2280
2291
expect ( spy ) . not . toHaveBeenCalled ( ) ;
2281
2292
expect ( service . deselectActiveChannel ) . not . toHaveBeenCalled ( ) ;
@@ -2639,4 +2650,76 @@ describe('ChannelService', () => {
2639
2650
expect ( customQuery ) . toHaveBeenCalledWith ( 'next-page' ) ;
2640
2651
expect ( hasMoreSpy ) . toHaveBeenCalledWith ( false ) ;
2641
2652
} ) ;
2653
+
2654
+ it ( 'should throttle mark read API calls' , async ( ) => {
2655
+ await init ( ) ;
2656
+ // wait for mark read throttle time
2657
+ await new Promise ( ( resolve ) => {
2658
+ setTimeout ( resolve , service [ 'markReadThrottleTime' ] ) ;
2659
+ } ) ;
2660
+
2661
+ const activeChannel = service . activeChannel ! ;
2662
+ spyOn ( activeChannel , 'markRead' ) ;
2663
+
2664
+ ( activeChannel as MockChannel ) . handleEvent ( 'message.new' , mockMessage ( ) ) ;
2665
+
2666
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 1 ) ;
2667
+
2668
+ ( activeChannel as MockChannel ) . handleEvent ( 'message.new' , mockMessage ( ) ) ;
2669
+
2670
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 1 ) ;
2671
+
2672
+ // wait for mark read throttle time
2673
+ await new Promise ( ( resolve ) => {
2674
+ setTimeout ( resolve , service [ 'markReadThrottleTime' ] ) ;
2675
+ } ) ;
2676
+
2677
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 2 ) ;
2678
+ } ) ;
2679
+
2680
+ it ( 'should throttle mark read API calls - channel change' , async ( ) => {
2681
+ await init ( ) ;
2682
+ // wait for mark read throttle time
2683
+ await new Promise ( ( resolve ) => {
2684
+ setTimeout ( resolve , service [ 'markReadThrottleTime' ] ) ;
2685
+ } ) ;
2686
+
2687
+ const activeChannel = service . activeChannel ! ;
2688
+ spyOn ( activeChannel , 'markRead' ) ;
2689
+
2690
+ ( activeChannel as MockChannel ) . handleEvent ( 'message.new' , mockMessage ( ) ) ;
2691
+
2692
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 1 ) ;
2693
+
2694
+ ( activeChannel as MockChannel ) . handleEvent ( 'message.new' , mockMessage ( ) ) ;
2695
+
2696
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 1 ) ;
2697
+
2698
+ service . setAsActiveChannel ( service . channels [ 1 ] ) ;
2699
+
2700
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 2 ) ;
2701
+ } ) ;
2702
+
2703
+ it ( 'should throttle mark read API calls - reset' , async ( ) => {
2704
+ await init ( ) ;
2705
+ // wait for mark read throttle time
2706
+ await new Promise ( ( resolve ) => {
2707
+ setTimeout ( resolve , service [ 'markReadThrottleTime' ] ) ;
2708
+ } ) ;
2709
+
2710
+ const activeChannel = service . activeChannel ! ;
2711
+ spyOn ( activeChannel , 'markRead' ) ;
2712
+
2713
+ ( activeChannel as MockChannel ) . handleEvent ( 'message.new' , mockMessage ( ) ) ;
2714
+
2715
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 1 ) ;
2716
+
2717
+ ( activeChannel as MockChannel ) . handleEvent ( 'message.new' , mockMessage ( ) ) ;
2718
+
2719
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 1 ) ;
2720
+
2721
+ service . reset ( ) ;
2722
+
2723
+ expect ( activeChannel . markRead ) . toHaveBeenCalledTimes ( 2 ) ;
2724
+ } ) ;
2642
2725
} ) ;
0 commit comments