@ -1,11 +1,14 @@
const assert = require ( 'assert' )
const ObservableStore = require ( 'obs-store' )
const PreferencesController = require ( '../../../../app/scripts/controllers/preferences' )
describe ( 'preferences controller' , function ( ) {
let preferencesController
let network
beforeEach ( ( ) => {
preferencesController = new PreferencesController ( )
network = { providerStore : new ObservableStore ( { type : 'mainnet' } ) }
preferencesController = new PreferencesController ( { network } )
} )
describe ( 'setAddresses' , function ( ) {
@ -28,6 +31,20 @@ describe('preferences controller', function () {
} )
} )
it ( 'should create account tokens for each account in the store' , function ( ) {
preferencesController . setAddresses ( [
'0xda22le' ,
'0x7e57e2' ,
] )
const accountTokens = preferencesController . store . getState ( ) . accountTokens
assert . deepEqual ( accountTokens , {
'0xda22le' : { } ,
'0x7e57e2' : { } ,
} )
} )
it ( 'should replace its list of addresses' , function ( ) {
preferencesController . setAddresses ( [
'0xda22le' ,
@ -64,6 +81,17 @@ describe('preferences controller', function () {
assert . equal ( preferencesController . store . getState ( ) . identities [ '0xda22le' ] , undefined )
} )
it ( 'should remove an address from state and respective tokens' , function ( ) {
preferencesController . setAddresses ( [
'0xda22le' ,
'0x7e57e2' ,
] )
preferencesController . removeAddress ( '0xda22le' )
assert . equal ( preferencesController . store . getState ( ) . accountTokens [ '0xda22le' ] , undefined )
} )
it ( 'should switch accounts if the selected address is removed' , function ( ) {
preferencesController . setAddresses ( [
'0xda22le' ,
@ -158,6 +186,42 @@ describe('preferences controller', function () {
await preferencesController . addToken ( address , symbol , decimals )
assert . equal ( preferencesController . getTokens ( ) . length , 1 , 'one token added for 2nd address' )
} )
it ( 'should add token per account' , async function ( ) {
const addressFirst = '0xabcdef1234567'
const addressSecond = '0xabcdef1234568'
const symbolFirst = 'ABBR'
const symbolSecond = 'ABBB'
const decimals = 5
await preferencesController . setSelectedAddress ( '0x7e57e2' )
await preferencesController . addToken ( addressFirst , symbolFirst , decimals )
const tokensFirstAddress = preferencesController . getTokens ( )
await preferencesController . setSelectedAddress ( '0xda22le' )
await preferencesController . addToken ( addressSecond , symbolSecond , decimals )
const tokensSeconAddress = preferencesController . getTokens ( )
assert . notEqual ( tokensFirstAddress , tokensSeconAddress , 'add different tokens for two account and tokens are equal' )
} )
it ( 'should add token per network' , async function ( ) {
const addressFirst = '0xabcdef1234567'
const addressSecond = '0xabcdef1234568'
const symbolFirst = 'ABBR'
const symbolSecond = 'ABBB'
const decimals = 5
network . providerStore . updateState ( { type : 'mainnet' } )
await preferencesController . addToken ( addressFirst , symbolFirst , decimals )
const tokensFirstAddress = preferencesController . getTokens ( )
network . providerStore . updateState ( { type : 'rinkeby' } )
await preferencesController . addToken ( addressSecond , symbolSecond , decimals )
const tokensSeconAddress = preferencesController . getTokens ( )
assert . notEqual ( tokensFirstAddress , tokensSeconAddress , 'add different tokens for two networks and tokens are equal' )
} )
} )
describe ( 'removeToken' , function ( ) {
@ -182,6 +246,98 @@ describe('preferences controller', function () {
const [ token1 ] = tokens
assert . deepEqual ( token1 , { address : '0xb' , symbol : 'B' , decimals : 5 } )
} )
it ( 'should remove a token from its state on corresponding address' , async function ( ) {
await preferencesController . setSelectedAddress ( '0x7e57e2' )
await preferencesController . addToken ( '0xa' , 'A' , 4 )
await preferencesController . addToken ( '0xb' , 'B' , 5 )
await preferencesController . setSelectedAddress ( '0x7e57e3' )
await preferencesController . addToken ( '0xa' , 'A' , 4 )
await preferencesController . addToken ( '0xb' , 'B' , 5 )
const initialTokensSecond = preferencesController . getTokens ( )
await preferencesController . setSelectedAddress ( '0x7e57e2' )
await preferencesController . removeToken ( '0xa' )
const tokensFirst = preferencesController . getTokens ( )
assert . equal ( tokensFirst . length , 1 , 'one token removed in account' )
const [ token1 ] = tokensFirst
assert . deepEqual ( token1 , { address : '0xb' , symbol : 'B' , decimals : 5 } )
await preferencesController . setSelectedAddress ( '0x7e57e3' )
const tokensSecond = preferencesController . getTokens ( )
assert . deepEqual ( tokensSecond , initialTokensSecond , 'token deleted for account' )
} )
it ( 'should remove a token from its state on corresponding network' , async function ( ) {
network . providerStore . updateState ( { type : 'mainnet' } )
await preferencesController . addToken ( '0xa' , 'A' , 4 )
await preferencesController . addToken ( '0xb' , 'B' , 5 )
network . providerStore . updateState ( { type : 'rinkeby' } )
await preferencesController . addToken ( '0xa' , 'A' , 4 )
await preferencesController . addToken ( '0xb' , 'B' , 5 )
const initialTokensSecond = preferencesController . getTokens ( )
network . providerStore . updateState ( { type : 'mainnet' } )
await preferencesController . removeToken ( '0xa' )
const tokensFirst = preferencesController . getTokens ( )
assert . equal ( tokensFirst . length , 1 , 'one token removed in network' )
const [ token1 ] = tokensFirst
assert . deepEqual ( token1 , { address : '0xb' , symbol : 'B' , decimals : 5 } )
network . providerStore . updateState ( { type : 'rinkeby' } )
const tokensSecond = preferencesController . getTokens ( )
assert . deepEqual ( tokensSecond , initialTokensSecond , 'token deleted for network' )
} )
} )
describe ( 'on setSelectedAddress' , function ( ) {
it ( 'should update tokens from its state on corresponding address' , async function ( ) {
await preferencesController . setSelectedAddress ( '0x7e57e2' )
await preferencesController . addToken ( '0xa' , 'A' , 4 )
await preferencesController . addToken ( '0xb' , 'B' , 5 )
await preferencesController . setSelectedAddress ( '0x7e57e3' )
await preferencesController . addToken ( '0xa' , 'C' , 4 )
await preferencesController . addToken ( '0xb' , 'D' , 5 )
await preferencesController . setSelectedAddress ( '0x7e57e2' )
const initialTokensFirst = preferencesController . getTokens ( )
await preferencesController . setSelectedAddress ( '0x7e57e3' )
const initialTokensSecond = preferencesController . getTokens ( )
assert . notDeepEqual ( initialTokensFirst , initialTokensSecond , 'tokens not equal for different accounts and tokens' )
await preferencesController . setSelectedAddress ( '0x7e57e2' )
const tokensFirst = preferencesController . getTokens ( )
await preferencesController . setSelectedAddress ( '0x7e57e3' )
const tokensSecond = preferencesController . getTokens ( )
assert . deepEqual ( tokensFirst , initialTokensFirst , 'tokens equal for same account' )
assert . deepEqual ( tokensSecond , initialTokensSecond , 'tokens equal for same account' )
} )
} )
describe ( 'on updateStateNetworkType' , function ( ) {
it ( 'should remove a token from its state on corresponding network' , async function ( ) {
network . providerStore . updateState ( { type : 'mainnet' } )
await preferencesController . addToken ( '0xa' , 'A' , 4 )
await preferencesController . addToken ( '0xb' , 'B' , 5 )
const initialTokensFirst = preferencesController . getTokens ( )
network . providerStore . updateState ( { type : 'rinkeby' } )
await preferencesController . addToken ( '0xa' , 'C' , 4 )
await preferencesController . addToken ( '0xb' , 'D' , 5 )
const initialTokensSecond = preferencesController . getTokens ( )
assert . notDeepEqual ( initialTokensFirst , initialTokensSecond , 'tokens not equal for different networks and tokens' )
network . providerStore . updateState ( { type : 'mainnet' } )
const tokensFirst = preferencesController . getTokens ( )
network . providerStore . updateState ( { type : 'rinkeby' } )
const tokensSecond = preferencesController . getTokens ( )
assert . deepEqual ( tokensFirst , initialTokensFirst , 'tokens equal for same network' )
assert . deepEqual ( tokensSecond , initialTokensSecond , 'tokens equal for same network' )
} )
} )
} )