Skip to content

Commit 5ef3f78

Browse files
committed
Implemented tests for missing functionalities in FileClientImpl.updateFile()
Signed-off-by: Manish Dait <[email protected]>
1 parent bce1fb8 commit 5ef3f78

File tree

2 files changed

+154
-9
lines changed

2 files changed

+154
-9
lines changed

hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/FileClientImplTest.java

Lines changed: 100 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,12 @@
33
import com.hedera.hashgraph.sdk.FileId;
44
import com.openelements.hiero.base.HieroException;
55
import com.openelements.hiero.base.implementation.FileClientImpl;
6-
import com.openelements.hiero.base.protocol.FileCreateResult;
7-
import com.openelements.hiero.base.protocol.FileCreateRequest;
8-
import com.openelements.hiero.base.protocol.FileAppendRequest;
9-
import com.openelements.hiero.base.protocol.FileAppendResult;
10-
import com.openelements.hiero.base.protocol.FileInfoRequest;
11-
import com.openelements.hiero.base.protocol.FileInfoResponse;
12-
import com.openelements.hiero.base.protocol.ProtocolLayerClient;
6+
import com.openelements.hiero.base.protocol.*;
137
import org.junit.jupiter.api.Assertions;
148
import org.junit.jupiter.api.BeforeEach;
159
import org.junit.jupiter.api.Test;
1610
import org.mockito.Mockito;
11+
import org.mockito.internal.matchers.Null;
1712

1813
import java.time.Instant;
1914

@@ -120,6 +115,104 @@ void testCreateFileThrowsExceptionForNullContent() {
120115
Assertions.assertTrue(exception.getMessage().contains(message));
121116
}
122117

118+
@Test
119+
void testUpdateFile() throws HieroException {
120+
// mock
121+
final FileUpdateResult fileUpdateResult = Mockito.mock(FileUpdateResult.class);
122+
123+
// given
124+
final FileId fileId = FileId.fromString("1.2.3");
125+
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();
126+
127+
// then
128+
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
129+
.thenReturn(fileUpdateResult);
130+
131+
fileClientImpl.updateFile(fileId, updatedContent);
132+
133+
verify(protocolLayerClient, times(1))
134+
.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class));
135+
}
136+
137+
@Test
138+
void testUpdateFileForSizeGreaterThanFileCreateMaxSize() throws HieroException {
139+
// mock
140+
final FileUpdateResult fileUpdateResult = Mockito.mock(FileUpdateResult.class);
141+
final FileAppendResult fileAppendResult = Mockito.mock(FileAppendResult.class);
142+
143+
// given
144+
final FileId fileId = FileId.fromString("1.2.3");
145+
final byte[] updatedContent = new byte[FileCreateRequest.FILE_CREATE_MAX_SIZE * 2];
146+
// -1 because 1 for executeFileCreateTransaction()
147+
final int appendCount = Math.floorDiv(updatedContent.length, FileCreateRequest.FILE_CREATE_MAX_SIZE) - 1;
148+
149+
//then
150+
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
151+
.thenReturn(fileUpdateResult);
152+
when(protocolLayerClient.executeFileAppendRequestTransaction(any(FileAppendRequest.class)))
153+
.thenReturn(fileAppendResult);
154+
155+
fileClientImpl.updateFile(fileId, updatedContent);
156+
157+
verify(protocolLayerClient, times(1))
158+
.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class));
159+
verify(protocolLayerClient, times(appendCount))
160+
.executeFileAppendRequestTransaction(any(FileAppendRequest.class));
161+
}
162+
163+
@Test
164+
void testUpdateFileThrowsExceptionForInvalidFileId() throws HieroException {
165+
final String message = "Failed to execute transaction of type FileUpdateTransaction";
166+
167+
// given
168+
final FileId fileId = FileId.fromString("1.2.3");
169+
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();
170+
171+
// then
172+
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
173+
.thenThrow(new HieroException(message));
174+
175+
final HieroException exception = Assertions.assertThrows(
176+
HieroException.class, () -> fileClientImpl.updateFile(fileId, updatedContent)
177+
);
178+
Assertions.assertTrue(exception.getMessage().contains(message));
179+
}
180+
181+
@Test
182+
void testUpdateFileThrowsExceptionForSizeGreaterThanMaxFileSize() {
183+
final String message = "File contents must be less than " + FileCreateRequest.FILE_MAX_SIZE + " bytes";
184+
185+
// given
186+
final FileId fileId = FileId.fromString("1.2.3");
187+
final byte[] updatedContent = new byte[FileCreateRequest.FILE_MAX_SIZE + 1];
188+
189+
// then
190+
final HieroException exception = Assertions.assertThrows(
191+
HieroException.class, () -> fileClientImpl.updateFile(fileId, updatedContent)
192+
);
193+
Assertions.assertTrue(exception.getMessage().contains(message));
194+
}
195+
196+
@Test
197+
void testUpdateFileThrowsExceptionForNullArguments() {
198+
// given
199+
final FileId fileId = FileId.fromString("1.2.3");
200+
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();
201+
202+
// then
203+
final NullPointerException nullContentException = Assertions.assertThrows(
204+
NullPointerException.class, () -> fileClientImpl.updateFile(fileId, null)
205+
);
206+
Assertions.assertTrue(nullContentException.getMessage().contains("content must not be null"));
207+
208+
final NullPointerException nullIdException = Assertions.assertThrows(
209+
NullPointerException.class, () -> fileClientImpl.updateFile(null, updatedContent)
210+
);
211+
Assertions.assertTrue(nullIdException.getMessage().contains("fileId must not be null"));
212+
213+
Assertions.assertThrows(NullPointerException.class, () -> fileClientImpl.updateFile(null, null));
214+
}
215+
123216
@Test
124217
void testGetFileSize() throws HieroException {
125218
// mocks

hiero-enterprise-spring/src/test/java/com/openelements/hiero/spring/test/FileClientTests.java

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
import com.hedera.hashgraph.sdk.FileId;
44
import com.openelements.hiero.base.FileClient;
55
import com.openelements.hiero.base.HieroException;
6+
7+
import java.io.File;
68
import java.time.Duration;
79
import java.time.Instant;
810
import java.time.temporal.ChronoUnit;
11+
import java.util.Arrays;
912
import java.util.stream.IntStream;
1013

1114
import com.openelements.hiero.base.protocol.FileCreateRequest;
@@ -147,9 +150,9 @@ void testDeleteFileByFileId() throws Exception {
147150
@Test
148151
void testUpdateFileByFileId() throws Exception {
149152
//given
150-
final byte[] contents = "Hello, Hedera!".getBytes();
153+
final byte[] contents = "Hello, Hiero!".getBytes();
151154
final FileId fileId = fileClient.createFile(contents);
152-
final String newContent = "Hello, Hedera! Updated";
155+
final String newContent = "Hello, Hiero! Updated";
153156

154157
//when
155158
fileClient.updateFile(fileId, newContent.getBytes());
@@ -159,6 +162,55 @@ void testUpdateFileByFileId() throws Exception {
159162
Assertions.assertArrayEquals(newContent.getBytes(), readContents);
160163
}
161164

165+
@Test
166+
void testUpdateFileForSizeGreaterThanCreateFileSize() throws HieroException {
167+
// given
168+
final byte[] contents = "Hello, Hiero!".getBytes();
169+
final FileId fileId = fileClient.createFile(contents);
170+
final byte[] updatedContent = new byte[FileCreateRequest.FILE_CREATE_MAX_SIZE * 2];
171+
172+
// when
173+
fileClient.updateFile(fileId, updatedContent);
174+
175+
// then
176+
final byte[] readContent = fileClient.readFile(fileId);
177+
Assertions.assertArrayEquals(updatedContent, readContent);
178+
}
179+
180+
@Test
181+
void testUpdateFileThrowExceptionForInvalidFileId() {
182+
// given
183+
final FileId fileId = FileId.fromString("1.2.3");
184+
final byte[] updatedContent = "Hello, Hiero! Update".getBytes();
185+
186+
// then
187+
Assertions.assertThrows(HieroException.class, () -> fileClient.updateFile(fileId, updatedContent));
188+
}
189+
190+
@Test
191+
void testUpdateFileThrowExceptionIfSizeExceedMaxSize() throws HieroException {
192+
// given
193+
final byte[] contents = "Hello, Hiero!".getBytes();
194+
final FileId fileId = fileClient.createFile(contents);
195+
final byte[] updatedContent = new byte[FileCreateRequest.FILE_MAX_SIZE + 1];
196+
197+
// then
198+
Assertions.assertThrows(HieroException.class, () -> fileClient.updateFile(fileId, updatedContent));
199+
}
200+
201+
@Test
202+
void testUpdateFileThrowsErrorForNullValues() throws HieroException {
203+
// given
204+
final byte[] contents = "Hello, Hiero!".getBytes();
205+
final FileId fileId = fileClient.createFile(contents);
206+
final byte[] updatedContent = "Hello, Hiero! Update".getBytes();
207+
208+
// then
209+
Assertions.assertThrows(NullPointerException.class, () -> fileClient.updateFile(fileId, null));
210+
Assertions.assertThrows(NullPointerException.class, () -> fileClient.updateFile(null, updatedContent));
211+
Assertions.assertThrows(NullPointerException.class, () -> fileClient.updateFile(null, null));
212+
}
213+
162214
@Test
163215
void testDeleteFileByStringId() throws Exception {
164216
//given

0 commit comments

Comments
 (0)