Skip to content

Commit 3de10c9

Browse files
authored
Merge pull request #2147 from onflow/cf/get-account-by-name
Add ability to get account by name
2 parents b4c4d7c + f6b2fce commit 3de10c9

2 files changed

Lines changed: 39 additions & 13 deletions

File tree

internal/accounts/accounts_test.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -250,18 +250,41 @@ func Test_Create(t *testing.T) {
250250
}
251251

252252
func Test_Get(t *testing.T) {
253-
srv, _, _ := util.TestMocks(t)
253+
srv, state, _ := util.TestMocks(t)
254254

255-
t.Run("Success", func(t *testing.T) {
256-
inArgs := []string{"0x01"}
255+
t.Run("Success with address", func(t *testing.T) {
256+
// Use the emulator service account address which is always valid
257+
inArgs := []string{"f8d6e0586b0a20c7"}
257258

258259
srv.GetAccount.Run(func(args mock.Arguments) {
259260
addr := args.Get(1).(flow.Address)
260-
assert.Equal(t, "0000000000000001", addr.String())
261+
assert.Equal(t, "f8d6e0586b0a20c7", addr.String())
261262
srv.GetAccount.Return(tests.NewAccountWithAddress(inArgs[0]), nil)
262263
})
263264

264-
result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, nil, srv.Mock)
265+
result, err := get(inArgs, command.GlobalFlags{Network: "emulator"}, util.NoLogger, srv.Mock, state)
266+
assert.NoError(t, err)
267+
assert.NotNil(t, result)
268+
})
269+
270+
t.Run("Success with account name", func(t *testing.T) {
271+
testAddr := flow.HexToAddress("f8d6e0586b0a20c7")
272+
testAccount := &accounts.Account{
273+
Name: "test-account",
274+
Address: testAddr,
275+
Key: accounts.NewHexKeyFromPrivateKey(0, crypto.SHA3_256, util.GenerateTestPrivateKey()),
276+
}
277+
state.Accounts().AddOrUpdate(testAccount)
278+
279+
inArgs := []string{"test-account"}
280+
281+
srv.GetAccount.Run(func(args mock.Arguments) {
282+
addr := args.Get(1).(flow.Address)
283+
assert.Equal(t, "f8d6e0586b0a20c7", addr.String())
284+
srv.GetAccount.Return(tests.NewAccountWithAddress(addr.Hex()), nil)
285+
})
286+
287+
result, err := get(inArgs, command.GlobalFlags{Network: "emulator"}, util.NoLogger, srv.Mock, state)
265288
assert.NoError(t, err)
266289
assert.NotNil(t, result)
267290
})

internal/accounts/get.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ import (
2222
"context"
2323
"fmt"
2424

25-
flowsdk "github.com/onflow/flow-go-sdk"
2625
"github.com/spf13/cobra"
2726

2827
"github.com/onflow/flowkit/v2"
2928
"github.com/onflow/flowkit/v2/output"
3029

3130
"github.com/onflow/flow-cli/internal/command"
31+
"github.com/onflow/flow-cli/internal/util"
3232
)
3333

3434
type flagsGet struct {
@@ -39,23 +39,26 @@ var getFlags = flagsGet{}
3939

4040
var getCommand = &command.Command{
4141
Cmd: &cobra.Command{
42-
Use: "get <address>",
43-
Short: "Gets an account by address",
44-
Example: "flow accounts get f8d6e0586b0a20c7",
42+
Use: "get [address|name]",
43+
Short: "Gets an account by address or account name",
44+
Example: "flow accounts get f8d6e0586b0a20c7\nflow accounts get my-account",
4545
Args: cobra.ExactArgs(1),
4646
},
4747
Flags: &getFlags,
48-
Run: get,
48+
RunS: get,
4949
}
5050

5151
func get(
5252
args []string,
53-
_ command.GlobalFlags,
53+
globalFlags command.GlobalFlags,
5454
logger output.Logger,
55-
_ flowkit.ReaderWriter,
5655
flow flowkit.Services,
56+
state *flowkit.State,
5757
) (command.Result, error) {
58-
address := flowsdk.HexToAddress(args[0])
58+
address, err := util.ResolveAddressOrAccountNameForNetworks(args[0], state, []string{globalFlags.Network})
59+
if err != nil {
60+
return nil, err
61+
}
5962

6063
logger.StartProgress(fmt.Sprintf("Loading account %s...", address))
6164
defer logger.StopProgress()

0 commit comments

Comments
 (0)