@@ -30,13 +30,16 @@ vi.mock('@/services/chain-adapter/providers', async () => {
3030 } ;
3131} ) ;
3232
33- import { submitWeb3Transfer } from './use-send.web3' ;
33+ import { fetchWeb3Fee , submitWeb3Transfer } from './use-send.web3' ;
3434
3535type MockChainProvider = {
3636 supportsFullTransaction : boolean ;
37+ supportsBuildTransaction ?: boolean ;
38+ supportsFeeEstimate ?: boolean ;
3739 buildTransaction : ( intent : unknown ) => Promise < unknown > ;
3840 signTransaction : ( unsignedTx : unknown , options : { privateKey : Uint8Array } ) => Promise < unknown > ;
3941 broadcastTransaction : ( signedTx : unknown ) => Promise < string > ;
42+ estimateFee ?: ( unsignedTx : unknown ) => Promise < { standard : { amount : Amount } } > ;
4043} ;
4144
4245function createChainConfig ( ) : ChainConfig {
@@ -151,4 +154,60 @@ describe('submitWeb3Transfer', () => {
151154
152155 expect ( result ) . toEqual ( { status : 'ok' , txHash : 'tx-hash' } ) ;
153156 } ) ;
157+
158+ it ( 'passes tokenAddress to buildTransaction' , async ( ) => {
159+ const provider = createMockProvider ( ) ;
160+ mockGetChainProvider . mockReturnValue ( provider ) ;
161+
162+ await submitWeb3Transfer ( {
163+ chainConfig : createChainConfig ( ) ,
164+ walletId : 'wallet-1' ,
165+ password : 'pwd' ,
166+ fromAddress : 'TFromAddress' ,
167+ toAddress : 'TToAddress' ,
168+ amount : Amount . fromRaw ( '1000000' , 6 , 'USDT' ) ,
169+ tokenAddress : 'TTokenContract' ,
170+ } ) ;
171+
172+ expect ( provider . buildTransaction ) . toHaveBeenCalledWith (
173+ expect . objectContaining ( {
174+ tokenAddress : 'TTokenContract' ,
175+ } ) ,
176+ ) ;
177+ } ) ;
178+ } ) ;
179+
180+ describe ( 'fetchWeb3Fee' , ( ) => {
181+ beforeEach ( ( ) => {
182+ vi . clearAllMocks ( ) ;
183+ } ) ;
184+
185+ it ( 'passes tokenAddress to buildTransaction' , async ( ) => {
186+ const provider : MockChainProvider = createMockProvider ( {
187+ supportsFullTransaction : true ,
188+ supportsFeeEstimate : true ,
189+ supportsBuildTransaction : true ,
190+ buildTransaction : vi . fn ( async ( ) => ( { data : { txID : 'mock-tx' } } ) ) ,
191+ estimateFee : vi . fn ( async ( ) => ( {
192+ standard : { amount : Amount . fromRaw ( '1000' , 6 , 'TRX' ) } ,
193+ } ) ) ,
194+ } ) ;
195+
196+ mockGetChainProvider . mockReturnValue ( provider ) ;
197+
198+ const result = await fetchWeb3Fee ( {
199+ chainConfig : createChainConfig ( ) ,
200+ fromAddress : 'TFromAddress' ,
201+ toAddress : 'TToAddress' ,
202+ amount : Amount . fromRaw ( '1000000' , 6 , 'USDT' ) ,
203+ tokenAddress : 'TTokenContract' ,
204+ } ) ;
205+
206+ expect ( provider . buildTransaction ) . toHaveBeenCalledWith (
207+ expect . objectContaining ( {
208+ tokenAddress : 'TTokenContract' ,
209+ } ) ,
210+ ) ;
211+ expect ( result . amount . toRawString ( ) ) . toBe ( '1000' ) ;
212+ } ) ;
154213} ) ;
0 commit comments