@@ -13,6 +13,7 @@ import {
1313 APIType ,
1414 SmartTransactionStatuses ,
1515 SmartTransactionCancellationReason ,
16+ OriginalTransactionStatus ,
1617 ClientId ,
1718} from './types' ;
1819import * as utils from './utils' ;
@@ -578,6 +579,41 @@ describe('src/utils.js', () => {
578579 ) ;
579580 } ) ;
580581
582+ it ( 'includes originalTransactionStatus in error message when available' , ( ) => {
583+ const updateTransactionMock = jest . fn ( ) ;
584+ const smartTransaction = {
585+ ...createSmartTransaction ( SmartTransactionStatuses . CANCELLED ) ,
586+ statusMetadata : {
587+ cancellationFeeWei : 0 ,
588+ deadlineRatio : 0 ,
589+ minedHash : '' ,
590+ minedTx : SmartTransactionMinedTx . NOT_MINED ,
591+ isSettled : false ,
592+ originalTransactionStatus :
593+ OriginalTransactionStatus . FAILED_WOULD_REVERT ,
594+ } ,
595+ } ;
596+
597+ utils . markRegularTransactionsAsFailed ( {
598+ smartTransaction,
599+ getRegularTransactions : ( ) => [ mockTransaction ] ,
600+ updateTransaction : updateTransactionMock ,
601+ } ) ;
602+
603+ expect ( updateTransactionMock ) . toHaveBeenCalledWith (
604+ {
605+ ...mockTransaction ,
606+ status : TransactionStatus . failed ,
607+ error : {
608+ name : 'SmartTransactionFailed' ,
609+ message :
610+ 'Smart transaction failed with status: cancelled, originalTransactionStatus: FAILED_WOULD_REVERT' ,
611+ } ,
612+ } ,
613+ 'Smart transaction status: cancelled' ,
614+ ) ;
615+ } ) ;
616+
581617 it ( 'throws error if original transaction cannot be found' , ( ) => {
582618 const updateTransactionMock = jest . fn ( ) ;
583619 const getRegularTransactionsMock = jest . fn ( ( ) => [ ] ) ;
@@ -665,4 +701,57 @@ describe('src/utils.js', () => {
665701 ) ;
666702 } ) ;
667703 } ) ;
704+
705+ describe ( 'getSmartTransactionMetricsProperties' , ( ) => {
706+ it ( 'includes stx_original_transaction_status from statusMetadata' , ( ) => {
707+ const smartTransaction = {
708+ uuid : 'test-uuid' ,
709+ status : SmartTransactionStatuses . SUCCESS ,
710+ time : Date . now ( ) ,
711+ statusMetadata : {
712+ cancellationFeeWei : 0 ,
713+ deadlineRatio : 0.5 ,
714+ minedHash : '0xabc' ,
715+ minedTx : SmartTransactionMinedTx . SUCCESS ,
716+ isSettled : true ,
717+ duplicated : false ,
718+ timedOut : false ,
719+ proxied : false ,
720+ originalTransactionStatus : OriginalTransactionStatus . VALIDATED ,
721+ } ,
722+ } ;
723+
724+ const result =
725+ utils . getSmartTransactionMetricsProperties ( smartTransaction ) ;
726+
727+ expect ( result ) . toStrictEqual (
728+ expect . objectContaining ( {
729+ stx_original_transaction_status : OriginalTransactionStatus . VALIDATED ,
730+ stx_duplicated : false ,
731+ stx_timed_out : false ,
732+ stx_proxied : false ,
733+ } ) ,
734+ ) ;
735+ } ) ;
736+
737+ it ( 'returns undefined for stx_original_transaction_status when not in statusMetadata' , ( ) => {
738+ const smartTransaction = {
739+ uuid : 'test-uuid' ,
740+ status : SmartTransactionStatuses . PENDING ,
741+ time : Date . now ( ) ,
742+ statusMetadata : {
743+ cancellationFeeWei : 0 ,
744+ deadlineRatio : 0 ,
745+ minedHash : '' ,
746+ minedTx : SmartTransactionMinedTx . NOT_MINED ,
747+ isSettled : false ,
748+ } ,
749+ } ;
750+
751+ const result =
752+ utils . getSmartTransactionMetricsProperties ( smartTransaction ) ;
753+
754+ expect ( result . stx_original_transaction_status ) . toBeUndefined ( ) ;
755+ } ) ;
756+ } ) ;
668757} ) ;
0 commit comments