import { test } from 'node:test'; import assert from 'node:assert/strict'; import { formatUnits } from 'ethers'; import { readTokenMetadata } from '../src/token-metadata.js'; const address='0x2222222222222222222222222222222222222222'; test('missing token metadata preserves a readable raw balance instead of failing the workspace',async()=>{ const fail=async()=>{throw Error('metadata reverted');}; const result=await readTokenMetadata({symbol:fail,decimals:fail},address); assert.equal(result.rawUnits,true); assert.equal(result.symbol,'base units'); assert.equal(formatUnits(1250000n,result.decimals),'1250000'); }); test('missing symbol keeps known decimals and identifies the token by address',async()=>{ const result=await readTokenMetadata({symbol:async()=>{throw Error();},decimals:async()=>6n},address); assert.equal(formatUnits(1250000n,result.decimals),'1.25'); assert.equal(result.symbol,'0x2222…2222'); assert.equal(result.rawUnits,false); }); test('unsupported decimal precision falls back to explicitly labeled base units',async()=>{ for(const precision of [81n,255n,-1,NaN,1.5]){ const result=await readTokenMetadata({symbol:async()=>'TOKEN',decimals:async()=>precision},address); assert.equal(result.rawUnits,true); assert.equal(formatUnits(123n,result.decimals),'123'); } });