Skip to content

Commit b1ccc7a

Browse files
Merge pull request #183 from manishdait/nft-mint-test
test: Added test for mintNft and mintNfts in nftClientImpl
2 parents a4445fe + bc39c69 commit b1ccc7a

File tree

1 file changed

+237
-0
lines changed

1 file changed

+237
-0
lines changed

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

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.openelements.hiero.base.protocol.data.TokenCreateResult;
2525
import com.openelements.hiero.base.protocol.data.TokenTransferRequest;
2626
import com.openelements.hiero.base.protocol.data.TokenTransferResult;
27+
import com.openelements.hiero.base.protocol.data.TokenMintResult;
28+
import com.openelements.hiero.base.protocol.data.TokenMintRequest;
2729
import java.util.List;
2830
import java.util.Set;
2931
import org.junit.jupiter.api.Assertions;
@@ -42,6 +44,7 @@ public class NftClientImplTest {
4244
ArgumentCaptor<TokenBurnRequest> tokenBurnCaptor = ArgumentCaptor.forClass(TokenBurnRequest.class);
4345
ArgumentCaptor<TokenAssociateRequest> tokenAssociateCaptor = ArgumentCaptor.forClass(TokenAssociateRequest.class);
4446
ArgumentCaptor<TokenDissociateRequest> tokenDissociateCaptor = ArgumentCaptor.forClass(TokenDissociateRequest.class);
47+
ArgumentCaptor<TokenMintRequest> tokenMintCaptor = ArgumentCaptor.forClass(TokenMintRequest.class);
4548

4649
@BeforeEach
4750
public void setup() {
@@ -627,4 +630,238 @@ void testDissociateNftWithMultipleTokenThrowExceptionIfListEmpty() {
627630
() -> nftClientImpl.dissociateNft(List.of(), accountId, accountKey));
628631
Assertions.assertEquals("tokenIds must not be empty", e.getMessage());
629632
}
633+
634+
@Test
635+
void testMintNft() throws HieroException {
636+
final TokenMintResult tokenMintResult = Mockito.mock(TokenMintResult.class);
637+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
638+
639+
final TokenId tokenId = TokenId.fromString("1.2.3");
640+
final byte[] metadata = "Hello Hiero".getBytes();
641+
642+
when(operationalAccount.privateKey()).thenReturn(supplyKey);
643+
when(protocolLayerClient.executeMintTokenTransaction(any(TokenMintRequest.class)))
644+
.thenReturn(tokenMintResult);
645+
when(tokenMintResult.serials()).thenReturn(List.of(1L));
646+
647+
final long result = nftClientImpl.mintNft(tokenId, metadata);
648+
649+
verify(operationalAccount, times(1)).privateKey();
650+
verify(protocolLayerClient, times(1))
651+
.executeMintTokenTransaction(tokenMintCaptor.capture());
652+
653+
final TokenMintRequest capture = tokenMintCaptor.getValue();
654+
655+
Assertions.assertEquals(supplyKey, capture.supplyKey());
656+
Assertions.assertEquals(tokenId, capture.tokenId());
657+
Assertions.assertEquals(List.of(metadata), capture.metadata());
658+
659+
Assertions.assertEquals(1L, result);
660+
}
661+
662+
@Test
663+
void testMintNftWithSupplyKey() throws HieroException {
664+
final TokenMintResult tokenMintResult = Mockito.mock(TokenMintResult.class);
665+
666+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
667+
final TokenId tokenId = TokenId.fromString("1.2.3");
668+
final byte[] metadata = "Hello Hiero".getBytes();
669+
670+
when(protocolLayerClient.executeMintTokenTransaction(any(TokenMintRequest.class)))
671+
.thenReturn(tokenMintResult);
672+
when(tokenMintResult.serials()).thenReturn(List.of(1L));
673+
674+
final long result = nftClientImpl.mintNft(tokenId, supplyKey, metadata);
675+
676+
verify(protocolLayerClient, times(1))
677+
.executeMintTokenTransaction(tokenMintCaptor.capture());
678+
679+
final TokenMintRequest capture = tokenMintCaptor.getValue();
680+
681+
Assertions.assertEquals(supplyKey, capture.supplyKey());
682+
Assertions.assertEquals(tokenId, capture.tokenId());
683+
Assertions.assertEquals(List.of(metadata), capture.metadata());
684+
685+
Assertions.assertEquals(1L, result);
686+
}
687+
688+
@Test
689+
void testMintNftThrowExceptionIfMetadataGreaterThenMaxLen() {
690+
final String message = "each metadata entry must be less than 100 bytes";
691+
692+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
693+
final TokenId tokenId = TokenId.fromString("1.2.3");
694+
final byte[] metadata = new byte[101];
695+
696+
when(operationalAccount.privateKey()).thenReturn(supplyKey);
697+
698+
final IllegalArgumentException e1 = Assertions.assertThrows(
699+
IllegalArgumentException.class,
700+
() -> nftClientImpl.mintNft(tokenId, metadata)
701+
);
702+
final IllegalArgumentException e2 = Assertions.assertThrows(
703+
IllegalArgumentException.class,
704+
() -> nftClientImpl.mintNft(tokenId, supplyKey, metadata)
705+
);
706+
707+
Assertions.assertEquals(message, e1.getMessage());
708+
Assertions.assertEquals(message, e2.getMessage());
709+
}
710+
711+
@Test
712+
void testMintNftThrowExceptionForInvalidId() throws HieroException {
713+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
714+
final TokenId tokenId = TokenId.fromString("1.2.3");
715+
final byte[] metadata = "Hello Hiero".getBytes();
716+
717+
when(operationalAccount.privateKey()).thenReturn(supplyKey);
718+
when(protocolLayerClient.executeMintTokenTransaction(any(TokenMintRequest.class)))
719+
.thenThrow(new HieroException("Failed to execute transaction of type TokenTransferTransaction"));
720+
721+
Assertions.assertThrows(HieroException.class, () -> nftClientImpl.mintNft(tokenId, metadata));
722+
Assertions.assertThrows(HieroException.class, () -> nftClientImpl.mintNft(tokenId, supplyKey, metadata));
723+
}
724+
725+
@Test
726+
void testMintNftThrowExceptionForNullValue() {
727+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
728+
final TokenId tokenId = TokenId.fromString("1.2.3");
729+
final byte[] metadata = "Hello Hiero".getBytes();
730+
731+
Assertions.assertThrows(NullPointerException.class, () -> nftClientImpl.mintNft((TokenId) null, metadata));
732+
Assertions.assertThrows(NullPointerException.class, () -> nftClientImpl.mintNft(tokenId, null));
733+
734+
Assertions.assertThrows(
735+
NullPointerException.class,
736+
() -> nftClientImpl.mintNft((TokenId) null, supplyKey, metadata)
737+
);
738+
Assertions.assertThrows(
739+
NullPointerException.class,
740+
() -> nftClientImpl.mintNft(tokenId, null, metadata)
741+
);
742+
Assertions.assertThrows(
743+
NullPointerException.class,
744+
() -> nftClientImpl.mintNft(tokenId, supplyKey, null)
745+
);
746+
}
747+
748+
@Test
749+
void testMintNfts() throws HieroException {
750+
final List<Long> serials = List.of(1L, 2L);
751+
final TokenMintResult tokenMintResult = Mockito.mock(TokenMintResult.class);
752+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
753+
754+
final TokenId tokenId = TokenId.fromString("1.2.3");
755+
final byte[] metadata1 = "Hello Hiero1".getBytes();
756+
final byte[] metadata2 = "Hello Hiero2".getBytes();
757+
758+
when(operationalAccount.privateKey()).thenReturn(supplyKey);
759+
when(protocolLayerClient.executeMintTokenTransaction(any(TokenMintRequest.class)))
760+
.thenReturn(tokenMintResult);
761+
when(tokenMintResult.serials()).thenReturn(serials);
762+
763+
final List<Long> result = nftClientImpl.mintNfts(tokenId, metadata1, metadata2);
764+
765+
verify(operationalAccount, times(1)).privateKey();
766+
verify(protocolLayerClient, times(1))
767+
.executeMintTokenTransaction(tokenMintCaptor.capture());
768+
769+
final TokenMintRequest capture = tokenMintCaptor.getValue();
770+
771+
Assertions.assertEquals(supplyKey, capture.supplyKey());
772+
Assertions.assertEquals(tokenId, capture.tokenId());
773+
Assertions.assertEquals(List.of(metadata1, metadata2), capture.metadata());
774+
775+
Assertions.assertEquals(serials, result);
776+
}
777+
778+
@Test
779+
void testMintNftsWithSupplyKey() throws HieroException {
780+
final List<Long> serials = List.of(1L, 2L);
781+
final TokenMintResult tokenMintResult = Mockito.mock(TokenMintResult.class);
782+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
783+
784+
final TokenId tokenId = TokenId.fromString("1.2.3");
785+
final byte[] metadata1 = "Hello Hiero1".getBytes();
786+
final byte[] metadata2 = "Hello Hiero2".getBytes();
787+
788+
when(protocolLayerClient.executeMintTokenTransaction(any(TokenMintRequest.class)))
789+
.thenReturn(tokenMintResult);
790+
when(tokenMintResult.serials()).thenReturn(serials);
791+
792+
final List<Long> result = nftClientImpl.mintNfts(tokenId, supplyKey, metadata1, metadata2);
793+
794+
verify(protocolLayerClient, times(1))
795+
.executeMintTokenTransaction(tokenMintCaptor.capture());
796+
797+
final TokenMintRequest capture = tokenMintCaptor.getValue();
798+
799+
Assertions.assertEquals(supplyKey, capture.supplyKey());
800+
Assertions.assertEquals(tokenId, capture.tokenId());
801+
Assertions.assertEquals(List.of(metadata1, metadata2), capture.metadata());
802+
803+
Assertions.assertEquals(serials, result);
804+
}
805+
806+
@Test
807+
void testMintNftsThrowExceptionIfMetadataGreaterThenMaxLen() {
808+
final String message = "each metadata entry must be less than 100 bytes";
809+
810+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
811+
final TokenId tokenId = TokenId.fromString("1.2.3");
812+
final byte[] metadata1 = new byte[101];
813+
final byte[] metadata2 = "Hello Hiero".getBytes();
814+
815+
when(operationalAccount.privateKey()).thenReturn(supplyKey);
816+
817+
final IllegalArgumentException e1 = Assertions.assertThrows(
818+
IllegalArgumentException.class,
819+
() -> nftClientImpl.mintNfts(tokenId, metadata1, metadata2)
820+
);
821+
final IllegalArgumentException e2 = Assertions.assertThrows(
822+
IllegalArgumentException.class,
823+
() -> nftClientImpl.mintNfts(tokenId, supplyKey, metadata1, metadata2)
824+
);
825+
826+
Assertions.assertEquals(message, e1.getMessage());
827+
Assertions.assertEquals(message, e2.getMessage());
828+
}
829+
830+
@Test
831+
void testMintNftsThrowExceptionForInvalidId() throws HieroException {
832+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
833+
final TokenId tokenId = TokenId.fromString("1.2.3");
834+
final byte[] metadata1 = "Hello Hiero1".getBytes();
835+
final byte[] metadata2 = "Hello Hiero2".getBytes();
836+
837+
when(operationalAccount.privateKey()).thenReturn(supplyKey);
838+
when(protocolLayerClient.executeMintTokenTransaction(any(TokenMintRequest.class)))
839+
.thenThrow(new HieroException("Failed to execute transaction of type TokenTransferTransaction"));
840+
841+
Assertions.assertThrows(HieroException.class, () -> nftClientImpl.mintNfts(tokenId, metadata1, metadata2));
842+
Assertions.assertThrows(HieroException.class, () -> nftClientImpl.mintNfts(tokenId, supplyKey, metadata1, metadata2));
843+
}
844+
845+
@Test
846+
void testMintNftsThrowExceptionForNullValue() {
847+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
848+
final TokenId tokenId = TokenId.fromString("1.2.3");
849+
final byte[] metadata = "Hello Hiero".getBytes();
850+
851+
Assertions.assertThrows(NullPointerException.class, () -> nftClientImpl.mintNfts((TokenId) null, metadata));
852+
Assertions.assertThrows(NullPointerException.class, () -> nftClientImpl.mintNfts(tokenId, null));
853+
854+
Assertions.assertThrows(
855+
NullPointerException.class,
856+
() -> nftClientImpl.mintNfts((TokenId) null, supplyKey, null)
857+
);
858+
Assertions.assertThrows(
859+
NullPointerException.class,
860+
() -> nftClientImpl.mintNfts(tokenId, (PrivateKey) null, metadata)
861+
);
862+
Assertions.assertThrows(
863+
NullPointerException.class,
864+
() -> nftClientImpl.mintNfts(tokenId, supplyKey, null)
865+
);
866+
}
630867
}

0 commit comments

Comments
 (0)