33import com .hedera .hashgraph .sdk .FileId ;
44import com .openelements .hiero .base .HieroException ;
55import 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 ;
610import com .openelements .hiero .base .protocol .FileInfoRequest ;
711import com .openelements .hiero .base .protocol .FileInfoResponse ;
812import com .openelements .hiero .base .protocol .ProtocolLayerClient ;
1115import org .junit .jupiter .api .Test ;
1216import org .mockito .Mockito ;
1317
18+ import java .time .Instant ;
19+
1420import static org .mockito .ArgumentMatchers .any ;
15- import static org .mockito .Mockito .*;
21+ import static org .mockito .Mockito .when ;
22+ import static org .mockito .Mockito .verify ;
23+ import static org .mockito .Mockito .times ;
1624
1725public class FileClientImplTest {
1826 ProtocolLayerClient protocolLayerClient ;
@@ -24,6 +32,94 @@ void setup() {
2432 fileClientImpl = new FileClientImpl (protocolLayerClient );
2533 }
2634
35+ @ Test
36+ void testCreateFile () throws HieroException {
37+ // mock
38+ final FileId fileId = FileId .fromString ("1.2.3" );
39+ final FileCreateResult fileCreateResult = Mockito .mock (FileCreateResult .class );
40+
41+ // given
42+ final byte [] content = "Hello Hiero!" .getBytes ();
43+
44+ //then
45+ when (protocolLayerClient .executeFileCreateTransaction (any (FileCreateRequest .class )))
46+ .thenReturn (fileCreateResult );
47+ when (fileCreateResult .fileId ()).thenReturn (fileId );
48+
49+ final FileId result = fileClientImpl .createFile (content );
50+
51+ verify (protocolLayerClient , times (1 ))
52+ .executeFileCreateTransaction (any (FileCreateRequest .class ));
53+ verify (fileCreateResult , times (1 )).fileId ();
54+ Assertions .assertEquals (fileId , result );
55+ }
56+
57+ @ Test
58+ void testCreateFileForSizeGreaterThanFileCreateMaxSize () throws HieroException {
59+ // mock
60+ final FileId fileId = FileId .fromString ("1.2.3" );
61+ final FileCreateResult fileCreateResult = Mockito .mock (FileCreateResult .class );
62+ final FileAppendResult fileAppendResult = Mockito .mock (FileAppendResult .class );
63+
64+ // given
65+ final byte [] content = new byte [FileCreateRequest .FILE_CREATE_MAX_SIZE * 2 ];
66+ // -1 because 1 for executeFileCreateTransaction()
67+ final int appendCount = Math .floorDiv (content .length , FileCreateRequest .FILE_CREATE_MAX_SIZE ) - 1 ;
68+
69+ //then
70+ when (protocolLayerClient .executeFileCreateTransaction (any (FileCreateRequest .class )))
71+ .thenReturn (fileCreateResult );
72+ when (fileCreateResult .fileId ()).thenReturn (fileId );
73+ when (protocolLayerClient .executeFileAppendRequestTransaction (any (FileAppendRequest .class )))
74+ .thenReturn (fileAppendResult );
75+
76+ final FileId result = fileClientImpl .createFile (content );
77+
78+ verify (protocolLayerClient , times (1 ))
79+ .executeFileCreateTransaction (any (FileCreateRequest .class ));
80+ verify (fileCreateResult , times (1 )).fileId ();
81+ verify (protocolLayerClient , times (appendCount ))
82+ .executeFileAppendRequestTransaction (any (FileAppendRequest .class ));
83+ Assertions .assertEquals (fileId , result );
84+ }
85+
86+ @ Test
87+ void testCreateFileThrowsExceptionForSizeGreaterThanMaxFileSize () {
88+ final String message = "File contents must be less than " + FileCreateRequest .FILE_MAX_SIZE + " bytes" ;
89+ // given
90+ final byte [] contents = new byte [FileCreateRequest .FILE_MAX_SIZE + 1 ];
91+
92+ // then
93+ final HieroException exception = Assertions .assertThrows (
94+ HieroException .class , () -> fileClientImpl .createFile (contents )
95+ );
96+ Assertions .assertTrue (exception .getMessage ().contains (message ));
97+ }
98+
99+ @ Test
100+ void testCreateFileThrowsExceptionForExpirationTimeBeforeNow () {
101+ final String message = "Expiration time must be in the future" ;
102+ // given
103+ final byte [] contents = "Hello Hiero!" .getBytes ();
104+ final Instant expiration = Instant .now ().minusSeconds (1 );
105+
106+ // then
107+ final IllegalArgumentException exception =Assertions .assertThrows (
108+ IllegalArgumentException .class , () -> fileClientImpl .createFile (contents , expiration )
109+ );
110+ Assertions .assertTrue (exception .getMessage ().contains (message ));
111+ }
112+
113+ @ Test
114+ void testCreateFileThrowsExceptionForNullContent () {
115+ final String message = "contents must not be null" ;
116+
117+ final NullPointerException exception = Assertions .assertThrows (
118+ NullPointerException .class , () -> fileClientImpl .createFile (null )
119+ );
120+ Assertions .assertTrue (exception .getMessage ().contains (message ));
121+ }
122+
27123 @ Test
28124 void testGetFileSize () throws HieroException {
29125 // mocks
@@ -60,6 +156,11 @@ void testGetFileSizeThrowsExceptionForInvalidId() throws HieroException {
60156
61157 @ Test
62158 void testGetFileSizeThrowsExceptionForNullId () {
63- Assertions .assertThrows (NullPointerException .class , () -> fileClientImpl .getSize (null ));
159+ final String message = "fileId must not be null" ;
160+
161+ final NullPointerException exception = Assertions .assertThrows (
162+ NullPointerException .class , () -> fileClientImpl .getSize (null )
163+ );
164+ Assertions .assertTrue (exception .getMessage ().contains (message ));
64165 }
65166}
0 commit comments