2020import com .openelements .hiero .base .protocol .data .TokenAssociateResult ;
2121import com .openelements .hiero .base .protocol .data .TokenDissociateRequest ;
2222import com .openelements .hiero .base .protocol .data .TokenDissociateResult ;
23+ import com .openelements .hiero .base .protocol .data .TokenMintRequest ;
24+ import com .openelements .hiero .base .protocol .data .TokenMintResult ;
2325
2426import java .util .List ;
2527import org .junit .jupiter .api .Assertions ;
@@ -36,6 +38,7 @@ public class FungibleClientImplTest {
3638 ArgumentCaptor <TokenCreateRequest > tokenCreateCaptor = ArgumentCaptor .forClass (TokenCreateRequest .class );
3739 ArgumentCaptor <TokenAssociateRequest > tokenAssociateCaptor = ArgumentCaptor .forClass (TokenAssociateRequest .class );
3840 ArgumentCaptor <TokenDissociateRequest > tokenDissociateCaptor = ArgumentCaptor .forClass (TokenDissociateRequest .class );
41+ ArgumentCaptor <TokenMintRequest > tokenMintCaptor = ArgumentCaptor .forClass (TokenMintRequest .class );
3942
4043 @ BeforeEach
4144 public void setup () {
@@ -422,4 +425,114 @@ void testDissociateTokenWithMultipleTokenThrowExceptionIfListEmpty() {
422425 () -> fungibleClientImpl .dissociateToken (List .of (), accountId , accountKey ));
423426 Assertions .assertEquals ("tokenIds must not be empty" , e .getMessage ());
424427 }
428+
429+ @ Test
430+ void testMintToken () throws HieroException {
431+ final TokenMintResult tokenMintResult = Mockito .mock (TokenMintResult .class );
432+ final long totalSupply = 20 ;
433+ final PrivateKey privateKey = PrivateKey .generateECDSA ();
434+
435+ final TokenId tokenId = TokenId .fromString ("0.0.1" );
436+ final long amount = 10 ;
437+
438+ when (operationalAccount .privateKey ()).thenReturn (privateKey );
439+ when (protocolLayerClient .executeMintTokenTransaction (any (TokenMintRequest .class )))
440+ .thenReturn (tokenMintResult );
441+ when (tokenMintResult .totalSupply ()).thenReturn (totalSupply );
442+
443+ final long result = fungibleClientImpl .mintToken (tokenId , amount );
444+
445+ verify (operationalAccount , times (1 )).privateKey ();
446+ verify (protocolLayerClient , times (1 ))
447+ .executeMintTokenTransaction (tokenMintCaptor .capture ());
448+ verify (tokenMintResult , times (1 )).totalSupply ();
449+
450+ final TokenMintRequest capture = tokenMintCaptor .getValue ();
451+ Assertions .assertEquals (tokenId , capture .tokenId ());
452+ Assertions .assertEquals (privateKey , capture .supplyKey ());
453+ Assertions .assertEquals (amount , capture .amount ());
454+ Assertions .assertEquals (totalSupply , result );
455+ }
456+
457+ @ Test
458+ void testMintTokenWithSupplyKey () throws HieroException {
459+ final TokenMintResult tokenMintResult = Mockito .mock (TokenMintResult .class );
460+ final long totalSupply = 20 ;
461+
462+ final PrivateKey supplyKey = PrivateKey .generateECDSA ();
463+ final TokenId tokenId = TokenId .fromString ("0.0.1" );
464+ final long amount = 10 ;
465+
466+ when (protocolLayerClient .executeMintTokenTransaction (any (TokenMintRequest .class )))
467+ .thenReturn (tokenMintResult );
468+ when (tokenMintResult .totalSupply ()).thenReturn (totalSupply );
469+
470+ final long result = fungibleClientImpl .mintToken (tokenId , supplyKey , amount );
471+
472+ verify (protocolLayerClient , times (1 ))
473+ .executeMintTokenTransaction (tokenMintCaptor .capture ());
474+ verify (tokenMintResult , times (1 )).totalSupply ();
475+
476+ final TokenMintRequest capture = tokenMintCaptor .getValue ();
477+ Assertions .assertEquals (tokenId , capture .tokenId ());
478+ Assertions .assertEquals (supplyKey , capture .supplyKey ());
479+ Assertions .assertEquals (amount , capture .amount ());
480+ Assertions .assertEquals (totalSupply , result );
481+ }
482+
483+ @ Test
484+ void testMintTokenThrowExceptionIfAmountLessThanEqualToZero () {
485+ final String message = "amount must be greater than 0" ;
486+
487+ final PrivateKey supplyKey = PrivateKey .generateECDSA ();
488+ final TokenId tokenId = TokenId .fromString ("0.0.1" );
489+ final long amount = 0 ;
490+
491+ when (operationalAccount .privateKey ()).thenReturn (supplyKey );
492+
493+ final IllegalArgumentException e1 = Assertions .assertThrows (
494+ IllegalArgumentException .class , () -> fungibleClientImpl .mintToken (tokenId , amount )
495+ );
496+ final IllegalArgumentException e2 = Assertions .assertThrows (
497+ IllegalArgumentException .class , () -> fungibleClientImpl .mintToken (tokenId , supplyKey , amount )
498+ );
499+
500+ Assertions .assertEquals (message , e1 .getMessage ());
501+ Assertions .assertEquals (message , e2 .getMessage ());
502+ }
503+
504+ @ Test
505+ void testMintTokenThrowExceptionForInvalidTokenId () throws HieroException {
506+ final PrivateKey supplyKey = PrivateKey .generateECDSA ();
507+ final TokenId tokenId = TokenId .fromString ("0.0.1" );
508+ final long amount = 10 ;
509+
510+ when (operationalAccount .privateKey ()).thenReturn (supplyKey );
511+ when (protocolLayerClient .executeMintTokenTransaction (any (TokenMintRequest .class )))
512+ .thenThrow (new HieroException ("Failed to execute transaction of type TokenMintTransaction" ));
513+
514+ Assertions .assertThrows (HieroException .class , () -> fungibleClientImpl .mintToken (tokenId , amount ));
515+ Assertions .assertThrows (HieroException .class , () -> fungibleClientImpl .mintToken (tokenId , supplyKey , amount ));
516+ }
517+
518+ @ Test
519+ void testMintTokenThrowExceptionForNullParams () {
520+ final PrivateKey supplyKey = PrivateKey .generateECDSA ();
521+ final TokenId tokenId = TokenId .fromString ("0.0.1" );
522+ final long amount = 10 ;
523+
524+ final NullPointerException e1 = Assertions .assertThrows (
525+ NullPointerException .class , () -> fungibleClientImpl .mintToken ((TokenId ) null , amount )
526+ );
527+ final NullPointerException e2 = Assertions .assertThrows (
528+ NullPointerException .class , () -> fungibleClientImpl .mintToken (null , supplyKey , amount )
529+ );
530+ final NullPointerException e3 = Assertions .assertThrows (
531+ NullPointerException .class , () -> fungibleClientImpl .mintToken (tokenId , null , amount )
532+ );
533+
534+ Assertions .assertEquals ("tokenId must not be null" , e1 .getMessage ());
535+ Assertions .assertEquals ("tokenId must not be null" , e2 .getMessage ());
536+ Assertions .assertEquals ("supplyKey must not be null" , e3 .getMessage ());
537+ }
425538}
0 commit comments