@yoroi/portfolio
Version:
The Portfolio package of Yoroi SDK
214 lines (200 loc) • 5.72 kB
text/typescript
import {Api, App, Portfolio} from '@yoroi/types'
import {cacheRecordMaker} from '@yoroi/common'
import {freeze} from 'immer'
import {primaryTokenId} from '../constants'
const primaryETH: Portfolio.Token.Info = {
decimals: 18,
ticker: 'ETH',
name: 'Ethereum',
symbol: 'Ξ',
status: Portfolio.Token.Status.Valid,
application: Portfolio.Token.Application.General,
tag: '',
reference: '0x1234567890abcdef.eth',
fingerprint: '0x1234567890abcdef',
website: 'https://ethereum.org',
originalImage: 'https://cdn.example.com/eth-original.png',
id: primaryTokenId,
nature: Portfolio.Token.Nature.Primary,
type: Portfolio.Token.Type.FT,
description: '',
}
const nftCryptoKitty: Portfolio.Token.Info = {
decimals: 0,
ticker: 'CryptoKitty',
name: 'CryptoKitty #1234',
symbol: 'CK',
status: Portfolio.Token.Status.Valid,
application: Portfolio.Token.Application.General,
tag: '',
reference: '0xabcdef1234567890.cryptokitty1234',
website: 'https://www.cryptokitties.co',
originalImage: 'https://cdn.example.com/ck-original1234.png',
id: '14696a4676909f4e3cb1f2e60e2e08e5abed70caf5c02699be971139.43554259',
fingerprint: 'asset1s7nlt45cc82upqewvjtgu7g97l7eg483c6wu75',
nature: Portfolio.Token.Nature.Secondary,
type: Portfolio.Token.Type.NFT,
description: '',
}
const rnftWhatever: Portfolio.Token.Info = {
decimals: 0,
ticker: 'Whatever',
name: 'Whatever #42',
symbol: 'WTH',
status: Portfolio.Token.Status.Valid,
application: Portfolio.Token.Application.Music,
tag: '222',
reference: 'transactionId#1',
website: 'https://www.whaha.co',
originalImage: 'https://cdn.whatha.com/ck-original1234.png',
id: '14696a4676909f4e3cb1f2e60e2e08e5abed70caf5c02699be971139.3031',
fingerprint: 'asset1s7nlt45cc82upqewvjtgu7g97l7eg483c6wu75',
nature: Portfolio.Token.Nature.Secondary,
type: Portfolio.Token.Type.NFT,
description: '',
}
const ftNoTicker: Portfolio.Token.Info = {
decimals: 0,
ticker: '',
name: 'ZZZZZ',
symbol: 'WTH',
status: Portfolio.Token.Status.Valid,
application: Portfolio.Token.Application.Music,
tag: '222',
reference: 'transactionId#1',
website: 'https://www.whaha.co',
originalImage: 'https://cdn.whatha.com/ck-original1234.png',
id: '14696a4676909f4e3cb1f2e60e2e08e5abed70caf5c02699be971139.3032',
fingerprint: 'asset1s7nlt45cc82upqewvjtgu7g97l7eg483c6wu75',
nature: Portfolio.Token.Nature.Secondary,
type: Portfolio.Token.Type.FT,
description: '',
}
const ftNameless: Portfolio.Token.Info = {
decimals: 0,
ticker: 'zz',
name: '',
symbol: 'WTH',
status: Portfolio.Token.Status.Valid,
application: Portfolio.Token.Application.Music,
tag: '222',
reference: 'transactionId#1',
website: 'https://www.whaha.co',
originalImage: 'https://cdn.whatha.com/ck-original1234.png',
id: '14696a4676909f4e3cb1f2e60e2e08e5abed70caf5c02699be971139.3033',
fingerprint: 'asset1s7nlt45cc82upqewvjtgu7g97l7eg483c6wu75',
nature: Portfolio.Token.Nature.Secondary,
type: Portfolio.Token.Type.FT,
description: '',
}
// NOTE: If you marked a record as not modified 304, remember to add to the intiial state
// otherwise the tests will throw cuz it will be expected the record to exist in the cache
const apiResponseTokenInfos: Portfolio.Api.TokenInfosResponse = {
[nftCryptoKitty.id]: [Api.HttpStatusCode.Ok, nftCryptoKitty, 'hash2-1', 3600],
[rnftWhatever.id]: [Api.HttpStatusCode.NotModified, 3600],
[ftNoTicker.id]: [Api.HttpStatusCode.Ok, ftNoTicker, 'hash4-1', 3600],
[ftNameless.id]: [Api.HttpStatusCode.Ok, ftNameless, 'hash5', 3600],
}
const apiRequestTokenInfos: ReadonlyArray<
Api.RequestWithCache<Portfolio.Token.Id>
> = [
[nftCryptoKitty.id, 'hash2'],
[rnftWhatever.id, 'hash3'],
[ftNoTicker.id, 'hash4'],
[ftNameless.id, 'hash5'],
]
const storage: {
entries1: ReadonlyArray<
[Portfolio.Token.Id, App.CacheRecord<Portfolio.Token.Info>]
>
notModified: ReadonlyArray<
[Portfolio.Token.Id, App.CacheRecord<Portfolio.Token.Info>]
>
cached: ReadonlyArray<
[Portfolio.Token.Id, App.CacheRecord<Portfolio.Token.Info>]
>
} = {
notModified: [
[
rnftWhatever.id,
cacheRecordMaker(
{expires: Date.now() - 3_600_000, hash: 'hash3'},
rnftWhatever,
),
],
],
cached: [
[
rnftWhatever.id,
cacheRecordMaker(
{expires: Date.now() + 3_600_000, hash: 'hash3'},
rnftWhatever,
),
],
],
entries1: [
[
nftCryptoKitty.id,
cacheRecordMaker(
{expires: Date.now() - 3_600_000, hash: 'hash2'},
nftCryptoKitty,
),
],
[
rnftWhatever.id,
cacheRecordMaker(
{expires: Date.now() + 3_600_000, hash: 'hash3'},
rnftWhatever,
),
],
[
ftNoTicker.id,
cacheRecordMaker(
{expires: Date.now() - 3_600_000, hash: 'hash4'},
ftNoTicker,
),
],
[
ftNameless.id,
cacheRecordMaker(
{expires: Date.now() + 3_600_000, hash: 'hash5'},
ftNameless,
),
],
],
}
const apiResponseTokenInfo: Readonly<
Record<'success' | 'error', Api.Response<Portfolio.Token.Info>>
> = freeze(
{
success: {
tag: 'right',
value: {
status: 200,
data: nftCryptoKitty,
},
},
error: {
tag: 'left',
error: {
status: 404,
responseData: null,
message: 'Not found',
},
},
},
true,
)
export const tokenInfoMocks = freeze({
primaryETH,
nftCryptoKitty,
rnftWhatever,
ftNoTicker,
ftNameless,
storage,
apiResponseResult: apiResponseTokenInfos,
apiRequestArgs: apiRequestTokenInfos,
apiReponse: {
nftCryptoKitty: apiResponseTokenInfo,
},
})