@@ -13,10 +13,14 @@ describe('non-TSS Staking Wallet', function () {
1313 let bitgo ;
1414 let ethBaseCoin ;
1515 let maticBaseCoin ;
16+ let btcBaseCoin ;
1617 let enterprise ;
1718 let ethWalletData : any ;
19+ let btcWalletData : any ;
20+ let btcDescriptorWalletData : any ;
1821 let ethStakingWallet : StakingWallet ;
1922 let maticStakingWallet : StakingWallet ;
23+ let btcStakingWallet : StakingWallet ;
2024
2125 before ( function ( ) {
2226 bitgo = TestBitGo . decorate ( BitGo , { env : 'mock' , microservicesUri } as any ) ;
@@ -25,6 +29,8 @@ describe('non-TSS Staking Wallet', function () {
2529 ethBaseCoin . keychains ( ) ;
2630 maticBaseCoin = bitgo . coin ( 'matic' ) ;
2731 maticBaseCoin . keychains ( ) ;
32+ btcBaseCoin = bitgo . coin ( 'btc' ) ;
33+ btcBaseCoin . keychains ( ) ;
2834
2935 enterprise = new Enterprise ( bitgo , ethBaseCoin , {
3036 id : '5cf940949449412d00f53b3d92dbcaa3' ,
@@ -43,10 +49,26 @@ describe('non-TSS Staking Wallet', function () {
4349 enterprise : enterprise . id ,
4450 keys : [ '5b3424f91bf349930e340175' ] ,
4551 } ;
52+ btcWalletData = {
53+ id : 'btcWalletId' ,
54+ coin : 'btc' ,
55+ enterprise : enterprise . id ,
56+ keys : [ '5b3424f91bf349930e340175' ] ,
57+ coinSpecific : { } ,
58+ } ;
59+ btcDescriptorWalletData = {
60+ id : 'btcDescriptorWalletId' ,
61+ coin : 'btc' ,
62+ enterprise : enterprise . id ,
63+ keys : [ '5b3424f91bf349930e340175' ] ,
64+ coinSpecific : { } ,
65+ } ;
4666 const ethWallet = new Wallet ( bitgo , ethBaseCoin , ethWalletData ) ;
4767 const maticWallet = new Wallet ( bitgo , maticBaseCoin , maticWalletData ) ;
68+ const btcWallet = new Wallet ( bitgo , btcBaseCoin , btcWalletData ) ;
4869 ethStakingWallet = ethWallet . toStakingWallet ( ) ;
4970 maticStakingWallet = maticWallet . toStakingWallet ( ) ;
71+ btcStakingWallet = btcWallet . toStakingWallet ( ) ;
5072 } ) ;
5173
5274 const sandbox = sinon . createSandbox ( ) ;
@@ -207,4 +229,41 @@ describe('non-TSS Staking Wallet', function () {
207229 stakingTransaction . should . deepEqual ( transaction ) ;
208230 } ) ;
209231 } ) ;
232+
233+ describe ( 'BTC staking' , function ( ) {
234+ it ( 'btc delegation transaction' , async function ( ) {
235+ const transaction = fixtures . transaction ( 'READY' , fixtures . buildParams , false ) ;
236+
237+ nock ( microservicesUri )
238+ . get (
239+ `/api/staking/v1/${ btcStakingWallet . coin } /wallets/${ btcStakingWallet . walletId } /requests/${ transaction . stakingRequestId } /transactions/${ transaction . id } `
240+ )
241+ . query ( { expandBuildParams : true } )
242+ . reply ( 200 , transaction ) ;
243+
244+ const prebuildTransaction = sandbox . stub ( Wallet . prototype , 'prebuildTransaction' ) ;
245+ const descriptor = sandbox . stub ( StakingWallet . prototype , < any > 'getDescriptorWallet' ) ;
246+ await btcStakingWallet . build ( transaction ) ;
247+ prebuildTransaction . calledOnceWithExactly ( transaction . buildParams ) . should . be . true ;
248+ descriptor . notCalled . should . be . true ;
249+ } ) ;
250+
251+ it ( 'btc undelegation transaction' , async function ( ) {
252+ const transaction = fixtures . transaction ( 'READY' , fixtures . btcUnstakingBuildParams , false , 'UNDELEGATE_WITHDRAW' ) ;
253+
254+ nock ( microservicesUri )
255+ . get (
256+ `/api/staking/v1/${ btcStakingWallet . coin } /wallets/${ btcStakingWallet . walletId } /requests/${ transaction . stakingRequestId } /transactions/${ transaction . id } `
257+ )
258+ . query ( { expandBuildParams : true } )
259+ . reply ( 200 , transaction ) ;
260+ nock ( microservicesUri )
261+ . get ( `/api/v2/btc/wallet/${ btcDescriptorWalletData . id } ` )
262+ . reply ( 200 , btcDescriptorWalletData ) ;
263+
264+ const prebuildTransaction = sandbox . stub ( Wallet . prototype , 'prebuildTransaction' ) ;
265+ await btcStakingWallet . build ( transaction ) ;
266+ prebuildTransaction . calledOnceWithExactly ( transaction . buildParams ) . should . be . true ;
267+ } ) ;
268+ } ) ;
210269} ) ;
0 commit comments