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 ;
1521import static org .mockito .Mockito .*;
1622
@@ -24,6 +30,80 @@ void setup() {
2430 fileClientImpl = new FileClientImpl (protocolLayerClient );
2531 }
2632
33+ @ Test
34+ void testCreateFile () throws HieroException {
35+ // mock
36+ final FileId fileId = FileId .fromString ("1.2.3" );
37+ final FileCreateResult fileCreateResult = Mockito .mock (FileCreateResult .class );
38+
39+ // given
40+ final byte [] content = "Hello Hiero!" .getBytes ();
41+
42+ //then
43+ when (protocolLayerClient .executeFileCreateTransaction (any (FileCreateRequest .class )))
44+ .thenReturn (fileCreateResult );
45+ when (fileCreateResult .fileId ()).thenReturn (fileId );
46+
47+ final FileId result = fileClientImpl .createFile (content );
48+
49+ verify (protocolLayerClient , times (1 ))
50+ .executeFileCreateTransaction (any (FileCreateRequest .class ));
51+ verify (fileCreateResult , times (1 )).fileId ();
52+ Assertions .assertEquals (fileId , result );
53+ }
54+
55+ @ Test
56+ void testCreateFileForSizeGreaterThanFileCreateMaxSize () throws HieroException {
57+ // mock
58+ final FileId fileId = FileId .fromString ("1.2.3" );
59+ final FileCreateResult fileCreateResult = Mockito .mock (FileCreateResult .class );
60+
61+ // given
62+ byte [] content = new byte [FileCreateRequest .FILE_CREATE_MAX_SIZE * 2 ];
63+ // -1 because 1 for executeFileCreateTransaction()
64+ int appendCount = Math .floorDiv (content .length , FileCreateRequest .FILE_CREATE_MAX_SIZE ) - 1 ;
65+
66+ //then
67+ when (protocolLayerClient .executeFileCreateTransaction (any (FileCreateRequest .class )))
68+ .thenReturn (fileCreateResult );
69+ when (fileCreateResult .fileId ()).thenReturn (fileId );
70+ when (protocolLayerClient .executeFileAppendRequestTransaction (any (FileAppendRequest .class )))
71+ .thenReturn (any (FileAppendResult .class ));
72+
73+ final FileId result = fileClientImpl .createFile (content );
74+
75+ verify (protocolLayerClient , times (1 ))
76+ .executeFileCreateTransaction (any (FileCreateRequest .class ));
77+ verify (fileCreateResult , times (1 )).fileId ();
78+ verify (protocolLayerClient , times (appendCount ))
79+ .executeFileAppendRequestTransaction (any (FileAppendRequest .class ));
80+ Assertions .assertEquals (fileId , result );
81+ }
82+
83+ @ Test
84+ void testCreateFileThrowsExceptionForSizeGreaterThanMaxFileSize () {
85+ // given
86+ final byte [] contents = new byte [FileCreateRequest .FILE_MAX_SIZE + 1 ];
87+
88+ // then
89+ Assertions .assertThrows (HieroException .class , () -> fileClientImpl .createFile (contents ));
90+ }
91+
92+ @ Test
93+ void testCreateFileThrowsExceptionForExpirationTimeBeforeNow () {
94+ // given
95+ final byte [] contents = "Hello Hiero!" .getBytes ();
96+ final Instant expiration = Instant .now ().minusSeconds (1 );
97+
98+ // then
99+ Assertions .assertThrows (IllegalArgumentException .class , () -> fileClientImpl .createFile (contents , expiration ));
100+ }
101+
102+ @ Test
103+ void testCreateFileThrowsExceptionForNullContent () {
104+ Assertions .assertThrows (NullPointerException .class , () -> fileClientImpl .createFile (null ));
105+ }
106+
27107 @ Test
28108 void testGetFileSize () throws HieroException {
29109 // mocks
0 commit comments