@@ -24,6 +24,7 @@ import (
2424 "github.com/onflow/flow-go-sdk"
2525 "github.com/onflow/flow-go-sdk/crypto"
2626 "github.com/stretchr/testify/assert"
27+ "github.com/stretchr/testify/require"
2728
2829 "github.com/onflow/flowkit/v2/accounts"
2930
@@ -111,6 +112,80 @@ func Test_GetTestnetAccounts(t *testing.T) {
111112 })
112113}
113114
115+ func Test_ResolveAddressOrAccountName (t * testing.T ) {
116+ t .Run ("Resolves valid hex address" , func (t * testing.T ) {
117+ _ , state , _ := util .TestMocks (t )
118+
119+ address , err := resolveAddressOrAccountName ("8efde57e98c557fa" , state )
120+
121+ require .NoError (t , err )
122+ assert .Equal (t , "8efde57e98c557fa" , address .String ())
123+ })
124+
125+ t .Run ("Resolves address with 0x prefix" , func (t * testing.T ) {
126+ _ , state , _ := util .TestMocks (t )
127+
128+ address , err := resolveAddressOrAccountName ("0x8efde57e98c557fa" , state )
129+
130+ require .NoError (t , err )
131+ assert .Equal (t , "8efde57e98c557fa" , address .String ())
132+ })
133+
134+ t .Run ("Resolves account name" , func (t * testing.T ) {
135+ _ , state , _ := util .TestMocks (t )
136+
137+ // Add a testnet account to state
138+ testnetAddr := flow .HexToAddress ("8efde57e98c557fa" )
139+ testnetAccount := & accounts.Account {
140+ Name : "my-testnet-account" ,
141+ Address : testnetAddr ,
142+ Key : accounts .NewHexKeyFromPrivateKey (0 , crypto .SHA3_256 , generateTestPrivateKey ()),
143+ }
144+ state .Accounts ().AddOrUpdate (testnetAccount )
145+
146+ address , err := resolveAddressOrAccountName ("my-testnet-account" , state )
147+
148+ require .NoError (t , err )
149+ assert .Equal (t , testnetAddr , address )
150+ })
151+
152+ t .Run ("Fails with invalid account name" , func (t * testing.T ) {
153+ _ , state , _ := util .TestMocks (t )
154+
155+ address , err := resolveAddressOrAccountName ("non-existent-account" , state )
156+
157+ assert .Equal (t , flow .EmptyAddress , address )
158+ assert .Error (t , err )
159+ })
160+
161+ t .Run ("Fails with invalid hex string" , func (t * testing.T ) {
162+ _ , state , _ := util .TestMocks (t )
163+
164+ address , err := resolveAddressOrAccountName ("invalid-hex-123" , state )
165+
166+ assert .Equal (t , flow .EmptyAddress , address )
167+ assert .Error (t , err )
168+ })
169+
170+ t .Run ("Fails when account name resolves to non-testnet address" , func (t * testing.T ) {
171+ _ , state , _ := util .TestMocks (t )
172+
173+ // Add an emulator account (not testnet-valid)
174+ emulatorAddr := flow .HexToAddress ("f8d6e0586b0a20c7" )
175+ emulatorAccount := & accounts.Account {
176+ Name : "emulator-account" ,
177+ Address : emulatorAddr ,
178+ Key : accounts .NewHexKeyFromPrivateKey (0 , crypto .SHA3_256 , generateTestPrivateKey ()),
179+ }
180+ state .Accounts ().AddOrUpdate (emulatorAccount )
181+
182+ address , err := resolveAddressOrAccountName ("emulator-account" , state )
183+
184+ assert .Equal (t , flow .EmptyAddress , address )
185+ assert .Error (t , err )
186+ })
187+ }
188+
114189func Test_Fund (t * testing.T ) {
115190 srv , state , _ := util .TestMocks (t )
116191
@@ -126,7 +201,31 @@ func Test_Fund(t *testing.T) {
126201 )
127202
128203 assert .Nil (t , result )
129- assert .Contains (t , err .Error (), "faucet can only work for valid Testnet addresses" )
204+ assert .Error (t , err )
205+ })
206+
207+ t .Run ("Fail with non-testnet account name" , func (t * testing.T ) {
208+ // Add an emulator account to the state
209+ emulatorAddr := flow .HexToAddress ("f8d6e0586b0a20c7" )
210+ emulatorAccount := & accounts.Account {
211+ Name : "emulator-account" ,
212+ Address : emulatorAddr ,
213+ Key : accounts .NewHexKeyFromPrivateKey (0 , crypto .SHA3_256 , generateTestPrivateKey ()),
214+ }
215+ state .Accounts ().AddOrUpdate (emulatorAccount )
216+
217+ args := []string {"emulator-account" } // Non-testnet account name
218+
219+ result , err := fund (
220+ args ,
221+ command.GlobalFlags {},
222+ util .NoLogger ,
223+ srv .Mock ,
224+ state ,
225+ )
226+
227+ assert .Nil (t , result )
228+ assert .Error (t , err )
130229 })
131230
132231 t .Run ("Fail with no address and no testnet accounts" , func (t * testing.T ) {
@@ -155,7 +254,7 @@ func Test_Fund(t *testing.T) {
155254 )
156255
157256 assert .Nil (t , result )
158- assert .Contains (t , err . Error (), "no testnet accounts found in flow.json" )
257+ assert .Error (t , err )
159258 })
160259}
161260
0 commit comments