WA-230 Adding fetchBalance action. Included tests

This commit is contained in:
apanizo 2018-04-17 10:05:08 +02:00
parent 68c9c86287
commit 2fa204a693
5 changed files with 61 additions and 3 deletions

View File

@ -5,7 +5,7 @@ import { type GlobalState } from '~/store/index'
import addBalance from './addBalance' import addBalance from './addBalance'
export default (safeAddress: string) => async (dispatch: ReduxDispatch<GlobalState>) => { export default (safeAddress: string) => async (dispatch: ReduxDispatch<GlobalState>) => {
const balance: string = await getBalanceInEtherOf(safeAddress) const balance = await getBalanceInEtherOf(safeAddress)
dispatch(addBalance(safeAddress, balance)) return dispatch(addBalance(safeAddress, balance))
} }

View File

@ -0,0 +1,54 @@
// @flow
import { BALANCE_REDUCER_ID } from '~/routes/safe/store/reducer/balances'
import fetchBalance from '~/routes/safe/store/actions/fetchBalance'
import { aNewStore } from '~/store'
import { getWeb3 } from '~/wallets/getWeb3'
import { promisify } from '~/utils/promisify'
import { aDeployedSafe } from './builder/deployedSafe.builder'
const addOneEtherTo = async (address: string) => {
const web3 = getWeb3()
const accounts = await promisify(cb => web3.eth.getAccounts(cb))
const txData = { from: accounts[0], to: address, value: web3.toWei('1', 'ether') }
return promisify(cb => web3.eth.sendTransaction(txData, cb))
}
const balanceReducerTests = () => {
describe('Safe Actions[fetchBalance]', () => {
let store
beforeEach(async () => {
store = aNewStore()
})
it('reducer should return 0 to just deployed safe', async () => {
// GIVEN
const safeTx = await aDeployedSafe(store)
const address = safeTx.contractAddress
// WHEN
await store.dispatch(fetchBalance(address))
// THEN
const balances = store.getState()[BALANCE_REDUCER_ID]
expect(balances).not.toBe(undefined)
expect(balances.get(address)).toBe('0')
})
it('reducer should return 1 ETH as funds to safe with 1 ETH', async () => {
// GIVEN
const safeTx = await aDeployedSafe(store)
const address = safeTx.contractAddress
// WHEN
await addOneEtherTo(address)
await store.dispatch(fetchBalance(address))
// THEN
const balances = store.getState()[BALANCE_REDUCER_ID]
expect(balances).not.toBe(undefined)
expect(balances.get(address)).toBe('1')
})
})
}
export default balanceReducerTests

View File

@ -1,10 +1,12 @@
// @flow // @flow
import balanceReducerTests from './balance.reducer'
import safeReducerTests from './safe.reducer' import safeReducerTests from './safe.reducer'
import safeSelectorTests from './safe.selector' import safeSelectorTests from './safe.selector'
describe('Safe Test suite', () => { describe('Safe Test suite', () => {
// ACTIONS AND REDUCERS // ACTIONS AND REDUCERS
safeReducerTests() safeReducerTests()
balanceReducerTests()
// SAFE SELECTOR // SAFE SELECTOR
safeSelectorTests() safeSelectorTests()

View File

@ -32,3 +32,5 @@ const reducers: Reducer<GlobalState> = combineReducers({
const initialState = { [SAFE_REDUCER_ID]: calculateInitialState() } const initialState = { [SAFE_REDUCER_ID]: calculateInitialState() }
export const store: Store<GlobalState> = createStore(reducers, initialState, finalCreateStore) export const store: Store<GlobalState> = createStore(reducers, initialState, finalCreateStore)
export const aNewStore = (): Store<GlobalState> => createStore(reducers, initialState, finalCreateStore)

View File

@ -43,7 +43,7 @@ export const getProviderInfo: Function = async (): Promise<ProviderProps> => {
} }
} }
export const getBalanceInEtherOf = async (safeAddress: string): Promise<string> => { export const getBalanceInEtherOf = async (safeAddress: string) => {
const funds: BigNumber = await promisify(cb => web3.eth.getBalance(safeAddress, cb)) const funds: BigNumber = await promisify(cb => web3.eth.getBalance(safeAddress, cb))
if (!funds) { if (!funds) {
return '0' return '0'