From e4d7b3371dc3c420e32746f750e8253dcd58d1b3 Mon Sep 17 00:00:00 2001 From: Agaba Derrick Date: Wed, 21 May 2025 00:19:03 +0300 Subject: [PATCH 1/7] Add Missing Tests for delete Account Functionality Signed-off-by: Agaba Derrick --- .../base/test/AccountClientImplTest.java | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java index 2a7641d2..823ff1ee 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java @@ -5,10 +5,7 @@ import com.openelements.hiero.base.data.Account; import com.hedera.hashgraph.sdk.Hbar; import com.openelements.hiero.base.HieroException; -import com.openelements.hiero.base.protocol.data.AccountBalanceRequest; -import com.openelements.hiero.base.protocol.data.AccountBalanceResponse; -import com.openelements.hiero.base.protocol.data.AccountCreateRequest; -import com.openelements.hiero.base.protocol.data.AccountCreateResult; +import com.openelements.hiero.base.protocol.data.*; import com.openelements.hiero.base.protocol.ProtocolLayerClient; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -145,4 +142,47 @@ void testCreateAccount_hieroExceptionThrown() throws HieroException { Exception exception = assertThrows(HieroException.class, () -> accountClientImpl.createAccount(initialBalance)); assertEquals("Transaction failed", exception.getMessage()); } + + + @Test + void DeleteAccount_throwsHieroException() throws HieroException { + Account mockAccount = mock(Account.class); + + doThrow(new HieroException("Deletion failed")).when(mockProtocolLayerClient) + .executeAccountDeleteTransaction(any(AccountDeleteRequest.class)); + + HieroException exception = assertThrows(HieroException.class, + () -> accountClientImpl.deleteAccount(mockAccount)); + assertEquals("Deletion failed", exception.getMessage()); + } + + @Test + void DeleteAccount_withSameFromAndToAccount_throwsIllegalArgumentException() { + // Arrange + Account account = mock(Account.class); + + // Act & Assert + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> + accountClientImpl.deleteAccount(account, account) + ); + + assertEquals("transferFoundsToAccount must be different from toDelete", exception.getMessage()); + } + + @Test + void DeleteAccount_nullAccount_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> accountClientImpl.deleteAccount(null)); + } + + @Test + void DeleteAccount_withTransfer_nullAccount_throwsNullPointerException() { + Account toAccount = mock(Account.class); + assertThrows(NullPointerException.class, () -> accountClientImpl.deleteAccount(null, toAccount)); + } + + @Test + void DeleteAccount_withSameAccount_throwsIllegalArgumentException() { + Account account = mock(Account.class); + assertThrows(IllegalArgumentException.class, () -> accountClientImpl.deleteAccount(account, account)); + } } \ No newline at end of file From 04049886b5ddf80d7e71338beb2bedaa499d0d97 Mon Sep 17 00:00:00 2001 From: Agaba Derrick Date: Wed, 21 May 2025 00:36:42 +0300 Subject: [PATCH 2/7] remove wildcards Signed-off-by: Agaba Derrick --- .../hiero/base/test/AccountClientImplTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java index 823ff1ee..be5fb35c 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java @@ -7,11 +7,15 @@ import com.openelements.hiero.base.HieroException; import com.openelements.hiero.base.protocol.data.*; import com.openelements.hiero.base.protocol.ProtocolLayerClient; -import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeEach;import com.openelements.hiero.base.protocol.data.*; import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatchers; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; @@ -158,10 +162,8 @@ void DeleteAccount_throwsHieroException() throws HieroException { @Test void DeleteAccount_withSameFromAndToAccount_throwsIllegalArgumentException() { - // Arrange Account account = mock(Account.class); - // Act & Assert IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> accountClientImpl.deleteAccount(account, account) ); From f2c37fe248243aa54b97f541adf91efaf1d2234a Mon Sep 17 00:00:00 2001 From: Agaba Derrick Date: Wed, 21 May 2025 02:16:57 +0300 Subject: [PATCH 3/7] fix imports Signed-off-by: Agaba Derrick --- .../com/openelements/hiero/base/test/AccountClientImplTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java index be5fb35c..e9248297 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java @@ -7,7 +7,7 @@ import com.openelements.hiero.base.HieroException; import com.openelements.hiero.base.protocol.data.*; import com.openelements.hiero.base.protocol.ProtocolLayerClient; -import org.junit.jupiter.api.BeforeEach;import com.openelements.hiero.base.protocol.data.*; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatchers; From a4e308c9de33d310e990ebd679ebb56652b592ee Mon Sep 17 00:00:00 2001 From: Agaba Derrick Date: Thu, 22 May 2025 22:09:55 +0300 Subject: [PATCH 4/7] Remove wild cards Signed-off-by: Agaba Derrick --- .../hiero/base/test/AccountClientImplTest.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java index e9248297..57dbae51 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java @@ -5,19 +5,25 @@ import com.openelements.hiero.base.data.Account; import com.hedera.hashgraph.sdk.Hbar; import com.openelements.hiero.base.HieroException; -import com.openelements.hiero.base.protocol.data.*; +import com.openelements.hiero.base.protocol.data.AccountCreateResult; +import com.openelements.hiero.base.protocol.data.AccountCreateRequest; +import com.openelements.hiero.base.protocol.data.AccountBalanceResponse; +import com.openelements.hiero.base.protocol.data.AccountBalanceRequest; +import com.openelements.hiero.base.protocol.data.AccountDeleteRequest; import com.openelements.hiero.base.protocol.ProtocolLayerClient; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatchers; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; - import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.times; public class AccountClientImplTest { @@ -35,7 +41,6 @@ public void testGetAccountBalance_ValidPositiveBalance() throws HieroException { AccountId accountId = AccountId.fromString("0.0.12345"); Hbar expectedBalance = new Hbar(10); - // Mock the response AccountBalanceResponse mockResponse = mock(AccountBalanceResponse.class); when(mockResponse.hbars()).thenReturn(expectedBalance); @@ -98,7 +103,6 @@ public void testGetAccountBalance_ProtocolLayerClientFails() throws HieroExcepti }); } - //tests for createAccount method @Test void testCreateAccount_successful() throws HieroException { Hbar initialBalance = Hbar.from(100); From abc64f0cfc932129b57774b8c9047eadcf54e78a Mon Sep 17 00:00:00 2001 From: Agaba Derrick Date: Mon, 2 Jun 2025 17:21:19 +0300 Subject: [PATCH 5/7] remove unwanted test commits Signed-off-by: Agaba Derrick --- .../base/test/AccountClientImplTest.java | 86 +++++++++++-------- 1 file changed, 52 insertions(+), 34 deletions(-) diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java index 57dbae51..13fa2793 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java @@ -1,24 +1,20 @@ package com.openelements.hiero.base.test; +import com.hedera.hashgraph.sdk.*; import com.openelements.hiero.base.implementation.AccountClientImpl; -import com.hedera.hashgraph.sdk.AccountId; import com.openelements.hiero.base.data.Account; -import com.hedera.hashgraph.sdk.Hbar; import com.openelements.hiero.base.HieroException; -import com.openelements.hiero.base.protocol.data.AccountCreateResult; -import com.openelements.hiero.base.protocol.data.AccountCreateRequest; -import com.openelements.hiero.base.protocol.data.AccountBalanceResponse; -import com.openelements.hiero.base.protocol.data.AccountBalanceRequest; -import com.openelements.hiero.base.protocol.data.AccountDeleteRequest; +import com.openelements.hiero.base.protocol.data.*; import com.openelements.hiero.base.protocol.ProtocolLayerClient; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatchers; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; + +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.Mockito.doThrow; @@ -153,42 +149,64 @@ void testCreateAccount_hieroExceptionThrown() throws HieroException { @Test - void DeleteAccount_throwsHieroException() throws HieroException { - Account mockAccount = mock(Account.class); - - doThrow(new HieroException("Deletion failed")).when(mockProtocolLayerClient) - .executeAccountDeleteTransaction(any(AccountDeleteRequest.class)); - - HieroException exception = assertThrows(HieroException.class, - () -> accountClientImpl.deleteAccount(mockAccount)); - assertEquals("Deletion failed", exception.getMessage()); + void DeleteAccount_nullAccount_throwsNullPointerException() { + assertThrows(NullPointerException.class, () -> accountClientImpl.deleteAccount(null)); } + @Test - void DeleteAccount_withSameFromAndToAccount_throwsIllegalArgumentException() { - Account account = mock(Account.class); + void DeleteAccount_successful() throws HieroException { + Account mockAccount = mock(Account.class); - IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> - accountClientImpl.deleteAccount(account, account) - ); + accountClientImpl.deleteAccount(mockAccount); - assertEquals("transferFoundsToAccount must be different from toDelete", exception.getMessage()); + verify(mockProtocolLayerClient, times(1)) + .executeAccountDeleteTransaction(any()); } + @Test - void DeleteAccount_nullAccount_throwsNullPointerException() { - assertThrows(NullPointerException.class, () -> accountClientImpl.deleteAccount(null)); + void DeleteAccount_withTransfer_nullFromAccount_throwsException() { + Account toAccount = mock(Account.class); + + assertThrows(NullPointerException.class, () -> { + accountClientImpl.deleteAccount(null, toAccount); + }); } @Test - void DeleteAccount_withTransfer_nullAccount_throwsNullPointerException() { - Account toAccount = mock(Account.class); - assertThrows(NullPointerException.class, () -> accountClientImpl.deleteAccount(null, toAccount)); + void deleteAccount_withNullToAccount_shouldNotThrow() { + AccountId accountId = AccountId.fromString("0.0.123"); + PrivateKey privateKey = PrivateKey.generate(); + Account fromAccount = new Account(accountId, privateKey.getPublicKey(), privateKey); + + assertDoesNotThrow(() -> accountClientImpl.deleteAccount(fromAccount, null), + "deleteAccount should not throw when toAccount is null (should fallback to operator)"); } @Test - void DeleteAccount_withSameAccount_throwsIllegalArgumentException() { - Account account = mock(Account.class); - assertThrows(IllegalArgumentException.class, () -> accountClientImpl.deleteAccount(account, account)); + void deleteAccount_withTransfer_throwsHieroException() throws HieroException { + PrivateKey fromPrivateKey = PrivateKey.generate(); + PublicKey fromPublicKey = fromPrivateKey.getPublicKey(); + AccountId fromAccountId = AccountId.fromString("0.0.1234"); + + PrivateKey toPrivateKey = PrivateKey.generate(); + PublicKey toPublicKey = toPrivateKey.getPublicKey(); + AccountId toAccountId = AccountId.fromString("0.0.5678"); + + Account fromAccount = new Account(fromAccountId, fromPublicKey, fromPrivateKey); + Account toAccount = new Account(toAccountId, toPublicKey, toPrivateKey); + + doThrow(new HieroException("Transfer deletion failed")) + .when(mockProtocolLayerClient) + .executeAccountDeleteTransaction(any()); + + HieroException exception = assertThrows(HieroException.class, () -> + accountClientImpl.deleteAccount(fromAccount, toAccount) + ); + + assertEquals("Transfer deletion failed", exception.getMessage()); + + verify(mockProtocolLayerClient, times(1)).executeAccountDeleteTransaction(any()); } } \ No newline at end of file From 6c6bdde65d5289c798c9a895f55b4b2db4cd7fd5 Mon Sep 17 00:00:00 2001 From: Agaba Derrick Date: Mon, 2 Jun 2025 17:41:41 +0300 Subject: [PATCH 6/7] Minor Clean Signed-off-by: Agaba Derrick --- .../hiero/base/test/AccountClientImplTest.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java index 13fa2793..a776035e 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java @@ -1,20 +1,21 @@ package com.openelements.hiero.base.test; -import com.hedera.hashgraph.sdk.*; +import com.hedera.hashgraph.sdk.AccountId; +import com.hedera.hashgraph.sdk.Hbar; +import com.hedera.hashgraph.sdk.PrivateKey; +import com.hedera.hashgraph.sdk.PublicKey; + import com.openelements.hiero.base.implementation.AccountClientImpl; import com.openelements.hiero.base.data.Account; import com.openelements.hiero.base.HieroException; import com.openelements.hiero.base.protocol.data.*; import com.openelements.hiero.base.protocol.ProtocolLayerClient; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatchers; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mockito.Mockito.doThrow; From 05f6ea0974f21af76befcb6c686bc5b95bf9e5f8 Mon Sep 17 00:00:00 2001 From: Agaba Derrick Date: Mon, 2 Jun 2025 17:50:06 +0300 Subject: [PATCH 7/7] Minor Clean Signed-off-by: Agaba Derrick --- .../hiero/base/test/AccountClientImplTest.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java index a776035e..86bb7f6c 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/AccountClientImplTest.java @@ -8,13 +8,20 @@ import com.openelements.hiero.base.implementation.AccountClientImpl; import com.openelements.hiero.base.data.Account; import com.openelements.hiero.base.HieroException; -import com.openelements.hiero.base.protocol.data.*; +import com.openelements.hiero.base.protocol.data.AccountBalanceRequest; +import com.openelements.hiero.base.protocol.data.AccountBalanceResponse; +import com.openelements.hiero.base.protocol.data.AccountCreateRequest; +import com.openelements.hiero.base.protocol.data.AccountCreateResult; import com.openelements.hiero.base.protocol.ProtocolLayerClient; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatchers; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when;