WA-238 Adding tests of confirmations and transactions selectors
This commit is contained in:
parent
8abc514413
commit
44ed495226
|
@ -23,9 +23,9 @@ type TransactionProps = {
|
||||||
transaction: Transaction,
|
transaction: Transaction,
|
||||||
}
|
}
|
||||||
|
|
||||||
const safeAddressSelector = (state: GlobalState, props: SafeProps) => props.safeAddress
|
const safePropAddressSelector = (state: GlobalState, props: SafeProps) => props.safeAddress
|
||||||
|
|
||||||
const safeAddessSelector = (state: GlobalState, props: RouterProps) => props.match.params[SAFE_PARAM_ADDRESS] || ''
|
const safeParamAddressSelector = (state: GlobalState, props: RouterProps) => props.match.params[SAFE_PARAM_ADDRESS] || ''
|
||||||
|
|
||||||
const balancesSelector = (state: GlobalState) => state[BALANCE_REDUCER_ID]
|
const balancesSelector = (state: GlobalState) => state[BALANCE_REDUCER_ID]
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ const oneTransactionSelector = (state: GlobalState, props: TransactionProps) =>
|
||||||
|
|
||||||
export const safeTransactionsSelector: Selector<GlobalState, SafeProps, List<Transaction>> = createSelector(
|
export const safeTransactionsSelector: Selector<GlobalState, SafeProps, List<Transaction>> = createSelector(
|
||||||
transactionsSelector,
|
transactionsSelector,
|
||||||
safeAddressSelector,
|
safePropAddressSelector,
|
||||||
(transactions: TransactionsState, address: string): List<Transaction> => {
|
(transactions: TransactionsState, address: string): List<Transaction> => {
|
||||||
if (!transactions) {
|
if (!transactions) {
|
||||||
return List([])
|
return List([])
|
||||||
|
@ -49,7 +49,7 @@ export const safeTransactionsSelector: Selector<GlobalState, SafeProps, List<Tra
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
export const confirmationsTransactionSelector = createSelector(
|
export const confirmationsTransactionSelector: Selector<GlobalState, TransactionProps, number> = createSelector(
|
||||||
oneTransactionSelector,
|
oneTransactionSelector,
|
||||||
(tx: Transaction) => {
|
(tx: Transaction) => {
|
||||||
if (!tx) {
|
if (!tx) {
|
||||||
|
@ -69,7 +69,7 @@ export type SafeSelectorProps = Safe | typeof undefined
|
||||||
|
|
||||||
export const safeSelector: Selector<GlobalState, RouterProps, SafeSelectorProps> = createSelector(
|
export const safeSelector: Selector<GlobalState, RouterProps, SafeSelectorProps> = createSelector(
|
||||||
safesMapSelector,
|
safesMapSelector,
|
||||||
safeAddessSelector,
|
safeParamAddressSelector,
|
||||||
(safes: Map<string, Safe>, address: string) => {
|
(safes: Map<string, Safe>, address: string) => {
|
||||||
if (!address) {
|
if (!address) {
|
||||||
return undefined
|
return undefined
|
||||||
|
@ -81,7 +81,7 @@ export const safeSelector: Selector<GlobalState, RouterProps, SafeSelectorProps>
|
||||||
|
|
||||||
export const balanceSelector: Selector<GlobalState, RouterProps, string> = createSelector(
|
export const balanceSelector: Selector<GlobalState, RouterProps, string> = createSelector(
|
||||||
balancesSelector,
|
balancesSelector,
|
||||||
safeAddessSelector,
|
safeParamAddressSelector,
|
||||||
(balances: Map<string, string>, address: string) => {
|
(balances: Map<string, string>, address: string) => {
|
||||||
if (!address) {
|
if (!address) {
|
||||||
return '0'
|
return '0'
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
// @flow
|
||||||
|
import { List, Map } from 'immutable'
|
||||||
|
import { makeTransaction, type Transaction } from '~/routes/safe/store/model/transaction'
|
||||||
|
import { type Confirmation, makeConfirmation } from '~/routes/safe/store/model/confirmation'
|
||||||
|
import { makeOwner } from '~/routes/safe/store/model/owner'
|
||||||
|
import { confirmationsTransactionSelector } from '~/routes/safe/store/selectors/index'
|
||||||
|
import { makeProvider } from '~/wallets/store/model/provider'
|
||||||
|
|
||||||
|
const grantedSelectorTests = () => {
|
||||||
|
describe('Safe Selector[confirmationsTransactionSelector]', () => {
|
||||||
|
it('returns 1 confirmation if safe has only one owner when tx is created', () => {
|
||||||
|
// GIVEN
|
||||||
|
const firstConfirmation: Confirmation = makeConfirmation({
|
||||||
|
owner: makeOwner(),
|
||||||
|
status: true,
|
||||||
|
hash: 'asdf',
|
||||||
|
})
|
||||||
|
|
||||||
|
const transaction: Transaction = makeTransaction({
|
||||||
|
name: 'Buy batteries',
|
||||||
|
nonce: 1,
|
||||||
|
value: 2,
|
||||||
|
confirmations: List([firstConfirmation]),
|
||||||
|
destination: 'destAddress',
|
||||||
|
threshold: 2,
|
||||||
|
tx: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const reduxStore = {
|
||||||
|
safes: Map(),
|
||||||
|
providers: makeProvider(),
|
||||||
|
balances: Map(),
|
||||||
|
transactions: Map(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
const threshold = confirmationsTransactionSelector(reduxStore, { transaction })
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(threshold).toBe(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('returns 1 confirmation if safe has two or more owners when multisig tx is created', () => {
|
||||||
|
// GIVEN
|
||||||
|
const firstConfirmation: Confirmation = makeConfirmation({
|
||||||
|
owner: makeOwner(),
|
||||||
|
status: true,
|
||||||
|
hash: 'asdf',
|
||||||
|
})
|
||||||
|
|
||||||
|
const secondConfirmation: Confirmation = makeConfirmation({
|
||||||
|
owner: makeOwner(),
|
||||||
|
status: false,
|
||||||
|
hash: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const transaction: Transaction = makeTransaction({
|
||||||
|
name: 'Buy batteries',
|
||||||
|
nonce: 1,
|
||||||
|
value: 2,
|
||||||
|
confirmations: List([firstConfirmation, secondConfirmation]),
|
||||||
|
destination: 'destAddress',
|
||||||
|
threshold: 2,
|
||||||
|
tx: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const reduxStore = {
|
||||||
|
safes: Map(),
|
||||||
|
providers: makeProvider(),
|
||||||
|
balances: Map(),
|
||||||
|
transactions: Map(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
const threshold = confirmationsTransactionSelector(reduxStore, { transaction })
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(threshold).toBe(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return 0 confirmations if not transaction is sent as prop to component', () => {
|
||||||
|
const reduxStore = {
|
||||||
|
safes: Map(),
|
||||||
|
providers: makeProvider(),
|
||||||
|
balances: Map(),
|
||||||
|
transactions: Map(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
// $FlowFixMe
|
||||||
|
const threshold = confirmationsTransactionSelector(reduxStore, { transaction: undefined })
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(threshold).toBe(0)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default grantedSelectorTests
|
|
@ -5,6 +5,8 @@ import dailyLimitReducerTests from './dailyLimit.reducer'
|
||||||
import balanceSelectorTests from './balance.selector'
|
import balanceSelectorTests from './balance.selector'
|
||||||
import safeSelectorTests from './safe.selector'
|
import safeSelectorTests from './safe.selector'
|
||||||
import grantedSelectorTests from './granted.selector'
|
import grantedSelectorTests from './granted.selector'
|
||||||
|
import confirmationsSelectorTests from './confirmations.selector'
|
||||||
|
import transactionsSelectorTests from './transactions.selector'
|
||||||
|
|
||||||
describe('Safe Test suite', () => {
|
describe('Safe Test suite', () => {
|
||||||
// ACTIONS AND REDUCERS
|
// ACTIONS AND REDUCERS
|
||||||
|
@ -20,4 +22,10 @@ describe('Safe Test suite', () => {
|
||||||
|
|
||||||
// GRANTED SELECTOR
|
// GRANTED SELECTOR
|
||||||
grantedSelectorTests()
|
grantedSelectorTests()
|
||||||
|
|
||||||
|
// CONFIRMATIONS SELECTOR
|
||||||
|
confirmationsSelectorTests()
|
||||||
|
|
||||||
|
// TRANSACTIONS SELECTOR
|
||||||
|
transactionsSelectorTests()
|
||||||
})
|
})
|
||||||
|
|
|
@ -0,0 +1,129 @@
|
||||||
|
// @flow
|
||||||
|
import { List, Map } from 'immutable'
|
||||||
|
import { SAFE_REDUCER_ID } from '~/routes/safe/store/reducer/safe'
|
||||||
|
import { safeTransactionsSelector } from '~/routes/safe/store/selectors/index'
|
||||||
|
import { makeProvider } from '~/wallets/store/model/provider'
|
||||||
|
import { makeConfirmation, type Confirmation } from '~/routes/safe/store/model/confirmation'
|
||||||
|
import { makeOwner } from '~/routes/safe/store/model/owner'
|
||||||
|
import { makeTransaction, type Transaction } from '~/routes/safe/store/model/transaction'
|
||||||
|
|
||||||
|
const grantedSelectorTests = () => {
|
||||||
|
describe('Safe Selector[safeTransactionsSelector]', () => {
|
||||||
|
it('should return empty list if no transactions in store', () => {
|
||||||
|
// GIVEN
|
||||||
|
const reduxStore = {
|
||||||
|
[SAFE_REDUCER_ID]: Map(),
|
||||||
|
providers: makeProvider(),
|
||||||
|
balances: undefined,
|
||||||
|
transactions: Map(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
const transactions = safeTransactionsSelector(reduxStore, { safeAddress: 'fooAddress' })
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(transactions).toEqual(List([]))
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return empty list if transactions in store but not safe address in props', () => {
|
||||||
|
// GIVEN
|
||||||
|
const firstConfirmation: Confirmation = makeConfirmation({
|
||||||
|
owner: makeOwner(),
|
||||||
|
status: true,
|
||||||
|
hash: 'asdf',
|
||||||
|
})
|
||||||
|
|
||||||
|
const transaction: Transaction = makeTransaction({
|
||||||
|
name: 'Buy batteries',
|
||||||
|
nonce: 1,
|
||||||
|
value: 2,
|
||||||
|
confirmations: List([firstConfirmation]),
|
||||||
|
destination: 'destAddress',
|
||||||
|
threshold: 2,
|
||||||
|
tx: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const reduxStore = {
|
||||||
|
[SAFE_REDUCER_ID]: Map(),
|
||||||
|
providers: makeProvider(),
|
||||||
|
balances: undefined,
|
||||||
|
transactions: Map({ fooAddress: List([transaction]) }),
|
||||||
|
}
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
const transactionsEmpty = safeTransactionsSelector(reduxStore, { safeAddress: '' })
|
||||||
|
// $FlowFixMe
|
||||||
|
const transactionsUndefined = safeTransactionsSelector(reduxStore, { safeAddress: undefined })
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(transactionsEmpty).toEqual(List([]))
|
||||||
|
expect(transactionsUndefined).toEqual(List([]))
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return empty list if there are transactions belonging to different address', () => {
|
||||||
|
// GIVEN
|
||||||
|
const firstConfirmation: Confirmation = makeConfirmation({
|
||||||
|
owner: makeOwner(),
|
||||||
|
status: true,
|
||||||
|
hash: 'asdf',
|
||||||
|
})
|
||||||
|
|
||||||
|
const transaction: Transaction = makeTransaction({
|
||||||
|
name: 'Buy batteries',
|
||||||
|
nonce: 1,
|
||||||
|
value: 2,
|
||||||
|
confirmations: List([firstConfirmation]),
|
||||||
|
destination: 'destAddress',
|
||||||
|
threshold: 2,
|
||||||
|
tx: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const reduxStore = {
|
||||||
|
[SAFE_REDUCER_ID]: Map(),
|
||||||
|
providers: makeProvider(),
|
||||||
|
balances: undefined,
|
||||||
|
transactions: Map({ fooAddress: List([transaction]) }),
|
||||||
|
}
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
const transactions = safeTransactionsSelector(reduxStore, { safeAddress: 'invented' })
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(transactions).toEqual(List([]))
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return transactions of safe', () => {
|
||||||
|
// GIVEN
|
||||||
|
const firstConfirmation: Confirmation = makeConfirmation({
|
||||||
|
owner: makeOwner(),
|
||||||
|
status: true,
|
||||||
|
hash: 'asdf',
|
||||||
|
})
|
||||||
|
|
||||||
|
const transaction: Transaction = makeTransaction({
|
||||||
|
name: 'Buy batteries',
|
||||||
|
nonce: 1,
|
||||||
|
value: 2,
|
||||||
|
confirmations: List([firstConfirmation]),
|
||||||
|
destination: 'destAddress',
|
||||||
|
threshold: 2,
|
||||||
|
tx: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const reduxStore = {
|
||||||
|
[SAFE_REDUCER_ID]: Map(),
|
||||||
|
providers: makeProvider(),
|
||||||
|
balances: undefined,
|
||||||
|
transactions: Map({ fooAddress: List([transaction]) }),
|
||||||
|
}
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
const transactions = safeTransactionsSelector(reduxStore, { safeAddress: 'fooAddress' })
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(transactions).toEqual(List([transaction]))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default grantedSelectorTests
|
Loading…
Reference in New Issue