MyCrypto/spec/reducers/wallet.spec.ts

126 lines
3.2 KiB
TypeScript
Raw Normal View History

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', () => {
Replace bignumber.js with bn.js (#319) * Add definition file for bn.js * Remove types-bn * make isBN a static property * progress commit -- swap out bignumber.js for bn.js * Swap out bignumber for bn in vendor * Change modn to number return * Start to strip out units lib for a string manipulation based lib * Convert codebase to only base units * Get rid of useless component * Handle only wei in values * Use unit conversion in sidebar * Automatically strip hex prefix, and handle decimal edge case * Handle base 16 wei in transactions * Make a render callback component for dealing with unit conversion * Switch contracts to use bn.js, and get transaction values from signedTx instead of state * Get send transaction working with bn.js * Remove redundant hex stripping, return base value of tokens * Cleanup unit file * Re-implement toFixed for strings * Use formatNumber in codebase * Cleanup code * Undo package test changes * Update snapshot and remove console logs * Use TokenValue / Wei more consistently where applicable * Add typing to deterministicWallets, fix confirmation modal, make UnitDisplay more flexible * Clean up prop handling in UnitDisplay * Change instanceof to typeof check, change boolean of displayBalance * Fix tsc errors * Fix token row displaying wrong decimals * Fix deterministic modal token display * Handle hex and non hex strings automatically in BN conversion * Fix handling of strings and numbers for BN * add web3 fixes & comments * Display short balances on deterministic modals * add more tests, fix rounding * Add spacer to balance sidebar network name * Fix tsc error
2017-11-12 19:45:52 +00:00
const tokenBalances = { OMG: TokenValue('20') };
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
}
]
});
});
});