@@ -676,4 +676,98 @@ describe("IndexerStorage", () => {
676676 expect ( tokens [ 2 ] ) . toBeGreaterThan ( now ) ;
677677 } ) ;
678678 } ) ;
679+
680+ it ( "getMultipleSuiGqlCursors should return cursors for multiple setups" , async ( ) => {
681+ await storage . saveMultipleSuiGqlCursors ( [ { cursor : "cursor1" , setupId : 1 } ] ) ;
682+ const cursors = await storage . getMultipleSuiGqlCursors ( [ 1 , 2 ] ) ;
683+ expect ( cursors [ 1 ] ) . toBe ( "cursor1" ) ;
684+ expect ( cursors [ 2 ] ) . toBeNull ( ) ;
685+ } ) ;
686+
687+ it ( "hasRedeemRequest should check if redeem exists" , async ( ) => {
688+ await insertRedeemRequest ( storage , 1 , "redeemer1" , recipientScript , 3000 , 1000 , "0xSuiTx1" ) ;
689+ const exists = await storage . hasRedeemRequest ( 1 ) ;
690+ const notExists = await storage . hasRedeemRequest ( 999 ) ;
691+ expect ( exists ) . toBe ( true ) ;
692+ expect ( notExists ) . toBe ( false ) ;
693+ } ) ;
694+
695+ it ( "getRedeemUtxosWithDetails should return utxos with input_index" , async ( ) => {
696+ await insertRedeemRequest ( storage , 1 , "redeemer1" , recipientScript , 3000 , 1000 , "0xSuiTx1" ) ;
697+ await insertUtxo (
698+ storage ,
699+ 1 ,
700+ scriptPubkey1 ,
701+ "dwallet1" ,
702+ "tx1" ,
703+ 0 ,
704+ 2000 ,
705+ UtxoStatus . Available ,
706+ null ,
707+ ) ;
708+ await storage . saveRedeemInputs ( [
709+ {
710+ redeem_id : 1 ,
711+ utxo_id : 1 ,
712+ input_index : 0 ,
713+ dwallet_id : "dwallet1" ,
714+ created_at : Date . now ( ) ,
715+ } ,
716+ ] ) ;
717+ const utxos = await storage . getRedeemUtxosWithDetails ( 1 ) ;
718+ expect ( utxos . length ) . toBe ( 1 ) ;
719+ expect ( utxos [ 0 ] ! . input_index ) . toBe ( 0 ) ;
720+ } ) ;
721+
722+ it ( "should transition redeem request from broadcasted to finalized and update UTXO status" , async ( ) => {
723+ const redeemId = 1 ;
724+ const btcTxId = "btcTxId123" ;
725+ await insertRedeemRequest (
726+ storage ,
727+ redeemId ,
728+ "redeemer1" ,
729+ recipientScript ,
730+ 3000 ,
731+ 1000 ,
732+ "0xSuiTx1" ,
733+ ) ;
734+ await insertUtxo (
735+ storage ,
736+ 1 ,
737+ scriptPubkey1 ,
738+ "dwallet1" ,
739+ "tx1" ,
740+ 0 ,
741+ 2000 ,
742+ UtxoStatus . Available ,
743+ null ,
744+ ) ;
745+ await storage . saveRedeemInputs ( [
746+ {
747+ redeem_id : redeemId ,
748+ utxo_id : 1 ,
749+ input_index : 0 ,
750+ dwallet_id : "dwallet1" ,
751+ created_at : Date . now ( ) ,
752+ } ,
753+ ] ) ;
754+ await storage . markRedeemBroadcasted ( redeemId , btcTxId ) ;
755+ const broadcastedRedeem = await db
756+ . prepare ( "SELECT status, btc_tx FROM nbtc_redeem_requests WHERE redeem_id = ?" )
757+ . bind ( redeemId )
758+ . first < { status : string ; btc_tx : string } > ( ) ;
759+ expect ( broadcastedRedeem ! . status ) . toBe ( RedeemRequestStatus . Broadcasting ) ;
760+ expect ( broadcastedRedeem ! . btc_tx ) . toBe ( btcTxId ) ;
761+ await storage . setRedeemFinalized ( redeemId ) ;
762+ const finalizedRedeem = await db
763+ . prepare ( "SELECT status FROM nbtc_redeem_requests WHERE redeem_id = ?" )
764+ . bind ( redeemId )
765+ . first < { status : string } > ( ) ;
766+ const utxo = await db
767+ . prepare ( "SELECT status FROM nbtc_utxos WHERE nbtc_utxo_id = ?" )
768+ . bind ( 1 )
769+ . first < { status : string } > ( ) ;
770+ expect ( finalizedRedeem ! . status ) . toBe ( RedeemRequestStatus . Finalized ) ;
771+ expect ( utxo ! . status ) . toBe ( UtxoStatus . Spent ) ;
772+ } ) ;
679773} ) ;
0 commit comments