@@ -44,12 +44,14 @@ import {
4444 externalAddressApiMock ,
4545 stakeApiMock ,
4646 walletStakeApiMock ,
47+ VALID_SIGNED_PAYLOAD_SIGNATURE_MODEL ,
4748} from "./utils" ;
4849import { Trade } from "../coinbase/trade" ;
4950import { WalletAddress } from "../coinbase/address/wallet_address" ;
5051import { StakingOperation } from "../coinbase/staking_operation" ;
5152import { StakingReward } from "../coinbase/staking_reward" ;
5253import { StakingBalance } from "../coinbase/staking_balance" ;
54+ import { PayloadSignature } from "../coinbase/payload_signature" ;
5355
5456describe ( "Wallet Class" , ( ) => {
5557 let wallet : Wallet ;
@@ -624,6 +626,69 @@ describe("Wallet Class", () => {
624626 } ) ;
625627 } ) ;
626628
629+ describe ( "#createPayloadSignature" , ( ) => {
630+ let unsignedPayload = VALID_SIGNED_PAYLOAD_SIGNATURE_MODEL . unsigned_payload ;
631+ let signature =
632+ "0xa4e14b28d86dfd7bae739d724ba2ffb13b4458d040930b805eea0a4bc2f5251e7901110677d1ef2ec23ef810c755d0bc72cc6472a4cfb3c53ef242c6ba9fa60a1b" ;
633+
634+ beforeAll ( ( ) => {
635+ Coinbase . apiClients . address = addressesApiMock ;
636+ } ) ;
637+
638+ beforeEach ( ( ) => {
639+ jest . clearAllMocks ( ) ;
640+ } ) ;
641+
642+ it ( "should successfully create a payload signature" , async ( ) => {
643+ Coinbase . apiClients . address ! . createPayloadSignature = mockReturnValue (
644+ VALID_SIGNED_PAYLOAD_SIGNATURE_MODEL ,
645+ ) ;
646+
647+ const payloadSignature = await wallet . createPayloadSignature ( unsignedPayload ) ;
648+
649+ expect ( Coinbase . apiClients . address ! . createPayloadSignature ) . toHaveBeenCalledWith (
650+ wallet . getId ( ) ,
651+ wallet . getDefaultAddress ( ) ! . getId ( ) ,
652+ {
653+ unsigned_payload : unsignedPayload ,
654+ signature,
655+ } ,
656+ ) ;
657+ expect ( Coinbase . apiClients . address ! . createPayloadSignature ) . toHaveBeenCalledTimes ( 1 ) ;
658+ expect ( payloadSignature ) . toBeInstanceOf ( PayloadSignature ) ;
659+ } ) ;
660+
661+ it ( "should throw an APIError when the API call to create a payload signature fails" , async ( ) => {
662+ Coinbase . apiClients . address ! . createPayloadSignature = mockReturnRejectedValue (
663+ new APIError ( "Failed to create payload signature" ) ,
664+ ) ;
665+
666+ expect ( async ( ) => {
667+ await wallet . createPayloadSignature ( unsignedPayload ) ;
668+ } ) . rejects . toThrow ( Error ) ;
669+
670+ expect ( Coinbase . apiClients . address ! . createPayloadSignature ) . toHaveBeenCalledWith (
671+ wallet . getId ( ) ,
672+ wallet . getDefaultAddress ( ) ! . getId ( ) ,
673+ {
674+ unsigned_payload : unsignedPayload ,
675+ signature,
676+ } ,
677+ ) ;
678+ expect ( Coinbase . apiClients . address ! . createPayloadSignature ) . toHaveBeenCalledTimes ( 1 ) ;
679+ } ) ;
680+
681+ it ( "should throw an Error when the wallet does not have a default address" , async ( ) => {
682+ const invalidWallet = Wallet . init ( walletModel ) ;
683+
684+ expect ( async ( ) => {
685+ await invalidWallet . createPayloadSignature ( unsignedPayload ) ;
686+ } ) . rejects . toThrow ( Error ) ;
687+
688+ expect ( Coinbase . apiClients . address ! . createPayloadSignature ) . not . toHaveBeenCalled ( ) ;
689+ } ) ;
690+ } ) ;
691+
627692 describe ( ".create" , ( ) => {
628693 beforeEach ( ( ) => { } ) ;
629694 it ( "should return a Wallet instance" , async ( ) => {
0 commit comments