@@ -214,5 +214,97 @@ describe('BlockfrostAssetProvider', () => {
214214
215215 expect ( response . nftMetadata ! . version ) . toBe ( '2.0' ) ;
216216 } ) ;
217+
218+ describe ( 'onchain_metadata undefined values' , ( ) => {
219+ const mockedAssetIdOnChainMetadata = Cardano . AssetId (
220+ 'ecbe846aa1a535579d67f9480fa6173b64d7e239df0460eba36e3ad00014df1053617475726e'
221+ ) ;
222+
223+ const baseResponse = {
224+ asset : mockedAssetIdOnChainMetadata ,
225+ policy_id : 'ecbe846aa1a535579d67f9480fa6173b64d7e239df0460eba36e3ad0' ,
226+ asset_name : '0014df1053617475726e' ,
227+ fingerprint : 'asset1lnu3hw2pjw8xfprg7722mh0yu2vfzvk8ta60h0' ,
228+ quantity : '100000000000000' ,
229+ initial_mint_tx_hash : 'dcdd8ed32a71523a8393caab9d657964e50648fe0277de77add22b839e6fdb88' ,
230+ mint_or_burn_count : 1 ,
231+ onchain_metadata : {
232+ url : 'ipfs://Qmc2RWQxCmAaXn7YGZsXCcs2J5' ,
233+ logo : 'ipfs://Qmc2RWQxCmAaXn7YGZsXCcs2J5uwW8qQwYzmjh1gUiZBWA' ,
234+ name : 'Saturn' ,
235+ ticker : 'SATURN' ,
236+ decimals : 6 ,
237+ mediaType : '49696d6167652f706e67' ,
238+ description :
239+ 'Saturn is the governance token for the Saturn Swap protocol, a fast and simple decentralized exchange on the Cardano blockchain. https://saturnswap.io/'
240+ } ,
241+ onchain_metadata_standard : 'CIP68v1' ,
242+ onchain_metadata_extra : 'd8799fff' ,
243+ metadata : null
244+ } ;
245+
246+ test ( 'handles undefined onchain_metadata.decimals' , async ( ) => {
247+ const responseWithUndefinedDecimals = {
248+ ...baseResponse ,
249+ onchain_metadata : {
250+ ...baseResponse . onchain_metadata ,
251+ decimals : undefined
252+ }
253+ } ;
254+
255+ mockResponses ( request , [ [ `assets/${ mockedAssetIdOnChainMetadata } ` , responseWithUndefinedDecimals ] ] ) ;
256+
257+ const response = await provider . getAsset ( {
258+ assetId : mockedAssetIdOnChainMetadata ,
259+ extraData : { tokenMetadata : true }
260+ } ) ;
261+
262+ expect ( response . tokenMetadata ! . decimals ) . toBeUndefined ( ) ;
263+ expect ( response . tokenMetadata ! . ticker ) . toBe ( 'SATURN' ) ;
264+ expect ( response . tokenMetadata ! . url ) . toBe ( 'ipfs://Qmc2RWQxCmAaXn7YGZsXCcs2J5' ) ;
265+ } ) ;
266+
267+ test ( 'handles undefined onchain_metadata.ticker' , async ( ) => {
268+ const responseWithUndefinedTicker = {
269+ ...baseResponse ,
270+ onchain_metadata : {
271+ ...baseResponse . onchain_metadata ,
272+ ticker : undefined
273+ }
274+ } ;
275+
276+ mockResponses ( request , [ [ `assets/${ mockedAssetIdOnChainMetadata } ` , responseWithUndefinedTicker ] ] ) ;
277+
278+ const response = await provider . getAsset ( {
279+ assetId : mockedAssetIdOnChainMetadata ,
280+ extraData : { tokenMetadata : true }
281+ } ) ;
282+
283+ expect ( response . tokenMetadata ! . decimals ) . toBe ( 6 ) ;
284+ expect ( response . tokenMetadata ! . ticker ) . toBeUndefined ( ) ;
285+ expect ( response . tokenMetadata ! . url ) . toBe ( 'ipfs://Qmc2RWQxCmAaXn7YGZsXCcs2J5' ) ;
286+ } ) ;
287+
288+ test ( 'handles undefined onchain_metadata.url' , async ( ) => {
289+ const responseWithUndefinedUrl = {
290+ ...baseResponse ,
291+ onchain_metadata : {
292+ ...baseResponse . onchain_metadata ,
293+ url : undefined
294+ }
295+ } ;
296+
297+ mockResponses ( request , [ [ `assets/${ mockedAssetIdOnChainMetadata } ` , responseWithUndefinedUrl ] ] ) ;
298+
299+ const response = await provider . getAsset ( {
300+ assetId : mockedAssetIdOnChainMetadata ,
301+ extraData : { tokenMetadata : true }
302+ } ) ;
303+
304+ expect ( response . tokenMetadata ! . decimals ) . toBe ( 6 ) ;
305+ expect ( response . tokenMetadata ! . ticker ) . toBe ( 'SATURN' ) ;
306+ expect ( response . tokenMetadata ! . url ) . toBeUndefined ( ) ;
307+ } ) ;
308+ } ) ;
217309 } ) ;
218310} ) ;
0 commit comments