import {routingModuleUrl} from './helpers/routing.mjs'; import {test} from 'node:test'; import assert from 'node:assert/strict'; import {readFile} from 'node:fs/promises'; import ts from 'typescript'; async function moduleUrl(file,replace=code=>code){ const filename=new URL(file,import.meta.url); const {outputText}=ts.transpileModule(await readFile(filename,'utf8'),{compilerOptions:{target:ts.ScriptTarget.ES2022,module:ts.ModuleKind.ESNext}}); return 'data:text/javascript;base64,'+Buffer.from(replace(outputText).replace(/(['"])\.\.\/routing\1/g,JSON.stringify(routingModuleUrl))+'\n//# sourceURL='+filename.pathname).toString('base64'); } const protocolUrl=await moduleUrl('../src/lib/api/protocol.ts'); const renderUrl=await moduleUrl('../src/lib/client/render.ts',code=>code.replace('"../api/protocol"',JSON.stringify(protocolUrl))); const authUrl=await moduleUrl('../src/lib/client/auth.ts'); const trackingUrl=await moduleUrl('../src/lib/tracking.ts'); const accountUrl=await moduleUrl('../src/lib/client/account.ts',code=>code.replace('"../api/protocol"',JSON.stringify(protocolUrl)).replace('"./render"',JSON.stringify(renderUrl)).replace("'./auth'",JSON.stringify(authUrl)).replace("'../tracking'",JSON.stringify(trackingUrl))); const {paymentDialogMarkup,renderWallet}=await import(accountUrl); const coinPackage={id:31,name:'金币套餐',packageType:2,price:10000,baseCoin:100,giftCoin:999,totalCoin:1099,payMethods:[{type:'alipay',typeName:'支付宝'},{type:'wechat',typeName:'微信'}]}; const flush=()=>new Promise(resolve=>setImmediate(resolve)); test('confirmation displays actual base/gift/total coins and the price in yuan with original payment icons',()=>{ const html=paymentDialogMarkup(coinPackage,false); assert.ok(html.includes('100 金币'));assert.ok(html.includes('赠送 999 金币 · 合计 1099 金币')); assert.ok(html.includes('¥100'));assert.ok(html.includes('5652fcead17188e8.svg'));assert.ok(html.includes('2bead9ea5c435c98.svg')); assert.ok(!html.includes('7848816d05aa8591.svg'));assert.ok(!html.includes('type="radio"')); assert.ok(html.includes('name="payMode" value="alipay"'));assert.ok(html.includes('class="wallet-payment-title"')); const derived=paymentDialogMarkup({...coinPackage,baseCoin:undefined,price:12345},false); assert.ok(derived.includes('100 金币'));assert.ok(derived.includes('¥123.45')); }); test('VIP and missing payment data never introduce demo bonuses or unconfigured channels',()=>{ const vip=paymentDialogMarkup({id:7,name:'月卡