From 75f6c2a84c56e9ff5ea4bf71b35905cf0b639b12 Mon Sep 17 00:00:00 2001 From: Lemeri123 <132246079+Lemeri123@users.noreply.github.com> Date: Thu, 19 Dec 2024 09:06:58 +0300 Subject: [PATCH 1/2] Implemented tests for createAccount method Signed-off-by: Lemeri123 <132246079+Lemeri123@users.noreply.github.com> --- .../implementation/AccountClientImpl.java | 19 ++++++- .../base/test/AccountClientImplTest.java | 55 ++++++++++++++++++- 2 files changed, 70 insertions(+), 4 deletions(-) diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java index 7ddb646b..cff23c5b 100644 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java @@ -24,10 +24,23 @@ public AccountClientImpl(@NonNull final ProtocolLayerClient client) { @NonNull @Override public Account createAccount(@NonNull Hbar initialBalance) throws HieroException { - final AccountCreateRequest request = AccountCreateRequest.of(initialBalance); - final AccountCreateResult result = client.executeAccountCreateTransaction(request); - return result.newAccount(); + if (initialBalance == null) { + throw new NullPointerException("initialBalance must not be null"); + } + + if (initialBalance.toTinybars() < 0) { + throw new HieroException("Invalid initial balance: must be non-negative"); + } + + try { + final AccountCreateRequest request = AccountCreateRequest.of(initialBalance); + final AccountCreateResult result = client.executeAccountCreateTransaction(request); + return result.newAccount(); + } catch (IllegalArgumentException e) { + throw new HieroException("Invalid initial balance: " + e.getMessage(), e); + } } + @Override public void deleteAccount(@NonNull Account account) throws HieroException { 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 b9898428..5596276c 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 @@ -2,16 +2,20 @@ 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.AccountBalanceRequest; import com.openelements.hiero.base.protocol.AccountBalanceResponse; +import com.openelements.hiero.base.protocol.AccountCreateRequest; +import com.openelements.hiero.base.protocol.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.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; public class AccountClientImplTest { @@ -92,4 +96,53 @@ public void testGetAccountBalance_ProtocolLayerClientFails() throws HieroExcepti accountClientImpl.getAccountBalance(accountId); }); } -} + +//tests for createAccount method + @Test + void testCreateAccount_successful() throws HieroException { + Hbar initialBalance = Hbar.from(100); + + AccountCreateResult mockResult = mock(AccountCreateResult.class); + Account mockAccount = mock(Account.class); + + when(mockAccount.accountId()).thenReturn(AccountId.fromString("0.0.12345")); + when(mockResult.newAccount()).thenReturn(mockAccount); + when(mockProtocolLayerClient.executeAccountCreateTransaction(any(AccountCreateRequest.class))) + .thenReturn(mockResult); + + Account result = accountClientImpl.createAccount(initialBalance); + + assertNotNull(result); + assertEquals(AccountId.fromString("0.0.12345"), result.accountId()); + verify(mockProtocolLayerClient, times(1)) + .executeAccountCreateTransaction(any(AccountCreateRequest.class)); + } + + @Test + void testCreateAccount_invalidInitialBalance_null() { + Hbar initialBalance = null; + + assertThrows(NullPointerException.class, () -> accountClientImpl.createAccount(initialBalance)); + } + + @Test + void testCreateAccount_invalidInitialBalance_negative() { + Hbar initialBalance = Hbar.from(-100); + HieroException exception = assertThrows(HieroException.class, + () -> accountClientImpl.createAccount(initialBalance)); + + assertTrue(exception.getMessage().contains("Invalid initial balance")); + } + + + @Test + void testCreateAccount_hieroExceptionThrown() throws HieroException { + Hbar initialBalance = Hbar.from(100); + + when(mockProtocolLayerClient.executeAccountCreateTransaction(any(AccountCreateRequest.class))) + .thenThrow(new HieroException("Transaction failed")); + + Exception exception = assertThrows(HieroException.class, () -> accountClientImpl.createAccount(initialBalance)); + assertEquals("Transaction failed", exception.getMessage()); + } +} \ No newline at end of file From 8184ecc865ff19d08ba0541a396d6c55f63b1b7f Mon Sep 17 00:00:00 2001 From: Hendrik Ebbers Date: Mon, 13 Jan 2025 13:42:53 +0100 Subject: [PATCH 2/2] Update hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java --- .../hiero/base/implementation/AccountClientImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java index cff23c5b..2031bc2d 100644 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/AccountClientImpl.java @@ -37,7 +37,7 @@ public Account createAccount(@NonNull Hbar initialBalance) throws HieroException final AccountCreateResult result = client.executeAccountCreateTransaction(request); return result.newAccount(); } catch (IllegalArgumentException e) { - throw new HieroException("Invalid initial balance: " + e.getMessage(), e); + throw new HieroException("Error while creating Account", e); } }