@@ -3,40 +3,79 @@ import { HttpClientTestingModule } from '@angular/common/http/testing';
33import { TokenPollingService } from './token-polling.service' ;
44import { RaidenService } from './raiden.service' ;
55import { TestProviders } from '../../testing/test-providers' ;
6- import Spy = jasmine . Spy ;
76import { UserToken } from '../models/usertoken' ;
8- import { of } from 'rxjs' ;
9- import { createToken } from '../../testing/test-data' ;
7+ import { of , BehaviorSubject } from 'rxjs' ;
8+ import { createToken , createChannel } from '../../testing/test-data' ;
109import BigNumber from 'bignumber.js' ;
10+ import { ChannelPollingService } from './channel-polling.service' ;
11+ import { stub } from '../../testing/stub' ;
12+ import { Channel } from '../models/channel' ;
1113
1214describe ( 'TokenPollingService' , ( ) => {
1315 let raidenService : RaidenService ;
14- let tokenSpy : Spy ;
16+ let channelsSubject : BehaviorSubject < Channel [ ] > ;
1517
1618 const token = createToken ( ) ;
1719 const updatedToken = Object . assign ( { } , token , {
1820 balance : new BigNumber ( 50 ) ,
1921 } ) ;
22+ const notOwnedToken = createToken ( { balanc : new BigNumber ( 0 ) } ) ;
23+
24+ const connectedTokens = [
25+ createToken ( {
26+ connected : {
27+ channels : 1 ,
28+ funds : new BigNumber ( 0 ) ,
29+ sum_deposits : new BigNumber ( 0 ) ,
30+ } ,
31+ } ) ,
32+ createToken ( {
33+ connected : {
34+ channels : 2 ,
35+ funds : new BigNumber ( 0 ) ,
36+ sum_deposits : new BigNumber ( 0 ) ,
37+ } ,
38+ } ) ,
39+ ] ;
40+ const channels = [
41+ createChannel ( {
42+ userToken : connectedTokens [ 0 ] ,
43+ balance : new BigNumber ( 50 ) ,
44+ } ) ,
45+ createChannel ( {
46+ userToken : connectedTokens [ 1 ] ,
47+ balance : new BigNumber ( 15 ) ,
48+ } ) ,
49+ createChannel ( {
50+ userToken : connectedTokens [ 1 ] ,
51+ balance : new BigNumber ( 5 ) ,
52+ } ) ,
53+ ] ;
54+
55+ beforeEach ( ( ) => {
56+ const channelPollingMock = stub < ChannelPollingService > ( ) ;
57+ channelsSubject = new BehaviorSubject < Channel [ ] > ( channels ) ;
58+ // @ts -ignore
59+ channelPollingMock . channels$ = channelsSubject . asObservable ( ) ;
2060
21- beforeEach ( ( ) =>
2261 TestBed . configureTestingModule ( {
2362 imports : [ HttpClientTestingModule ] ,
2463 providers : [
2564 TokenPollingService ,
65+ ChannelPollingService ,
2666 RaidenService ,
2767 TestProviders . MockRaidenConfigProvider ( ) ,
2868 TestProviders . AddressBookStubProvider ( ) ,
69+ {
70+ provide : ChannelPollingService ,
71+ useValue : channelPollingMock ,
72+ } ,
2973 ] ,
30- } )
31- ) ;
74+ } ) ;
75+ } ) ;
3276
3377 beforeEach ( ( ) => {
3478 raidenService = TestBed . inject ( RaidenService ) ;
35- tokenSpy = spyOn ( raidenService , 'getTokens' ) . and . returnValues (
36- of ( [ token ] ) ,
37- of ( [ token ] ) ,
38- of ( [ updatedToken ] )
39- ) ;
4079 } ) ;
4180
4281 it ( 'should be created' , inject (
@@ -49,6 +88,9 @@ describe('TokenPollingService', () => {
4988 it ( 'should refresh the tokens every polling interval' , inject (
5089 [ TokenPollingService ] ,
5190 fakeAsync ( ( service : TokenPollingService ) => {
91+ const tokenSpy = spyOn ( raidenService , 'getTokens' ) . and . returnValue (
92+ of ( [ token ] )
93+ ) ;
5294 const subscription = service . tokens$ . subscribe (
5395 ( tokens : UserToken [ ] ) => {
5496 expect ( tokens ) . toEqual ( [ token ] ) ;
@@ -70,6 +112,11 @@ describe('TokenPollingService', () => {
70112 it ( 'should get updates for a token' , inject (
71113 [ TokenPollingService ] ,
72114 fakeAsync ( ( service : TokenPollingService ) => {
115+ spyOn ( raidenService , 'getTokens' ) . and . returnValues (
116+ of ( [ token ] ) ,
117+ of ( [ token ] ) ,
118+ of ( [ updatedToken ] )
119+ ) ;
73120 let emittedTimes = 0 ;
74121 const subscription = service
75122 . getTokenUpdates ( token . address )
@@ -87,4 +134,32 @@ describe('TokenPollingService', () => {
87134 flush ( ) ;
88135 } )
89136 ) ) ;
137+
138+ it ( 'should calculate the sum of channel balances for each token' , inject (
139+ [ TokenPollingService ] ,
140+ ( service : TokenPollingService ) => {
141+ spyOn ( raidenService , 'getTokens' ) . and . returnValue (
142+ of ( connectedTokens )
143+ ) ;
144+ service . tokens$ . subscribe ( ( tokens : UserToken [ ] ) => {
145+ expect ( tokens [ 0 ] . sumChannelBalances ) . toEqual ( new BigNumber ( 50 ) ) ;
146+ expect ( tokens [ 1 ] . sumChannelBalances ) . toEqual ( new BigNumber ( 20 ) ) ;
147+ } ) ;
148+ }
149+ ) ) ;
150+
151+ it ( 'should sort tokens first by sum of channel balances, then owned and last not owned' , inject (
152+ [ TokenPollingService ] ,
153+ ( service : TokenPollingService ) => {
154+ spyOn ( raidenService , 'getTokens' ) . and . returnValue (
155+ of ( connectedTokens . concat ( [ token , notOwnedToken ] ) )
156+ ) ;
157+ service . tokens$ . subscribe ( ( tokens : UserToken [ ] ) => {
158+ expect ( tokens [ 0 ] . address ) . toBe ( connectedTokens [ 0 ] . address ) ;
159+ expect ( tokens [ 1 ] . address ) . toBe ( connectedTokens [ 1 ] . address ) ;
160+ expect ( tokens [ 2 ] . address ) . toBe ( token . address ) ;
161+ expect ( tokens [ 3 ] . address ) . toBe ( notOwnedToken . address ) ;
162+ } ) ;
163+ }
164+ ) ) ;
90165} ) ;
0 commit comments