1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-30 16:18:07 +01:00
metamask-extension/ui/app/hooks/tests/useUserPreferencedCurrency.test.js

144 lines
3.3 KiB
JavaScript

import assert from 'assert'
import { renderHook } from '@testing-library/react-hooks'
import { useUserPreferencedCurrency } from '../useUserPreferencedCurrency'
import * as reactRedux from 'react-redux'
import { getPreferences, getShouldShowFiat } from '../../selectors'
import sinon from 'sinon'
const tests = [
{
state: {
useNativeCurrencyAsPrimaryCurrency: true,
nativeCurrency: 'ETH',
showFiat: true,
},
params: {
type: 'PRIMARY',
},
result: {
currency: 'ETH',
numberOfDecimals: 6,
},
},
{
state: {
useNativeCurrencyAsPrimaryCurrency: false,
nativeCurrency: 'ETH',
showFiat: true,
},
params: {
type: 'PRIMARY',
},
result: {
currency: undefined,
numberOfDecimals: 2,
},
},
{
state: {
useNativeCurrencyAsPrimaryCurrency: true,
nativeCurrency: 'ETH',
showFiat: true,
},
params: {
type: 'SECONDARY',
fiatNumberOfDecimals: 4,
fiatPrefix: '-',
},
result: {
currency: undefined,
numberOfDecimals: 4,
},
},
{
state: {
useNativeCurrencyAsPrimaryCurrency: false,
nativeCurrency: 'ETH',
showFiat: true,
},
params: {
type: 'SECONDARY',
fiatNumberOfDecimals: 4,
numberOfDecimals: 3,
fiatPrefix: 'a',
},
result: {
currency: 'ETH',
numberOfDecimals: 3,
},
},
{
state: {
useNativeCurrencyAsPrimaryCurrency: false,
nativeCurrency: 'ETH',
showFiat: false,
},
params: {
type: 'PRIMARY',
},
result: {
currency: 'ETH',
numberOfDecimals: 6,
},
},
{
state: {
useNativeCurrencyAsPrimaryCurrency: false,
nativeCurrency: 'ETH',
showFiat: true,
},
params: {
type: 'PRIMARY',
},
result: {
currency: undefined,
numberOfDecimals: 2,
},
},
{
state: {
useNativeCurrencyAsPrimaryCurrency: false,
nativeCurrency: 'ETH',
showFiat: true,
},
params: {
type: 'PRIMARY',
},
result: {
currency: undefined,
numberOfDecimals: 2,
},
},
]
function getFakeUseSelector (state) {
return (selector) => {
if (selector === getPreferences) {
return state
} else if (selector === getShouldShowFiat) {
return state.showFiat
} else {
return state.nativeCurrency
}
}
}
describe('useUserPreferencedCurrency', function () {
tests.forEach(({ params: { type, ...otherParams }, state, result }) => {
describe(`when showFiat is ${state.showFiat}, useNativeCurrencyAsPrimary is ${state.useNativeCurrencyAsPrimaryCurrency} and type is ${type}`, function () {
const stub = sinon.stub(reactRedux, 'useSelector')
stub.callsFake(getFakeUseSelector(state))
const { result: hookResult } = renderHook(() => useUserPreferencedCurrency(type, otherParams))
stub.restore()
it(`should return currency as ${result.currency || 'not modified by user preferences'}`, function () {
assert.equal(hookResult.current.currency, result.currency)
})
it(`should return decimals as ${result.numberOfDecimals || 'not modified by user preferences'}`, function () {
assert.equal(hookResult.current.numberOfDecimals, result.numberOfDecimals)
})
})
})
})