88
99import com .hedera .hashgraph .sdk .AccountId ;
1010import com .hedera .hashgraph .sdk .PrivateKey ;
11+ import com .hedera .hashgraph .sdk .PublicKey ;
1112import com .hedera .hashgraph .sdk .TokenId ;
1213import com .openelements .hiero .base .HieroException ;
1314import com .openelements .hiero .base .data .Account ;
1415import com .openelements .hiero .base .implementation .NftClientImpl ;
1516import com .openelements .hiero .base .protocol .ProtocolLayerClient ;
17+ import com .openelements .hiero .base .protocol .data .TokenAssociateRequest ;
18+ import com .openelements .hiero .base .protocol .data .TokenAssociateResult ;
1619import com .openelements .hiero .base .protocol .data .TokenBurnRequest ;
1720import com .openelements .hiero .base .protocol .data .TokenBurnResult ;
1821import com .openelements .hiero .base .protocol .data .TokenCreateRequest ;
@@ -35,6 +38,7 @@ public class NftClientImplTest {
3538 ArgumentCaptor <TokenCreateRequest > tokenRequestCaptor = ArgumentCaptor .forClass (TokenCreateRequest .class );
3639 ArgumentCaptor <TokenTransferRequest > tokenTransferCaptor = ArgumentCaptor .forClass (TokenTransferRequest .class );
3740 ArgumentCaptor <TokenBurnRequest > tokenBurnCaptor = ArgumentCaptor .forClass (TokenBurnRequest .class );
41+ ArgumentCaptor <TokenAssociateRequest > tokenAssociateCaptor = ArgumentCaptor .forClass (TokenAssociateRequest .class );
3842
3943 @ BeforeEach
4044 public void setup () {
@@ -440,4 +444,72 @@ void testBurnNftNullParam() {
440444 Assertions .assertThrows (NullPointerException .class ,
441445 () -> nftClientImpl .burnNfts (null , null , null ));
442446 }
447+
448+ @ Test
449+ void testAssociateNft () throws HieroException {
450+ final TokenAssociateResult tokenAssociateResult = Mockito .mock (TokenAssociateResult .class );
451+
452+ final TokenId tokenId = TokenId .fromString ("1.2.3" );
453+ final AccountId accountId = AccountId .fromString ("1.2.3" );
454+ final PrivateKey accountKey = PrivateKey .generateECDSA ();
455+
456+ when (protocolLayerClient .executeTokenAssociateTransaction (any (TokenAssociateRequest .class )))
457+ .thenReturn (tokenAssociateResult );
458+
459+ nftClientImpl .associateNft (tokenId , accountId , accountKey );
460+
461+ verify (protocolLayerClient , times (1 ))
462+ .executeTokenAssociateTransaction (tokenAssociateCaptor .capture ());
463+
464+ final TokenAssociateRequest request = tokenAssociateCaptor .getValue ();
465+ Assertions .assertEquals (tokenId , request .tokenId ());
466+ Assertions .assertEquals (accountId , request .accountId ());
467+ Assertions .assertEquals (accountKey , request .accountPrivateKey ());
468+ }
469+
470+ @ Test
471+ void testAssociateNftWithAccount () throws HieroException {
472+ final TokenAssociateResult tokenAssociateResult = Mockito .mock (TokenAssociateResult .class );
473+ final AccountId accountId = AccountId .fromString ("1.2.3" );
474+ final PrivateKey privateKey = PrivateKey .generateECDSA ();
475+ final PublicKey publicKey = privateKey .getPublicKey ();
476+
477+ final TokenId tokenId = TokenId .fromString ("1.2.3" );
478+ final Account account = new Account (accountId , publicKey , privateKey );
479+
480+ when (protocolLayerClient .executeTokenAssociateTransaction (any (TokenAssociateRequest .class )))
481+ .thenReturn (tokenAssociateResult );
482+
483+ nftClientImpl .associateNft (tokenId , account );
484+
485+ verify (protocolLayerClient , times (1 ))
486+ .executeTokenAssociateTransaction (tokenAssociateCaptor .capture ());
487+
488+ final TokenAssociateRequest request = tokenAssociateCaptor .getValue ();
489+ Assertions .assertEquals (tokenId , request .tokenId ());
490+ Assertions .assertEquals (accountId , request .accountId ());
491+ Assertions .assertEquals (privateKey , request .accountPrivateKey ());
492+ }
493+
494+ @ Test
495+ void testAssociateNftThrowsExceptionForInvalidId () throws HieroException {
496+ final TokenId tokenId = TokenId .fromString ("1.2.3" );
497+ final AccountId accountId = AccountId .fromString ("1.2.3" );
498+ final PrivateKey accountKey = PrivateKey .generateECDSA ();
499+ final Account account = new Account (accountId , accountKey .getPublicKey (), accountKey );
500+
501+ when (protocolLayerClient .executeTokenAssociateTransaction (any (TokenAssociateRequest .class )))
502+ .thenThrow (new HieroException ("Failed to execute transaction of type TokenAssociateTransaction" ));
503+
504+ Assertions .assertThrows (HieroException .class , () -> nftClientImpl .associateNft (tokenId , accountId , accountKey ));
505+ Assertions .assertThrows (HieroException .class , () -> nftClientImpl .associateNft (tokenId , account ));
506+ }
507+
508+ @ Test
509+ void testAssociateNftNullParam () {
510+ Assertions .assertThrows (NullPointerException .class ,
511+ () -> nftClientImpl .associateNft ((TokenId ) null , (AccountId ) null , (PrivateKey ) null ));
512+ Assertions .assertThrows (NullPointerException .class ,
513+ () -> nftClientImpl .associateNft (null , null ));
514+ }
443515}
0 commit comments