@@ -80,11 +80,15 @@ describe('createProviderStatusTracker', () => {
80
80
rewardsProvider = new TrackedRewardsProvider ( mockRewardsProvider ( ) ) ;
81
81
} ) ;
82
82
83
+ // n - not pending
84
+ // p - pending
83
85
it ( 'isAnyRequestPending$: true if there are any reqs in flight, false when all resolved' , ( ) => {
84
86
createTestScheduler ( ) . run ( ( { cold, expectObservable } ) => {
87
+ const source = 'ab-c-d-e-f-g-h-i' ;
88
+ const status = '-p--np--np------n' ;
85
89
const getProviderSyncRelevantStats = jest
86
90
. fn ( )
87
- . mockReturnValueOnce ( cold < ProviderFnStats [ ] > ( 'ab-c-d-e-f-g-h-i' , providerFnStats ) ) ;
91
+ . mockReturnValueOnce ( cold < ProviderFnStats [ ] > ( source , providerFnStats ) ) ;
88
92
const tracker = createProviderStatusTracker (
89
93
{
90
94
assetProvider,
@@ -99,23 +103,52 @@ describe('createProviderStatusTracker', () => {
99
103
{ getProviderSyncRelevantStats }
100
104
) ;
101
105
// debounced by 1
102
- expectObservable ( tracker . isAnyRequestPending$ ) . toBe ( '--b-c-d-e-f-----i' , {
103
- b : true ,
104
- c : false ,
105
- d : true ,
106
- e : false ,
107
- f : true ,
108
- i : false
106
+ expectObservable ( tracker . isAnyRequestPending$ ) . toBe ( status , {
107
+ n : false ,
108
+ p : true
109
109
} ) ;
110
110
} ) ;
111
111
} ) ;
112
112
113
- // eslint-disable-next-line max-len
113
+ it . each ( [
114
+ { descr : 'not-pending is debounced' , expected : '---n|' , source : 'aaa-|' } ,
115
+ { descr : 'pending are not debounced' , expected : 'p--|' , source : 'bbb|' } ,
116
+ { descr : 'not-pending are dropped because they were debounced, pending is emitted immediately' , expected : '--p|' , source : 'aab|' } ,
117
+ { descr : 'flipping pending status shows pending, then waits for the first not-pending debounce to expire' , expected : 'p-----n|' , source : 'bababa-|' }
118
+ ] ) ( 'isAnyRequestPending$: %s' , ( { descr, source, expected } ) => {
119
+ createTestScheduler ( ) . run ( ( { cold, expectObservable } ) => {
120
+ const getProviderSyncRelevantStats = jest
121
+ . fn ( )
122
+ . mockReturnValueOnce ( cold < ProviderFnStats [ ] > ( source , providerFnStats ) ) ;
123
+
124
+ const tracker = createProviderStatusTracker (
125
+ {
126
+ assetProvider,
127
+ chainHistoryProvider,
128
+ logger : dummyLogger ,
129
+ networkInfoProvider,
130
+ rewardsProvider,
131
+ stakePoolProvider,
132
+ utxoProvider
133
+ } ,
134
+ { consideredOutOfSyncAfter : timeout } ,
135
+ { getProviderSyncRelevantStats }
136
+ ) ;
137
+
138
+ expectObservable ( tracker . isAnyRequestPending$ ) . toBe ( expected , {
139
+ n : false ,
140
+ p : true
141
+ } , descr ) ;
142
+ } ) ;
143
+ } ) ;
144
+
114
145
it ( 'isSettled$: false on load, true when all requests are resolved, then reverse of isAnyRequestPending' , async ( ) => {
115
146
createTestScheduler ( ) . run ( ( { cold, expectObservable } ) => {
147
+ const source = '-a-b-c-d-e-f-g-h-i' ;
148
+ const settle = 'a---------ef------i' ;
116
149
const getProviderSyncRelevantStats = jest
117
150
. fn ( )
118
- . mockReturnValueOnce ( cold < ProviderFnStats [ ] > ( '-a-b-c-d-e-f-g-h-i' , providerFnStats ) ) ;
151
+ . mockReturnValueOnce ( cold < ProviderFnStats [ ] > ( source , providerFnStats ) ) ;
119
152
const tracker = createProviderStatusTracker (
120
153
{
121
154
assetProvider,
@@ -130,7 +163,7 @@ describe('createProviderStatusTracker', () => {
130
163
{ getProviderSyncRelevantStats }
131
164
) ;
132
165
// debounced by 1
133
- expectObservable ( tracker . isSettled$ ) . toBe ( 'a---------e-f-----i' , {
166
+ expectObservable ( tracker . isSettled$ ) . toBe ( settle , {
134
167
a : false ,
135
168
e : true ,
136
169
f : false ,
0 commit comments