import { render } from '@testing-library/react-native' import React from 'react' import { Provider } from 'react-redux' import * as localCurrencyHooks from 'src/localCurrency/hooks' import { NetworkId } from 'src/transactions/types' import { Currency } from 'src/utils/currencies' import { MoneyAmount } from 'src/utils/moneyAmount' import { createMockStore } from 'test/utils' const useLocalCurrencyToShowSpy = jest.spyOn(localCurrencyHooks, 'useLocalCurrencyToShow') function TestComponent({ amount }: { amount: MoneyAmount }) { localCurrencyHooks.useLocalCurrencyToShow(amount) return null } function createStore(usdToLocalRate: string | null = '2') { return createMockStore({ tokens: { tokenBalances: { 'celo-alfajores:0xcUSD': { networkId: NetworkId['celo-alfajores'], tokenId: 'celo-alfajores:0xcUSD', address: '0xcUSD', symbol: 'cUSD', balance: '0', priceUsd: '1', priceFetchedAt: Date.now(), }, 'celo-alfajores:native': { networkId: NetworkId['celo-alfajores'], tokenId: 'celo-alfajores:native', address: '0xCELO', symbol: 'CELO', balance: '0', priceUsd: '5', priceFetchedAt: Date.now(), }, 'celo-alfajores:0xT1': { networkId: NetworkId['celo-alfajores'], tokenId: 'celo-alfajores:0xT1', address: '0xT1', symbol: 'T1', balance: '0', priceUsd: '5', priceFetchedAt: Date.now(), }, 'celo-alfajores:0xT2': { networkId: NetworkId['celo-alfajores'], tokenId: 'celo-alfajores:0xT2', address: '0xT2', symbol: 'T2', priceUsd: '5', balance: null, priceFetchedAt: Date.now(), }, }, }, localCurrency: { usdToLocalRate, }, }) } beforeEach(() => { jest.clearAllMocks() }) describe(localCurrencyHooks.useLocalCurrencyToShow, () => { it('returns the expected values when the currency is known', async () => { render( ) expect(useLocalCurrencyToShowSpy).toHaveReturnedTimes(1) expect(useLocalCurrencyToShowSpy).toHaveReturnedWith({ amountCurrency: 'cUSD', localCurrencyCode: 'PHP', localCurrencyExchangeRate: '2', }) }) // Special case for CELO because of the cGLD symbol/enum value used historically it('returns the expected values when the currency is CELO', async () => { render( ) expect(useLocalCurrencyToShowSpy).toHaveReturnedTimes(1) expect(useLocalCurrencyToShowSpy).toHaveReturnedWith({ amountCurrency: 'cGLD', localCurrencyCode: 'PHP', localCurrencyExchangeRate: '10', }) }) it('returns the expected values when the currency is unknown', async () => { render( ) expect(useLocalCurrencyToShowSpy).toHaveReturnedTimes(1) expect(useLocalCurrencyToShowSpy).toHaveReturnedWith({ amountCurrency: 'cSomething', localCurrencyCode: 'PHP', localCurrencyExchangeRate: null, }) }) it('returns the expected values when the token is known', async () => { render( ) expect(useLocalCurrencyToShowSpy).toHaveReturnedTimes(1) expect(useLocalCurrencyToShowSpy).toHaveReturnedWith({ amountCurrency: 'T1', localCurrencyCode: 'PHP', localCurrencyExchangeRate: '10', }) }) it('returns the expected values when the token is unknown', async () => { render( ) expect(useLocalCurrencyToShowSpy).toHaveReturnedTimes(1) expect(useLocalCurrencyToShowSpy).toHaveReturnedWith({ amountCurrency: 'SOMETHING', localCurrencyCode: 'PHP', localCurrencyExchangeRate: null, }) }) })