From 3a1a22c928edc087d64459059be6064617aebfb0 Mon Sep 17 00:00:00 2001 From: Atwijukire Ariho Seth Date: Mon, 26 May 2025 11:36:24 +0100 Subject: [PATCH 1/5] tests for functionality of SmartContractClientImpl.createContract Signed-off-by: Atwijukire Ariho Seth --- .../openelements/hiero/base/IFileReader.java | 8 + .../SmartContractClientImpl.java | 7 +- .../base/implementation/SystemFileReader.java | 14 ++ .../test/SmartContractClientImplTest.java | 187 ++++++++++++++++++ .../hiero/microprofile/ClientProvider.java | 11 +- .../HieroAutoConfiguration.java | 12 +- 6 files changed, 220 insertions(+), 19 deletions(-) create mode 100644 hiero-enterprise-base/src/main/java/com/openelements/hiero/base/IFileReader.java create mode 100644 hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SystemFileReader.java create mode 100644 hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/IFileReader.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/IFileReader.java new file mode 100644 index 00000000..2ee3c9dc --- /dev/null +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/IFileReader.java @@ -0,0 +1,8 @@ +package com.openelements.hiero.base; + +import java.io.IOException; +import java.nio.file.Path; + +public interface IFileReader { + byte[] readAllBytes(Path path) throws IOException; +} diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SmartContractClientImpl.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SmartContractClientImpl.java index 7012a9b4..ea3951fc 100644 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SmartContractClientImpl.java +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SmartContractClientImpl.java @@ -5,6 +5,7 @@ import com.hedera.hashgraph.sdk.FileId; import com.openelements.hiero.base.FileClient; import com.openelements.hiero.base.HieroException; +import com.openelements.hiero.base.IFileReader; import com.openelements.hiero.base.SmartContractClient; import com.openelements.hiero.base.data.ContractCallResult; import com.openelements.hiero.base.data.ContractParam; @@ -28,10 +29,12 @@ public class SmartContractClientImpl implements SmartContractClient { private final ProtocolLayerClient protocolLayerClient; private final FileClient fileClient; + private final IFileReader fileReader; - public SmartContractClientImpl(@NonNull final ProtocolLayerClient protocolLayerClient, FileClient fileClient) { + public SmartContractClientImpl(@NonNull final ProtocolLayerClient protocolLayerClient, FileClient fileClient, IFileReader fileReader) { this.protocolLayerClient = Objects.requireNonNull(protocolLayerClient, "protocolLevelClient must not be null"); this.fileClient = Objects.requireNonNull(fileClient, "fileClient must not be null"); + this.fileReader = Objects.requireNonNull(fileReader, "fileReader must not be null"); } @NonNull @@ -74,7 +77,7 @@ public ContractId createContract(@NonNull final Path pathToBin, @Nullable final ContractParam... constructorParams) throws HieroException { try { - final byte[] bytes = Files.readAllBytes(pathToBin); + final byte[] bytes = fileReader.readAllBytes(pathToBin); return createContract(bytes, constructorParams); } catch (Exception e) { throw new HieroException("Failed to create contract from path " + pathToBin, e); diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SystemFileReader.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SystemFileReader.java new file mode 100644 index 00000000..8544975f --- /dev/null +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SystemFileReader.java @@ -0,0 +1,14 @@ +package com.openelements.hiero.base.implementation; + +import com.openelements.hiero.base.IFileReader; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class SystemFileReader implements IFileReader { + @Override + public byte[] readAllBytes(Path path) throws IOException { + return Files.readAllBytes(path); + } +} diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java new file mode 100644 index 00000000..bf9ce8e6 --- /dev/null +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java @@ -0,0 +1,187 @@ +package com.openelements.hiero.base.test; + +import com.hedera.hashgraph.sdk.ContractId; +import com.hedera.hashgraph.sdk.FileId; +import com.openelements.hiero.base.FileClient; +import com.openelements.hiero.base.HieroException; +import com.openelements.hiero.base.IFileReader; +import com.openelements.hiero.base.data.ContractParam; +import com.openelements.hiero.base.implementation.SmartContractClientImpl; +import com.openelements.hiero.base.protocol.ProtocolLayerClient; +import com.openelements.hiero.base.protocol.data.ContractCreateRequest; +import com.openelements.hiero.base.protocol.data.ContractCreateResult; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; + +import java.io.IOException; +import java.nio.file.Path; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + + +public class SmartContractClientImplTest { + + @Mock + private FileClient fileClient; + + @Mock + private ProtocolLayerClient protocolLayerClient; + + @Mock + private IFileReader fileReader; + + @InjectMocks + private SmartContractClientImpl smartContractClient; + + private ContractId returnedContractId; + + private ContractId contractId; + + private FileId fileId; + + private ContractParam constructorParams; + + private ContractCreateResult resultMock; + + private Path path; + + private byte[] contents; + + + @BeforeEach + public void init() throws IOException { + fileClient = Mockito.mock(FileClient.class); + protocolLayerClient = Mockito.mock(ProtocolLayerClient.class); + fileReader= Mockito.mock(IFileReader.class); + smartContractClient = Mockito.spy(new SmartContractClientImpl(protocolLayerClient, fileClient, fileReader)); + contractId = ContractId.fromString("0.0.123"); + fileId = FileId.fromString("0.0.123"); + constructorParams = ContractParam.string("paramValue"); + resultMock = Mockito.mock(ContractCreateResult.class); + path= Mockito.mock(Path.class); + contents = "contractBytecode".getBytes(); + + + } + + @Test + public void testCreateContract_UsingFileId_WithContractParams() throws HieroException { + + when(resultMock.contractId()).thenReturn(contractId); + when(protocolLayerClient.executeContractCreateTransaction(any(ContractCreateRequest.class))).thenReturn(resultMock); + + returnedContractId = smartContractClient.createContract(fileId, constructorParams); + + assertEquals(contractId, returnedContractId); + verify(protocolLayerClient).executeContractCreateTransaction(any()); + + } + + @Test + public void testCreateContract_UsingFileId_WithOutContractParams() throws HieroException { + + when(resultMock.contractId()).thenReturn(contractId); + when(protocolLayerClient.executeContractCreateTransaction(any(ContractCreateRequest.class))).thenReturn(resultMock); + + returnedContractId = smartContractClient.createContract(fileId); + + assertEquals(contractId, returnedContractId); + verify(protocolLayerClient).executeContractCreateTransaction(any()); + } + + @Test + public void testCreateContract_UsingFileId_ThrowsException() throws HieroException { + + when(protocolLayerClient.executeContractCreateTransaction(Mockito.any())).thenThrow(new RuntimeException("Failed")); + HieroException hieroException = assertThrows(HieroException.class, () -> smartContractClient.createContract(fileId, constructorParams)); + + assertTrue(hieroException.getMessage().contains("Failed to create contract with fileId " + fileId)); + } + + @Test + public void testCreateContract_UsingContent_WithContractParams() throws HieroException { + + when(fileClient.createFile(contents)).thenReturn(fileId); + when(protocolLayerClient.executeContractCreateTransaction(any(ContractCreateRequest.class))).thenReturn(resultMock); + when(resultMock.contractId()).thenReturn(contractId); + + returnedContractId = smartContractClient.createContract(contents, constructorParams); + + assertEquals(contractId, returnedContractId); + verify(fileClient).createFile(contents); + verify(protocolLayerClient).executeContractCreateTransaction(any()); + verify(fileClient).deleteFile(fileId); + + } + + @Test + public void testCreateContract_UsingContent_WithOutContractParams() throws HieroException { + + when(fileClient.createFile(contents)).thenReturn(fileId); + when(protocolLayerClient.executeContractCreateTransaction(any(ContractCreateRequest.class))).thenReturn(resultMock); + when(resultMock.contractId()).thenReturn(contractId); + + returnedContractId = smartContractClient.createContract(contents); + + assertEquals(contractId, returnedContractId); + verify(fileClient).createFile(contents); + verify(protocolLayerClient).executeContractCreateTransaction(any()); + verify(fileClient).deleteFile(fileId); + } + + @Test + public void testCreateContract_UsingContent_ThrowsException() throws HieroException { + when(protocolLayerClient.executeContractCreateTransaction(Mockito.any())).thenThrow(new RuntimeException("Failed")); + HieroException hieroException = assertThrows(HieroException.class, () -> smartContractClient.createContract(contents, constructorParams)); + + assertTrue(hieroException.getMessage().contains("Failed to create contract out of byte array")); + + } + + @Test + public void testCreateContract_UsingPath_WithContractParams() throws HieroException, IOException { + + when(fileReader.readAllBytes(path)).thenReturn(contents); + doReturn(contractId).when(smartContractClient).createContract(contents, constructorParams); + + returnedContractId = smartContractClient.createContract(path, constructorParams); + + assertNotNull(returnedContractId); + assertEquals(contractId, returnedContractId); + + verify(fileReader).readAllBytes(path); + verify(smartContractClient).createContract(contents, constructorParams); + + + } + + @Test + public void testCreateContract_UsingPath_WithOutContractParams() throws HieroException, IOException { + when(fileReader.readAllBytes(path)).thenReturn(contents); + doReturn(contractId).when(smartContractClient).createContract(contents); + + returnedContractId = smartContractClient.createContract(path); + + assertNotNull(returnedContractId); + assertEquals(contractId, returnedContractId); + + verify(fileReader).readAllBytes(path); + verify(smartContractClient).createContract(contents); + + } + + @Test + public void testCreateContract_UsingPath_ThrowsException() throws HieroException { + when(protocolLayerClient.executeContractCreateTransaction(Mockito.any())).thenThrow(new RuntimeException("Failed")); + HieroException hieroException = assertThrows(HieroException.class, () -> smartContractClient.createContract(path, constructorParams)); + + assertTrue(hieroException.getMessage().contains("Failed to create contract from path " + path)); + + } + +} \ No newline at end of file diff --git a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java index 8ed8ea38..36f14867 100644 --- a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java +++ b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java @@ -1,11 +1,6 @@ package com.openelements.hiero.microprofile; -import com.openelements.hiero.base.AccountClient; -import com.openelements.hiero.base.FileClient; -import com.openelements.hiero.base.FungibleTokenClient; -import com.openelements.hiero.base.HieroContext; -import com.openelements.hiero.base.NftClient; -import com.openelements.hiero.base.SmartContractClient; +import com.openelements.hiero.base.*; import com.openelements.hiero.base.config.HieroConfig; import com.openelements.hiero.base.implementation.AccountClientImpl; import com.openelements.hiero.base.implementation.AccountRepositoryImpl; @@ -79,8 +74,8 @@ FileClient createFileClient(@NonNull final ProtocolLayerClient protocolLayerClie @Produces @ApplicationScoped SmartContractClient createSmartContractClient(@NonNull final ProtocolLayerClient protocolLayerClient, - @NonNull final FileClient fileClient) { - return new SmartContractClientImpl(protocolLayerClient, fileClient); + @NonNull final FileClient fileClient, @NonNull IFileReader fileReader) { + return new SmartContractClientImpl(protocolLayerClient, fileClient, fileReader); } @NonNull diff --git a/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java b/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java index 35879b71..7c9e151a 100644 --- a/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java +++ b/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java @@ -1,12 +1,6 @@ package com.openelements.hiero.spring.implementation; -import com.openelements.hiero.base.AccountClient; -import com.openelements.hiero.base.FileClient; -import com.openelements.hiero.base.FungibleTokenClient; -import com.openelements.hiero.base.HieroContext; -import com.openelements.hiero.base.NftClient; -import com.openelements.hiero.base.SmartContractClient; -import com.openelements.hiero.base.TopicClient; +import com.openelements.hiero.base.*; import com.openelements.hiero.base.config.HieroConfig; import com.openelements.hiero.base.implementation.AccountClientImpl; import com.openelements.hiero.base.implementation.AccountRepositoryImpl; @@ -81,8 +75,8 @@ FileClient fileClient(final ProtocolLayerClient protocolLayerClient) { } @Bean - SmartContractClient smartContractClient(final ProtocolLayerClient protocolLayerClient, FileClient fileClient) { - return new SmartContractClientImpl(protocolLayerClient, fileClient); + SmartContractClient smartContractClient(final ProtocolLayerClient protocolLayerClient, FileClient fileClient, IFileReader fileReader) { + return new SmartContractClientImpl(protocolLayerClient, fileClient, fileReader); } @Bean From 17b2a4cb451e8d11ebb8586da0be7c79f7f647fe Mon Sep 17 00:00:00 2001 From: Atwijukire Ariho Seth Date: Sat, 31 May 2025 22:48:10 +0100 Subject: [PATCH 2/5] tests for functionality of SmartContractClientImpl.createContract Signed-off-by: Atwijukire Ariho Seth --- .../openelements/hiero/base/IFileReader.java | 8 --- .../SmartContractClientImpl.java | 7 +-- .../base/implementation/SystemFileReader.java | 14 ----- .../test/SmartContractClientImplTest.java | 58 ++++++++++--------- .../hiero/microprofile/ClientProvider.java | 4 +- .../HieroAutoConfiguration.java | 4 +- 6 files changed, 37 insertions(+), 58 deletions(-) delete mode 100644 hiero-enterprise-base/src/main/java/com/openelements/hiero/base/IFileReader.java delete mode 100644 hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SystemFileReader.java diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/IFileReader.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/IFileReader.java deleted file mode 100644 index 2ee3c9dc..00000000 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/IFileReader.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.openelements.hiero.base; - -import java.io.IOException; -import java.nio.file.Path; - -public interface IFileReader { - byte[] readAllBytes(Path path) throws IOException; -} diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SmartContractClientImpl.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SmartContractClientImpl.java index ea3951fc..7012a9b4 100644 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SmartContractClientImpl.java +++ b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SmartContractClientImpl.java @@ -5,7 +5,6 @@ import com.hedera.hashgraph.sdk.FileId; import com.openelements.hiero.base.FileClient; import com.openelements.hiero.base.HieroException; -import com.openelements.hiero.base.IFileReader; import com.openelements.hiero.base.SmartContractClient; import com.openelements.hiero.base.data.ContractCallResult; import com.openelements.hiero.base.data.ContractParam; @@ -29,12 +28,10 @@ public class SmartContractClientImpl implements SmartContractClient { private final ProtocolLayerClient protocolLayerClient; private final FileClient fileClient; - private final IFileReader fileReader; - public SmartContractClientImpl(@NonNull final ProtocolLayerClient protocolLayerClient, FileClient fileClient, IFileReader fileReader) { + public SmartContractClientImpl(@NonNull final ProtocolLayerClient protocolLayerClient, FileClient fileClient) { this.protocolLayerClient = Objects.requireNonNull(protocolLayerClient, "protocolLevelClient must not be null"); this.fileClient = Objects.requireNonNull(fileClient, "fileClient must not be null"); - this.fileReader = Objects.requireNonNull(fileReader, "fileReader must not be null"); } @NonNull @@ -77,7 +74,7 @@ public ContractId createContract(@NonNull final Path pathToBin, @Nullable final ContractParam... constructorParams) throws HieroException { try { - final byte[] bytes = fileReader.readAllBytes(pathToBin); + final byte[] bytes = Files.readAllBytes(pathToBin); return createContract(bytes, constructorParams); } catch (Exception e) { throw new HieroException("Failed to create contract from path " + pathToBin, e); diff --git a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SystemFileReader.java b/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SystemFileReader.java deleted file mode 100644 index 8544975f..00000000 --- a/hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/SystemFileReader.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.openelements.hiero.base.implementation; - -import com.openelements.hiero.base.IFileReader; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; - -public class SystemFileReader implements IFileReader { - @Override - public byte[] readAllBytes(Path path) throws IOException { - return Files.readAllBytes(path); - } -} diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java index bf9ce8e6..0236652b 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java @@ -4,12 +4,12 @@ import com.hedera.hashgraph.sdk.FileId; import com.openelements.hiero.base.FileClient; import com.openelements.hiero.base.HieroException; -import com.openelements.hiero.base.IFileReader; import com.openelements.hiero.base.data.ContractParam; import com.openelements.hiero.base.implementation.SmartContractClientImpl; import com.openelements.hiero.base.protocol.ProtocolLayerClient; import com.openelements.hiero.base.protocol.data.ContractCreateRequest; import com.openelements.hiero.base.protocol.data.ContractCreateResult; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -17,6 +17,7 @@ import org.mockito.Mockito; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import static org.junit.jupiter.api.Assertions.*; @@ -32,9 +33,6 @@ public class SmartContractClientImplTest { @Mock private ProtocolLayerClient protocolLayerClient; - @Mock - private IFileReader fileReader; - @InjectMocks private SmartContractClientImpl smartContractClient; @@ -48,7 +46,7 @@ public class SmartContractClientImplTest { private ContractCreateResult resultMock; - private Path path; + private Path tempPath; private byte[] contents; @@ -57,16 +55,20 @@ public class SmartContractClientImplTest { public void init() throws IOException { fileClient = Mockito.mock(FileClient.class); protocolLayerClient = Mockito.mock(ProtocolLayerClient.class); - fileReader= Mockito.mock(IFileReader.class); - smartContractClient = Mockito.spy(new SmartContractClientImpl(protocolLayerClient, fileClient, fileReader)); + smartContractClient = Mockito.spy(new SmartContractClientImpl(protocolLayerClient, fileClient)); contractId = ContractId.fromString("0.0.123"); fileId = FileId.fromString("0.0.123"); constructorParams = ContractParam.string("paramValue"); resultMock = Mockito.mock(ContractCreateResult.class); - path= Mockito.mock(Path.class); + tempPath= Files.createTempFile("testContract", ".bin"); contents = "contractBytecode".getBytes(); + Files.write(tempPath, contents); + } + @AfterEach + public void doCleanUp() throws IOException{ + Files.deleteIfExists(tempPath); } @Test @@ -104,7 +106,7 @@ public void testCreateContract_UsingFileId_ThrowsException() throws HieroExcepti } @Test - public void testCreateContract_UsingContent_WithContractParams() throws HieroException { + public void testCreateContract_UsingContents_WithContractParams() throws HieroException { when(fileClient.createFile(contents)).thenReturn(fileId); when(protocolLayerClient.executeContractCreateTransaction(any(ContractCreateRequest.class))).thenReturn(resultMock); @@ -113,6 +115,7 @@ public void testCreateContract_UsingContent_WithContractParams() throws HieroExc returnedContractId = smartContractClient.createContract(contents, constructorParams); assertEquals(contractId, returnedContractId); + verify(fileClient).createFile(contents); verify(protocolLayerClient).executeContractCreateTransaction(any()); verify(fileClient).deleteFile(fileId); @@ -120,7 +123,7 @@ public void testCreateContract_UsingContent_WithContractParams() throws HieroExc } @Test - public void testCreateContract_UsingContent_WithOutContractParams() throws HieroException { + public void testCreateContract_UsingContents_WithOutContractParams() throws HieroException { when(fileClient.createFile(contents)).thenReturn(fileId); when(protocolLayerClient.executeContractCreateTransaction(any(ContractCreateRequest.class))).thenReturn(resultMock); @@ -129,13 +132,14 @@ public void testCreateContract_UsingContent_WithOutContractParams() throws Hiero returnedContractId = smartContractClient.createContract(contents); assertEquals(contractId, returnedContractId); + verify(fileClient).createFile(contents); verify(protocolLayerClient).executeContractCreateTransaction(any()); verify(fileClient).deleteFile(fileId); } @Test - public void testCreateContract_UsingContent_ThrowsException() throws HieroException { + public void testCreateContract_UsingContents_ThrowsException() throws HieroException { when(protocolLayerClient.executeContractCreateTransaction(Mockito.any())).thenThrow(new RuntimeException("Failed")); HieroException hieroException = assertThrows(HieroException.class, () -> smartContractClient.createContract(contents, constructorParams)); @@ -146,42 +150,42 @@ public void testCreateContract_UsingContent_ThrowsException() throws HieroExcept @Test public void testCreateContract_UsingPath_WithContractParams() throws HieroException, IOException { - when(fileReader.readAllBytes(path)).thenReturn(contents); - doReturn(contractId).when(smartContractClient).createContract(contents, constructorParams); + when(fileClient.createFile(contents)).thenReturn(fileId); + when(protocolLayerClient.executeContractCreateTransaction(any(ContractCreateRequest.class))).thenReturn(resultMock); + when(resultMock.contractId()).thenReturn(contractId); - returnedContractId = smartContractClient.createContract(path, constructorParams); + returnedContractId= smartContractClient.createContract(Files.readAllBytes(tempPath), constructorParams); assertNotNull(returnedContractId); assertEquals(contractId, returnedContractId); - verify(fileReader).readAllBytes(path); - verify(smartContractClient).createContract(contents, constructorParams); - + verify(fileClient).createFile(contents); + verify(protocolLayerClient).executeContractCreateTransaction(any(ContractCreateRequest.class)); + verify(fileClient).deleteFile(fileId); } @Test public void testCreateContract_UsingPath_WithOutContractParams() throws HieroException, IOException { - when(fileReader.readAllBytes(path)).thenReturn(contents); - doReturn(contractId).when(smartContractClient).createContract(contents); + when(fileClient.createFile(contents)).thenReturn(fileId); + when(protocolLayerClient.executeContractCreateTransaction(any(ContractCreateRequest.class))).thenReturn(resultMock); + when(resultMock.contractId()).thenReturn(contractId); - returnedContractId = smartContractClient.createContract(path); + returnedContractId= smartContractClient.createContract(Files.readAllBytes(tempPath)); assertNotNull(returnedContractId); assertEquals(contractId, returnedContractId); - verify(fileReader).readAllBytes(path); - verify(smartContractClient).createContract(contents); - + verify(fileClient).createFile(contents); + verify(protocolLayerClient).executeContractCreateTransaction(any(ContractCreateRequest.class)); + verify(fileClient).deleteFile(fileId); } @Test public void testCreateContract_UsingPath_ThrowsException() throws HieroException { when(protocolLayerClient.executeContractCreateTransaction(Mockito.any())).thenThrow(new RuntimeException("Failed")); - HieroException hieroException = assertThrows(HieroException.class, () -> smartContractClient.createContract(path, constructorParams)); - - assertTrue(hieroException.getMessage().contains("Failed to create contract from path " + path)); + HieroException hieroException = assertThrows(HieroException.class, () -> smartContractClient.createContract(tempPath, constructorParams)); + assertTrue(hieroException.getMessage().contains("Failed to create contract from path " + tempPath)); } - } \ No newline at end of file diff --git a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java index 36f14867..1a4920d2 100644 --- a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java +++ b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java @@ -74,8 +74,8 @@ FileClient createFileClient(@NonNull final ProtocolLayerClient protocolLayerClie @Produces @ApplicationScoped SmartContractClient createSmartContractClient(@NonNull final ProtocolLayerClient protocolLayerClient, - @NonNull final FileClient fileClient, @NonNull IFileReader fileReader) { - return new SmartContractClientImpl(protocolLayerClient, fileClient, fileReader); + @NonNull final FileClient fileClient) { + return new SmartContractClientImpl(protocolLayerClient, fileClient); } @NonNull diff --git a/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java b/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java index 7c9e151a..d9cf48dd 100644 --- a/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java +++ b/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java @@ -75,8 +75,8 @@ FileClient fileClient(final ProtocolLayerClient protocolLayerClient) { } @Bean - SmartContractClient smartContractClient(final ProtocolLayerClient protocolLayerClient, FileClient fileClient, IFileReader fileReader) { - return new SmartContractClientImpl(protocolLayerClient, fileClient, fileReader); + SmartContractClient smartContractClient(final ProtocolLayerClient protocolLayerClient, FileClient fileClient) { + return new SmartContractClientImpl(protocolLayerClient, fileClient); } @Bean From ef67c6784de501ca3eaf2a4e865bce245b623ab3 Mon Sep 17 00:00:00 2001 From: Atwijukire Ariho Seth <120330466+Ariho-Seth@users.noreply.github.com> Date: Thu, 26 Jun 2025 11:16:23 +0100 Subject: [PATCH 3/5] Requested changes added Signed-off-by: Atwijukire Ariho Seth <120330466+Ariho-Seth@users.noreply.github.com> --- .../hiero/base/test/SmartContractClientImplTest.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java index 0236652b..04cd5363 100644 --- a/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java +++ b/hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/SmartContractClientImplTest.java @@ -20,9 +20,13 @@ import java.nio.file.Files; import java.nio.file.Path; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.verify; public class SmartContractClientImplTest { @@ -188,4 +192,4 @@ public void testCreateContract_UsingPath_ThrowsException() throws HieroException assertTrue(hieroException.getMessage().contains("Failed to create contract from path " + tempPath)); } -} \ No newline at end of file +} From 5e08103ff5fb11e7af56724c75effe4823486a94 Mon Sep 17 00:00:00 2001 From: Atwijukire Ariho Seth <120330466+Ariho-Seth@users.noreply.github.com> Date: Thu, 26 Jun 2025 11:21:41 +0100 Subject: [PATCH 4/5] Requested changes added Signed-off-by: Atwijukire Ariho Seth <120330466+Ariho-Seth@users.noreply.github.com> --- .../openelements/hiero/microprofile/ClientProvider.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java index 1a4920d2..c5a55bbf 100644 --- a/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java +++ b/hiero-enterprise-microprofile/src/main/java/com/openelements/hiero/microprofile/ClientProvider.java @@ -1,6 +1,11 @@ package com.openelements.hiero.microprofile; -import com.openelements.hiero.base.*; +import com.openelements.hiero.base.FileClient; +import com.openelements.hiero.base.FungibleTokenClient; +import com.openelements.hiero.base.HieroContext; +import com.openelements.hiero.base.NftClient; +import com.openelements.hiero.base.SmartContractClient; +import com.openelements.hiero.base.AccountClient; import com.openelements.hiero.base.config.HieroConfig; import com.openelements.hiero.base.implementation.AccountClientImpl; import com.openelements.hiero.base.implementation.AccountRepositoryImpl; From 32f81ae171f788ea4e70fe71d8a38b06fe618673 Mon Sep 17 00:00:00 2001 From: Atwijukire Ariho Seth <120330466+Ariho-Seth@users.noreply.github.com> Date: Thu, 26 Jun 2025 15:22:52 +0100 Subject: [PATCH 5/5] Requested changes added Signed-off-by: Atwijukire Ariho Seth <120330466+Ariho-Seth@users.noreply.github.com> --- .../spring/implementation/HieroAutoConfiguration.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java b/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java index d9cf48dd..16a520e3 100644 --- a/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java +++ b/hiero-enterprise-spring/src/main/java/com/openelements/hiero/spring/implementation/HieroAutoConfiguration.java @@ -1,6 +1,12 @@ package com.openelements.hiero.spring.implementation; -import com.openelements.hiero.base.*; +import com.openelements.hiero.base.AccountClient; +import com.openelements.hiero.base.FungibleTokenClient; +import com.openelements.hiero.base.SmartContractClient; +import com.openelements.hiero.base.FileClient; +import com.openelements.hiero.base.HieroContext; +import com.openelements.hiero.base.NftClient; +import com.openelements.hiero.base.TopicClient; import com.openelements.hiero.base.config.HieroConfig; import com.openelements.hiero.base.implementation.AccountClientImpl; import com.openelements.hiero.base.implementation.AccountRepositoryImpl;