Skip to content

Commit d2ca356

Browse files
committed
added missing test for create fungible token
Signed-off-by: Manish Dait <[email protected]>
1 parent c858784 commit d2ca356

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed

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

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import com.hedera.hashgraph.sdk.PrivateKey;
1010
import com.hedera.hashgraph.sdk.PublicKey;
1111
import com.hedera.hashgraph.sdk.TokenId;
12+
import com.hedera.hashgraph.sdk.TokenType;
1213
import com.openelements.hiero.base.HieroException;
1314
import com.openelements.hiero.base.data.Account;
1415
import com.openelements.hiero.base.implementation.FungibleTokenClientImpl;
1516
import com.openelements.hiero.base.protocol.ProtocolLayerClient;
17+
import com.openelements.hiero.base.protocol.data.TokenCreateRequest;
18+
import com.openelements.hiero.base.protocol.data.TokenCreateResult;
1619
import com.openelements.hiero.base.protocol.data.TokenAssociateRequest;
1720
import com.openelements.hiero.base.protocol.data.TokenAssociateResult;
1821
import com.openelements.hiero.base.protocol.data.TokenDissociateRequest;
@@ -30,6 +33,7 @@ public class FungibleClientImplTest {
3033
Account operationalAccount;
3134
FungibleTokenClientImpl fungibleClientImpl;
3235

36+
ArgumentCaptor<TokenCreateRequest> tokenCreateCaptor = ArgumentCaptor.forClass(TokenCreateRequest.class);
3337
ArgumentCaptor<TokenAssociateRequest> tokenAssociateCaptor = ArgumentCaptor.forClass(TokenAssociateRequest.class);
3438
ArgumentCaptor<TokenDissociateRequest> tokenDissociateCaptor = ArgumentCaptor.forClass(TokenDissociateRequest.class);
3539

@@ -40,6 +44,204 @@ public void setup() {
4044
fungibleClientImpl = new FungibleTokenClientImpl(protocolLayerClient, operationalAccount);
4145
}
4246

47+
@Test
48+
void testCreateToken() throws HieroException {
49+
final TokenCreateResult tokenCreateResult = Mockito.mock(TokenCreateResult.class);
50+
final AccountId accountId = AccountId.fromString("1.2.3");
51+
final PrivateKey privateKey = PrivateKey.generateECDSA();
52+
final TokenId tokenId = TokenId.fromString("0.0.1");
53+
54+
final String name = "TOKEN";
55+
final String symbol = "FT";
56+
57+
when(operationalAccount.accountId()).thenReturn(accountId);
58+
when(operationalAccount.privateKey()).thenReturn(privateKey);
59+
when(protocolLayerClient.executeTokenCreateTransaction(any(TokenCreateRequest.class)))
60+
.thenReturn(tokenCreateResult);
61+
when(tokenCreateResult.tokenId()).thenReturn(tokenId);
62+
63+
final TokenId result = fungibleClientImpl.createToken(name, symbol);
64+
65+
verify(operationalAccount, times(1)).accountId();
66+
verify(operationalAccount, times(2)).privateKey(); // for supply & treasuryKey
67+
verify(protocolLayerClient, times(1))
68+
.executeTokenCreateTransaction(tokenCreateCaptor.capture());
69+
verify(tokenCreateResult, times(1)).tokenId();
70+
71+
final TokenCreateRequest capture = tokenCreateCaptor.getValue();
72+
Assertions.assertEquals(tokenId, result);
73+
Assertions.assertEquals(accountId, capture.treasuryAccountId());
74+
Assertions.assertEquals(privateKey, capture.treasuryKey());
75+
Assertions.assertEquals(privateKey, capture.supplyKey());
76+
Assertions.assertEquals(name, capture.name());
77+
Assertions.assertEquals(symbol, capture.symbol());
78+
Assertions.assertEquals(TokenType.FUNGIBLE_COMMON, capture.tokenType());
79+
}
80+
81+
@Test
82+
void testCreateTokenWithSupplyKey() throws HieroException {
83+
final TokenCreateResult tokenCreateResult = Mockito.mock(TokenCreateResult.class);
84+
final AccountId accountId = AccountId.fromString("1.2.3");
85+
final PrivateKey privateKey = PrivateKey.generateECDSA();
86+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
87+
final TokenId tokenId = TokenId.fromString("0.0.1");
88+
89+
final String name = "TOKEN";
90+
final String symbol = "FT";
91+
92+
when(operationalAccount.accountId()).thenReturn(accountId);
93+
when(operationalAccount.privateKey()).thenReturn(privateKey);
94+
when(protocolLayerClient.executeTokenCreateTransaction(any(TokenCreateRequest.class)))
95+
.thenReturn(tokenCreateResult);
96+
when(tokenCreateResult.tokenId()).thenReturn(tokenId);
97+
98+
final TokenId result = fungibleClientImpl.createToken(name, symbol, supplyKey);
99+
100+
verify(operationalAccount, times(1)).accountId();
101+
verify(operationalAccount, times(1)).privateKey();
102+
verify(protocolLayerClient, times(1))
103+
.executeTokenCreateTransaction(tokenCreateCaptor.capture());
104+
verify(tokenCreateResult, times(1)).tokenId();
105+
106+
final TokenCreateRequest capture = tokenCreateCaptor.getValue();
107+
Assertions.assertEquals(tokenId, result);
108+
Assertions.assertEquals(accountId, capture.treasuryAccountId());
109+
Assertions.assertEquals(privateKey, capture.treasuryKey());
110+
Assertions.assertEquals(supplyKey, capture.supplyKey());
111+
Assertions.assertEquals(name, capture.name());
112+
Assertions.assertEquals(symbol, capture.symbol());
113+
Assertions.assertEquals(TokenType.FUNGIBLE_COMMON, capture.tokenType());
114+
}
115+
116+
@Test
117+
void testCreateTokenWithAccountIdAndTreasuryKey() throws HieroException {
118+
final TokenCreateResult tokenCreateResult = Mockito.mock(TokenCreateResult.class);
119+
final AccountId treasuryAccountId = AccountId.fromString("1.2.3");
120+
final PrivateKey treasuryKey = PrivateKey.generateECDSA();
121+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
122+
final TokenId tokenId = TokenId.fromString("0.0.1");
123+
124+
final String name = "TOKEN";
125+
final String symbol = "FT";
126+
127+
when(operationalAccount.privateKey()).thenReturn(supplyKey);
128+
when(protocolLayerClient.executeTokenCreateTransaction(any(TokenCreateRequest.class)))
129+
.thenReturn(tokenCreateResult);
130+
when(tokenCreateResult.tokenId()).thenReturn(tokenId);
131+
132+
final TokenId result = fungibleClientImpl.createToken(name, symbol, treasuryAccountId, treasuryKey);
133+
134+
verify(operationalAccount, times(1)).privateKey();
135+
verify(protocolLayerClient, times(1))
136+
.executeTokenCreateTransaction(tokenCreateCaptor.capture());
137+
verify(tokenCreateResult, times(1)).tokenId();
138+
139+
final TokenCreateRequest capture = tokenCreateCaptor.getValue();
140+
Assertions.assertEquals(tokenId, result);
141+
Assertions.assertEquals(treasuryAccountId, capture.treasuryAccountId());
142+
Assertions.assertEquals(treasuryKey, capture.treasuryKey());
143+
Assertions.assertEquals(supplyKey, capture.supplyKey());
144+
Assertions.assertEquals(name, capture.name());
145+
Assertions.assertEquals(symbol, capture.symbol());
146+
Assertions.assertEquals(TokenType.FUNGIBLE_COMMON, capture.tokenType());
147+
}
148+
149+
@Test
150+
void testCreateTokenWithAccountIdAndTreasuryKeyAndSupplyKey() throws HieroException {
151+
final TokenCreateResult tokenCreateResult = Mockito.mock(TokenCreateResult.class);
152+
final AccountId treasuryAccountId = AccountId.fromString("1.2.3");
153+
final PrivateKey treasuryKey = PrivateKey.generateECDSA();
154+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
155+
final TokenId tokenId = TokenId.fromString("0.0.1");
156+
157+
final String name = "TOKEN";
158+
final String symbol = "FT";
159+
160+
when(protocolLayerClient.executeTokenCreateTransaction(any(TokenCreateRequest.class)))
161+
.thenReturn(tokenCreateResult);
162+
when(tokenCreateResult.tokenId()).thenReturn(tokenId);
163+
164+
final TokenId result = fungibleClientImpl.createToken(name, symbol, treasuryAccountId, treasuryKey, supplyKey);
165+
166+
verify(protocolLayerClient, times(1))
167+
.executeTokenCreateTransaction(tokenCreateCaptor.capture());
168+
verify(tokenCreateResult, times(1)).tokenId();
169+
170+
final TokenCreateRequest capture = tokenCreateCaptor.getValue();
171+
Assertions.assertEquals(tokenId, result);
172+
Assertions.assertEquals(treasuryAccountId, capture.treasuryAccountId());
173+
Assertions.assertEquals(treasuryKey, capture.treasuryKey());
174+
Assertions.assertEquals(supplyKey, capture.supplyKey());
175+
Assertions.assertEquals(name, capture.name());
176+
Assertions.assertEquals(symbol, capture.symbol());
177+
Assertions.assertEquals(TokenType.FUNGIBLE_COMMON, capture.tokenType());
178+
}
179+
180+
@Test
181+
void testCreateTokenThrowExceptionIfSymbolLengthGreaterThanMaxSymbolLen() {
182+
final String message = "Symbol length must be less than or equal to 100";
183+
184+
final AccountId accountId = AccountId.fromString("1.2.3");
185+
final PrivateKey privateKey = PrivateKey.generateECDSA();
186+
final PrivateKey supplyKey = PrivateKey.generateECDSA();
187+
188+
final String name = "TOKEN";
189+
final String symbol = new String(new byte[101]);
190+
191+
when(operationalAccount.accountId()).thenReturn(accountId);
192+
when(operationalAccount.privateKey()).thenReturn(privateKey);
193+
194+
final IllegalArgumentException e1 = Assertions.assertThrows(
195+
IllegalArgumentException.class,
196+
() -> fungibleClientImpl.createToken(name, symbol)
197+
);
198+
final IllegalArgumentException e2 = Assertions.assertThrows(
199+
IllegalArgumentException.class,
200+
() -> fungibleClientImpl.createToken(name, symbol, supplyKey)
201+
);
202+
final IllegalArgumentException e3 = Assertions.assertThrows(
203+
IllegalArgumentException.class,
204+
() -> fungibleClientImpl.createToken(name, symbol, accountId, privateKey)
205+
);
206+
final IllegalArgumentException e4 = Assertions.assertThrows(
207+
IllegalArgumentException.class,
208+
() -> fungibleClientImpl.createToken(name, symbol, accountId, privateKey, supplyKey)
209+
);
210+
211+
Assertions.assertEquals(message, e1.getMessage());
212+
Assertions.assertEquals(message, e2.getMessage());
213+
Assertions.assertEquals(message, e3.getMessage());
214+
Assertions.assertEquals(message, e4.getMessage());
215+
}
216+
217+
@Test
218+
void testCreateTokenThrowExceptionForNullParams() {
219+
final PrivateKey privateKey = PrivateKey.generateECDSA();
220+
final String name = "TOKEN";
221+
final String symbol = "FT";
222+
223+
final NullPointerException e1 = Assertions.assertThrows(
224+
NullPointerException.class,
225+
() -> fungibleClientImpl.createToken(null, symbol)
226+
);
227+
final NullPointerException e2 = Assertions.assertThrows(
228+
NullPointerException.class,
229+
() -> fungibleClientImpl.createToken(name, null)
230+
);
231+
final NullPointerException e3 = Assertions.assertThrows(
232+
NullPointerException.class,
233+
() -> fungibleClientImpl.createToken(name, symbol, (PrivateKey) null)
234+
);
235+
final NullPointerException e4 = Assertions.assertThrows(
236+
NullPointerException.class,
237+
() -> fungibleClientImpl.createToken(name, symbol, (AccountId) null, privateKey)
238+
);
239+
Assertions.assertEquals("name must not be null", e1.getMessage());
240+
Assertions.assertEquals("symbol must not be null", e2.getMessage());
241+
Assertions.assertEquals("supplyKey must not be null", e3.getMessage());
242+
Assertions.assertEquals("Treasury account ID cannot be null", e4.getMessage());
243+
}
244+
43245

44246
@Test
45247
void testAssociateToken() throws HieroException {

0 commit comments

Comments
 (0)