@@ -119,136 +119,137 @@ describe('TokenBalancesController', () => {
119
119
} ) ;
120
120
} ) ;
121
121
122
- describe ( 'with network controller' , ( ) => {
123
- let messenger : NetworkControllerMessenger ;
124
- let preferences : PreferencesController ;
125
- beforeEach ( ( ) => {
126
- messenger = new ControllerMessenger ( ) . getRestricted ( {
122
+ const setupControllers = ( ) => {
123
+ const messenger : NetworkControllerMessenger =
124
+ new ControllerMessenger ( ) . getRestricted ( {
127
125
name : 'NetworkController' ,
128
126
allowedEvents : [ 'NetworkController:stateChange' ] ,
129
127
allowedActions : [ ] ,
130
128
} ) ;
131
129
132
- new NetworkController ( {
133
- messenger,
134
- infuraProjectId : 'potato' ,
135
- } ) ;
136
- preferences = new PreferencesController ( ) ;
130
+ new NetworkController ( {
131
+ messenger,
132
+ infuraProjectId : 'potato' ,
137
133
} ) ;
134
+ const preferences = new PreferencesController ( ) ;
135
+ return { messenger, preferences } ;
136
+ } ;
138
137
139
- afterEach ( ( ) => {
140
- messenger . clearEventSubscriptions ( 'NetworkController:stateChange' ) ;
138
+ it ( 'should update all balances' , async ( ) => {
139
+ const { messenger, preferences } = setupControllers ( ) ;
140
+ const assets = new TokensController ( {
141
+ onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
142
+ onNetworkStateChange : ( listener ) =>
143
+ messenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
141
144
} ) ;
145
+ const address = '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0' ;
146
+ const tokenBalances = new TokenBalancesController (
147
+ {
148
+ onTokensStateChange : ( listener ) => assets . subscribe ( listener ) ,
149
+ getSelectedAddress : ( ) => preferences . state . selectedAddress ,
150
+ getERC20BalanceOf : sinon . stub ( ) . returns ( new BN ( 1 ) ) ,
151
+ } ,
152
+ {
153
+ interval : 1337 ,
154
+ tokens : [ { address, decimals : 18 , symbol : 'EOS' , aggregators : [ ] } ] ,
155
+ } ,
156
+ ) ;
157
+ expect ( tokenBalances . state . contractBalances ) . toStrictEqual ( { } ) ;
142
158
143
- it ( 'should update all balances' , async ( ) => {
144
- const assets = new TokensController ( {
145
- onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
146
- onNetworkStateChange : ( listener ) =>
147
- messenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
148
- } ) ;
149
- const address = '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0' ;
150
- const tokenBalances = new TokenBalancesController (
151
- {
152
- onTokensStateChange : ( listener ) => assets . subscribe ( listener ) ,
153
- getSelectedAddress : ( ) => preferences . state . selectedAddress ,
154
- getERC20BalanceOf : sinon . stub ( ) . returns ( new BN ( 1 ) ) ,
155
- } ,
156
- {
157
- interval : 1337 ,
158
- tokens : [ { address, decimals : 18 , symbol : 'EOS' , aggregators : [ ] } ] ,
159
- } ,
160
- ) ;
161
- expect ( tokenBalances . state . contractBalances ) . toStrictEqual ( { } ) ;
159
+ await tokenBalances . updateBalances ( ) ;
160
+ const mytoken = getToken ( tokenBalances , address ) ;
161
+ expect ( mytoken ?. balanceError ) . toBeNull ( ) ;
162
+ expect ( Object . keys ( tokenBalances . state . contractBalances ) ) . toContain (
163
+ address ,
164
+ ) ;
162
165
163
- await tokenBalances . updateBalances ( ) ;
164
- const mytoken = getToken ( tokenBalances , address ) ;
165
- expect ( mytoken ?. balanceError ) . toBeNull ( ) ;
166
- expect ( Object . keys ( tokenBalances . state . contractBalances ) ) . toContain (
167
- address ,
168
- ) ;
166
+ expect (
167
+ tokenBalances . state . contractBalances [ address ] . toNumber ( ) ,
168
+ ) . toBeGreaterThan ( 0 ) ;
169
+
170
+ messenger . clearEventSubscriptions ( 'NetworkController:stateChange' ) ;
171
+ } ) ;
169
172
170
- expect (
171
- tokenBalances . state . contractBalances [ address ] . toNumber ( ) ,
172
- ) . toBeGreaterThan ( 0 ) ;
173
+ it ( 'should handle `getERC20BalanceOf` error case' , async ( ) => {
174
+ const { messenger, preferences } = setupControllers ( ) ;
175
+ const assets = new TokensController ( {
176
+ onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
177
+ onNetworkStateChange : ( listener ) =>
178
+ messenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
173
179
} ) ;
180
+ const errorMsg = 'Failed to get balance' ;
181
+ const address = '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0' ;
182
+ const getERC20BalanceOfStub = sinon
183
+ . stub ( )
184
+ . returns ( Promise . reject ( new Error ( errorMsg ) ) ) ;
185
+ const tokenBalances = new TokenBalancesController (
186
+ {
187
+ onTokensStateChange : ( listener ) => assets . subscribe ( listener ) ,
188
+ getSelectedAddress : ( ) => preferences . state . selectedAddress ,
189
+ getERC20BalanceOf : getERC20BalanceOfStub ,
190
+ } ,
191
+ {
192
+ interval : 1337 ,
193
+ tokens : [ { address, decimals : 18 , symbol : 'EOS' , aggregators : [ ] } ] ,
194
+ } ,
195
+ ) ;
174
196
175
- it ( 'should handle `getERC20BalanceOf` error case' , async ( ) => {
176
- const assets = new TokensController ( {
177
- onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
178
- onNetworkStateChange : ( listener ) =>
179
- messenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
180
- } ) ;
181
- const errorMsg = 'Failed to get balance' ;
182
- const address = '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0' ;
183
- const getERC20BalanceOfStub = sinon
184
- . stub ( )
185
- . returns ( Promise . reject ( new Error ( errorMsg ) ) ) ;
186
- const tokenBalances = new TokenBalancesController (
187
- {
188
- onTokensStateChange : ( listener ) => assets . subscribe ( listener ) ,
189
- getSelectedAddress : ( ) => preferences . state . selectedAddress ,
190
- getERC20BalanceOf : getERC20BalanceOfStub ,
191
- } ,
192
- {
193
- interval : 1337 ,
194
- tokens : [ { address, decimals : 18 , symbol : 'EOS' , aggregators : [ ] } ] ,
195
- } ,
196
- ) ;
197
+ expect ( tokenBalances . state . contractBalances ) . toStrictEqual ( { } ) ;
198
+ await tokenBalances . updateBalances ( ) ;
199
+ const mytoken = getToken ( tokenBalances , address ) ;
200
+ expect ( mytoken ?. balanceError ) . toBeInstanceOf ( Error ) ;
201
+ expect ( mytoken ?. balanceError ) . toHaveProperty ( 'message' , errorMsg ) ;
202
+ expect (
203
+ tokenBalances . state . contractBalances [ address ] . toNumber ( ) ,
204
+ ) . toStrictEqual ( 0 ) ;
197
205
198
- expect ( tokenBalances . state . contractBalances ) . toStrictEqual ( { } ) ;
199
- await tokenBalances . updateBalances ( ) ;
200
- const mytoken = getToken ( tokenBalances , address ) ;
201
- expect ( mytoken ?. balanceError ) . toBeInstanceOf ( Error ) ;
202
- expect ( mytoken ?. balanceError ) . toHaveProperty ( 'message' , errorMsg ) ;
203
- expect (
204
- tokenBalances . state . contractBalances [ address ] . toNumber ( ) ,
205
- ) . toStrictEqual ( 0 ) ;
206
+ getERC20BalanceOfStub . returns ( new BN ( 1 ) ) ;
207
+ await tokenBalances . updateBalances ( ) ;
208
+ expect ( mytoken ?. balanceError ) . toBeNull ( ) ;
209
+ expect ( Object . keys ( tokenBalances . state . contractBalances ) ) . toContain (
210
+ address ,
211
+ ) ;
206
212
207
- getERC20BalanceOfStub . returns ( new BN ( 1 ) ) ;
208
- await tokenBalances . updateBalances ( ) ;
209
- expect ( mytoken ?. balanceError ) . toBeNull ( ) ;
210
- expect ( Object . keys ( tokenBalances . state . contractBalances ) ) . toContain (
211
- address ,
212
- ) ;
213
+ expect (
214
+ tokenBalances . state . contractBalances [ address ] . toNumber ( ) ,
215
+ ) . toBeGreaterThan ( 0 ) ;
213
216
214
- expect (
215
- tokenBalances . state . contractBalances [ address ] . toNumber ( ) ,
216
- ) . toBeGreaterThan ( 0 ) ;
217
- } ) ;
217
+ messenger . clearEventSubscriptions ( 'NetworkController:stateChange' ) ;
218
+ } ) ;
218
219
219
- it ( 'should subscribe to new sibling assets controllers' , async ( ) => {
220
- const assetsContract = new AssetsContractController ( {
221
- onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
222
- onNetworkStateChange : ( listener ) =>
223
- messenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
224
- } ) ;
225
- const tokensController = new TokensController ( {
226
- onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
227
- onNetworkStateChange : ( listener ) =>
228
- messenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
229
- } ) ;
220
+ it ( 'should subscribe to new sibling assets controllers' , async ( ) => {
221
+ const { messenger, preferences } = setupControllers ( ) ;
222
+ const assetsContract = new AssetsContractController ( {
223
+ onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
224
+ onNetworkStateChange : ( listener ) =>
225
+ messenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
226
+ } ) ;
227
+ const tokensController = new TokensController ( {
228
+ onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
229
+ onNetworkStateChange : ( listener ) =>
230
+ messenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
231
+ } ) ;
230
232
231
- const stub = stubCreateEthers ( tokensController , false ) ;
233
+ const stub = stubCreateEthers ( tokensController , false ) ;
232
234
233
- const tokenBalances = new TokenBalancesController (
234
- {
235
- onTokensStateChange : ( listener ) =>
236
- tokensController . subscribe ( listener ) , // needs to be unsubbed?
237
- getSelectedAddress : ( ) => preferences . state . selectedAddress ,
238
- getERC20BalanceOf :
239
- assetsContract . getERC20BalanceOf . bind ( assetsContract ) ,
240
- } ,
241
- { interval : 1337 } ,
242
- ) ;
243
- const updateBalances = sinon . stub ( tokenBalances , 'updateBalances' ) ;
244
- await tokensController . addToken ( '0x00' , 'FOO' , 18 ) ;
245
- const { tokens } = tokensController . state ;
246
- const found = tokens . filter ( ( token : Token ) => token . address === '0x00' ) ;
247
- expect ( found . length > 0 ) . toBe ( true ) ;
248
- expect ( updateBalances . called ) . toBe ( true ) ;
235
+ const tokenBalances = new TokenBalancesController (
236
+ {
237
+ onTokensStateChange : ( listener ) => tokensController . subscribe ( listener ) , // needs to be unsubbed?
238
+ getSelectedAddress : ( ) => preferences . state . selectedAddress ,
239
+ getERC20BalanceOf :
240
+ assetsContract . getERC20BalanceOf . bind ( assetsContract ) ,
241
+ } ,
242
+ { interval : 1337 } ,
243
+ ) ;
244
+ const updateBalances = sinon . stub ( tokenBalances , 'updateBalances' ) ;
245
+ await tokensController . addToken ( '0x00' , 'FOO' , 18 ) ;
246
+ const { tokens } = tokensController . state ;
247
+ const found = tokens . filter ( ( token : Token ) => token . address === '0x00' ) ;
248
+ expect ( found . length > 0 ) . toBe ( true ) ;
249
+ expect ( updateBalances . called ) . toBe ( true ) ;
249
250
250
- stub . restore ( ) ;
251
- } ) ;
251
+ stub . restore ( ) ;
252
+ messenger . clearEventSubscriptions ( 'NetworkController:stateChange' ) ;
252
253
} ) ;
253
254
254
255
it ( 'should update token balances when detected tokens are added' , async ( ) => {
0 commit comments