Skip to content

Commit aa7d317

Browse files
Merge pull request #154 from manishdait/issue-91
test: Implemented test to validate associateNft()
2 parents 1fe8847 + 33abac6 commit aa7d317

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/NftClientImplTest.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@
88

99
import com.hedera.hashgraph.sdk.AccountId;
1010
import com.hedera.hashgraph.sdk.PrivateKey;
11+
import com.hedera.hashgraph.sdk.PublicKey;
1112
import com.hedera.hashgraph.sdk.TokenId;
1213
import com.openelements.hiero.base.HieroException;
1314
import com.openelements.hiero.base.data.Account;
1415
import com.openelements.hiero.base.implementation.NftClientImpl;
1516
import com.openelements.hiero.base.protocol.ProtocolLayerClient;
17+
import com.openelements.hiero.base.protocol.data.TokenAssociateRequest;
18+
import com.openelements.hiero.base.protocol.data.TokenAssociateResult;
1619
import com.openelements.hiero.base.protocol.data.TokenBurnRequest;
1720
import com.openelements.hiero.base.protocol.data.TokenBurnResult;
1821
import 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
}

hiero-enterprise-spring/src/test/java/com/openelements/hiero/spring/test/NftClientTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,26 @@ void associateNft() throws Exception {
100100
});
101101
}
102102

103+
@Test
104+
void associateNftThrowExceptionForInvalidId() throws HieroException {
105+
//given
106+
final TokenId tokenId = TokenId.fromString("1.2.3");
107+
final Account userAccount = accountClient.createAccount(1);
108+
109+
//then
110+
Assertions.assertThrows(HieroException.class,
111+
() -> nftClient.associateNft(tokenId, userAccount.accountId(), userAccount.privateKey()));
112+
}
113+
114+
@Test
115+
void testAssociateNftForNullParam() {
116+
Assertions.assertThrows(NullPointerException.class,
117+
() -> nftClient.associateNft((TokenId) null, null, null));
118+
119+
Assertions.assertThrows(NullPointerException.class,
120+
() -> nftClient.associateNft(null, null));
121+
}
122+
103123
@Test
104124
void transferNft() throws Exception {
105125
//given

0 commit comments

Comments
 (0)