1313import com .openelements .hiero .base .data .Account ;
1414import com .openelements .hiero .base .implementation .NftClientImpl ;
1515import com .openelements .hiero .base .protocol .ProtocolLayerClient ;
16+ import com .openelements .hiero .base .protocol .data .TokenBurnRequest ;
17+ import com .openelements .hiero .base .protocol .data .TokenBurnResult ;
1618import com .openelements .hiero .base .protocol .data .TokenCreateRequest ;
1719import com .openelements .hiero .base .protocol .data .TokenCreateResult ;
1820import com .openelements .hiero .base .protocol .data .TokenTransferRequest ;
1921import com .openelements .hiero .base .protocol .data .TokenTransferResult ;
2022import java .util .List ;
23+ import java .util .Set ;
2124import org .junit .jupiter .api .Assertions ;
2225import org .junit .jupiter .api .BeforeEach ;
2326import org .junit .jupiter .api .Test ;
@@ -31,6 +34,7 @@ public class NftClientImplTest {
3134
3235 ArgumentCaptor <TokenCreateRequest > tokenRequestCaptor = ArgumentCaptor .forClass (TokenCreateRequest .class );
3336 ArgumentCaptor <TokenTransferRequest > tokenTransferCaptor = ArgumentCaptor .forClass (TokenTransferRequest .class );
37+ ArgumentCaptor <TokenBurnRequest > tokenBurnCaptor = ArgumentCaptor .forClass (TokenBurnRequest .class );
3438
3539 @ BeforeEach
3640 public void setup () {
@@ -313,4 +317,127 @@ void testTransferNftNullParams() {
313317 () -> nftClientImpl .transferNfts (null , null , null ,
314318 null , null ));
315319 }
320+
321+ @ Test
322+ void testBurnNft () throws HieroException {
323+ final PrivateKey privateKey = PrivateKey .generateECDSA ();
324+ final TokenBurnResult tokenBurnRequest = Mockito .mock (TokenBurnResult .class );
325+
326+ final TokenId tokenId = TokenId .fromString ("1.2.3" );
327+ final long serials = 1L ;
328+
329+ when (operationalAccount .privateKey ()).thenReturn (privateKey );
330+ when (protocolLayerClient .executeBurnTokenTransaction (any (TokenBurnRequest .class )))
331+ .thenReturn (tokenBurnRequest );
332+
333+ nftClientImpl .burnNft (tokenId , serials );
334+
335+ verify (operationalAccount , times (1 )).privateKey ();
336+ verify (protocolLayerClient , times (1 ))
337+ .executeBurnTokenTransaction (tokenBurnCaptor .capture ());
338+
339+ final TokenBurnRequest request = tokenBurnCaptor .getValue ();
340+ Assertions .assertEquals (tokenId , request .tokenId ());
341+ Assertions .assertEquals (Set .of (serials ), request .serials ());
342+ Assertions .assertEquals (privateKey , request .supplyKey ());
343+ }
344+
345+ @ Test
346+ void testBurnNftWithSupplyKey () throws HieroException {
347+ final TokenBurnResult tokenBurnRequest = Mockito .mock (TokenBurnResult .class );
348+
349+ final TokenId tokenId = TokenId .fromString ("1.2.3" );
350+ final long serials = 1L ;
351+ final PrivateKey privateKey = PrivateKey .generateECDSA ();
352+
353+ when (protocolLayerClient .executeBurnTokenTransaction (any (TokenBurnRequest .class )))
354+ .thenReturn (tokenBurnRequest );
355+
356+ nftClientImpl .burnNft (tokenId , serials , privateKey );
357+
358+ verify (protocolLayerClient , times (1 ))
359+ .executeBurnTokenTransaction (tokenBurnCaptor .capture ());
360+
361+ final TokenBurnRequest request = tokenBurnCaptor .getValue ();
362+ Assertions .assertEquals (tokenId , request .tokenId ());
363+ Assertions .assertEquals (Set .of (serials ), request .serials ());
364+ Assertions .assertEquals (privateKey , request .supplyKey ());
365+ }
366+
367+ @ Test
368+ void testBurnNfts () throws HieroException {
369+ final PrivateKey privateKey = PrivateKey .generateECDSA ();
370+ final TokenBurnResult tokenBurnRequest = Mockito .mock (TokenBurnResult .class );
371+
372+ final TokenId tokenId = TokenId .fromString ("1.2.3" );
373+ final Set <Long > serials = Set .of (1L );
374+
375+ when (operationalAccount .privateKey ()).thenReturn (privateKey );
376+ when (protocolLayerClient .executeBurnTokenTransaction (any (TokenBurnRequest .class )))
377+ .thenReturn (tokenBurnRequest );
378+
379+ nftClientImpl .burnNfts (tokenId , serials );
380+
381+ verify (operationalAccount , times (1 )).privateKey ();
382+ verify (protocolLayerClient , times (1 ))
383+ .executeBurnTokenTransaction (tokenBurnCaptor .capture ());
384+
385+ final TokenBurnRequest request = tokenBurnCaptor .getValue ();
386+ Assertions .assertEquals (tokenId , request .tokenId ());
387+ Assertions .assertEquals (serials , request .serials ());
388+ Assertions .assertEquals (privateKey , request .supplyKey ());
389+ }
390+
391+ @ Test
392+ void testBurnNftsWithSupplyKey () throws HieroException {
393+ final TokenBurnResult tokenBurnRequest = Mockito .mock (TokenBurnResult .class );
394+
395+ final TokenId tokenId = TokenId .fromString ("1.2.3" );
396+ final Set <Long > serials = Set .of (1L );
397+ final PrivateKey privateKey = PrivateKey .generateECDSA ();
398+
399+ when (protocolLayerClient .executeBurnTokenTransaction (any (TokenBurnRequest .class )))
400+ .thenReturn (tokenBurnRequest );
401+
402+ nftClientImpl .burnNfts (tokenId , serials , privateKey );
403+
404+ verify (protocolLayerClient , times (1 ))
405+ .executeBurnTokenTransaction (tokenBurnCaptor .capture ());
406+
407+ final TokenBurnRequest request = tokenBurnCaptor .getValue ();
408+ Assertions .assertEquals (tokenId , request .tokenId ());
409+ Assertions .assertEquals (serials , request .serials ());
410+ Assertions .assertEquals (privateKey , request .supplyKey ());
411+ }
412+
413+ @ Test
414+ void testBurnNftThrowsExceptionForInvalidTokenId () throws HieroException {
415+ final PrivateKey privateKey = PrivateKey .generateECDSA ();
416+ final TokenId tokenId = TokenId .fromString ("1.2.3" );
417+ final long serials = 1L ;
418+
419+ when (operationalAccount .privateKey ()).thenReturn (privateKey );
420+ when (protocolLayerClient .executeBurnTokenTransaction (any (TokenBurnRequest .class )))
421+ .thenThrow (new HieroException ("Failed to execute transaction of type TokenBurnTransaction" ));
422+
423+ Assertions .assertThrows (HieroException .class , () -> nftClientImpl .burnNft (tokenId , serials ));
424+ Assertions .assertThrows (HieroException .class , () -> nftClientImpl .burnNft (tokenId , serials , privateKey ));
425+ Assertions .assertThrows (HieroException .class , () -> nftClientImpl .burnNfts (tokenId , Set .of (serials )));
426+ Assertions .assertThrows (HieroException .class , () -> nftClientImpl .burnNfts (tokenId , Set .of (serials ), privateKey ));
427+ }
428+
429+ @ Test
430+ void testBurnNftNullParam () {
431+ Assertions .assertThrows (NullPointerException .class ,
432+ () -> nftClientImpl .burnNft (null , 0 ));
433+
434+ Assertions .assertThrows (NullPointerException .class ,
435+ () -> nftClientImpl .burnNft (null , 0 , null ));
436+
437+ Assertions .assertThrows (NullPointerException .class ,
438+ () -> nftClientImpl .burnNfts (null , null ));
439+
440+ Assertions .assertThrows (NullPointerException .class ,
441+ () -> nftClientImpl .burnNfts (null , null , null ));
442+ }
316443}
0 commit comments