MyCrypto/spec/reducers/wallet.spec.ts
Eddie Wang 980366694c RPC Error Handling (#384)
* create ensureOkResponse and check against RPC responses

* Merge with develop branch

* added single unit test

* main nodes added

* getBalance method

* remove console.log

* minor conflict fix - readd polyfill to integration test

* added two more method tests

* seperate rpcnode from extended classes

* fixes etherscan

* added all tests

* revert files with only formatting changes

* remove console.logs - still need to update snapshot before tests will pass

* updated snapshot due to RpcNode fixes for Infura and Etherscan nodes

* added RpcNodeTest config so we don't rely on constants in code

* undo formatting changes

* Multiple fixes to error handling tokens.

* Fixed TSC errors

* Minor styling edit - change async func to promise

* changed shape of tokenBalances

* change balance type back to stricter TokenValue type

* remove package.json change and include test for error state.

* minor change removing unneeded line of code

* added longer timeout for api

* update snapshot
2017-11-29 23:35:17 -06:00

135 lines
3.3 KiB
TypeScript

import { wallet, INITIAL_STATE } from 'reducers/wallet';
import { Wei, TokenValue } from 'libs/units';
import * as walletActions from 'actions/wallet';
describe('wallet reducer', () => {
it('should handle WALLET_SET', () => {
const doSomething = new Promise<string>(resolve => {
setTimeout(() => resolve('Success'), 10);
});
const walletInstance = {
getAddressString: () => doSomething,
signRawTransaction: () => doSomething,
signMessage: () => doSomething
};
expect(wallet(undefined, walletActions.setWallet(walletInstance))).toEqual({
...INITIAL_STATE,
inst: walletInstance
});
});
it('should handle WALLET_RESET', () => {
expect(wallet(undefined, walletActions.resetWallet())).toEqual(
INITIAL_STATE
);
});
it('should handle WALLET_SET_BALANCE_PENDING', () => {
expect(wallet(undefined, walletActions.setBalancePending())).toEqual({
...INITIAL_STATE,
balance: {
...INITIAL_STATE.balance,
isPending: true
}
});
});
it('should handle WALLET_SET_BALANCE_FULFILLED', () => {
const balance = Wei('100');
expect(
wallet(undefined, walletActions.setBalanceFullfilled(balance))
).toEqual({
...INITIAL_STATE,
balance: {
wei: balance,
isPending: false
}
});
});
it('should handle WALLET_SET_BALANCE_REJECTED', () => {
expect(wallet(undefined, walletActions.setBalanceRejected())).toEqual({
...INITIAL_STATE,
balance: {
...INITIAL_STATE.balance,
isPending: false
}
});
});
it('should handle WALLET_SET_TOKEN_BALANCES', () => {
const tokenBalances = {
OMG: {
balance: TokenValue('20'),
error: null
},
WTT: {
balance: TokenValue('0'),
error: 'The request failed to execute'
}
};
expect(
wallet(undefined, walletActions.setTokenBalances(tokenBalances))
).toEqual({
...INITIAL_STATE,
tokens: tokenBalances
});
});
it('should handle WALLET_BROADCAST_TX_REQUESTED', () => {
const signedTx = '0xdeadbeef';
// test broadcast where first time seeing transaction
expect(wallet(undefined, walletActions.broadcastTx(signedTx))).toEqual({
...INITIAL_STATE,
transactions: [
{
signedTx,
isBroadcasting: true,
successfullyBroadcast: false
}
]
});
});
it('should handle WALLET_BROADCAST_TX_SUCCEEDED', () => {
const signedTx = '0xdead';
const txHash = '0xbeef';
const state = wallet(undefined, walletActions.broadcastTx(signedTx));
expect(
wallet(state, walletActions.broadcastTxSucceded(txHash, signedTx))
).toEqual({
...INITIAL_STATE,
transactions: [
{
signedTx,
isBroadcasting: false,
successfullyBroadcast: true
}
]
});
});
it('should handle WALLET_BROADCAST_TX_FAILED', () => {
const signedTx = '0xdeadbeef';
const errorMsg = 'Broadcasting failed.';
const state = wallet(undefined, walletActions.broadcastTx(signedTx));
expect(
wallet(state, walletActions.broadCastTxFailed(signedTx, errorMsg))
).toEqual({
...INITIAL_STATE,
transactions: [
{
signedTx,
isBroadcasting: false,
successfullyBroadcast: false
}
]
});
});
});