From fa7274a82fc1efbc66ad99a2e2f8511e2ddd680d Mon Sep 17 00:00:00 2001 From: Chase Fleming <1666730+chasefleming@users.noreply.github.com> Date: Wed, 22 Oct 2025 09:51:02 -0700 Subject: [PATCH 1/3] Add ability to get account by name --- internal/accounts/get.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/internal/accounts/get.go b/internal/accounts/get.go index 270d3654e..ff4296763 100644 --- a/internal/accounts/get.go +++ b/internal/accounts/get.go @@ -22,13 +22,13 @@ import ( "context" "fmt" - flowsdk "github.com/onflow/flow-go-sdk" "github.com/spf13/cobra" "github.com/onflow/flowkit/v2" "github.com/onflow/flowkit/v2/output" "github.com/onflow/flow-cli/internal/command" + "github.com/onflow/flow-cli/internal/util" ) type flagsGet struct { @@ -39,23 +39,26 @@ var getFlags = flagsGet{} var getCommand = &command.Command{ Cmd: &cobra.Command{ - Use: "get
", - Short: "Gets an account by address", - Example: "flow accounts get f8d6e0586b0a20c7", + Use: "get [address|name]", + Short: "Gets an account by address or account name", + Example: "flow accounts get f8d6e0586b0a20c7\nflow accounts get my-account", Args: cobra.ExactArgs(1), }, Flags: &getFlags, - Run: get, + RunS: get, } func get( args []string, _ command.GlobalFlags, logger output.Logger, - _ flowkit.ReaderWriter, flow flowkit.Services, + state *flowkit.State, ) (command.Result, error) { - address := flowsdk.HexToAddress(args[0]) + address, err := util.ResolveAddressOrAccountNameForNetworks(args[0], state, []string{"mainnet", "testnet", "emulator"}) + if err != nil { + return nil, err + } logger.StartProgress(fmt.Sprintf("Loading account %s...", address)) defer logger.StopProgress() From 857dbfcf0561a1feb2342bbdf96c043758b6b261 Mon Sep 17 00:00:00 2001 From: Chase Fleming <1666730+chasefleming@users.noreply.github.com> Date: Wed, 22 Oct 2025 13:14:23 -0700 Subject: [PATCH 2/3] Add test --- internal/accounts/accounts_test.go | 33 +++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/internal/accounts/accounts_test.go b/internal/accounts/accounts_test.go index 4b55f629a..a10df7454 100644 --- a/internal/accounts/accounts_test.go +++ b/internal/accounts/accounts_test.go @@ -250,18 +250,41 @@ func Test_Create(t *testing.T) { } func Test_Get(t *testing.T) { - srv, _, _ := util.TestMocks(t) + srv, state, _ := util.TestMocks(t) - t.Run("Success", func(t *testing.T) { - inArgs := []string{"0x01"} + t.Run("Success with address", func(t *testing.T) { + // Use the emulator service account address which is always valid + inArgs := []string{"f8d6e0586b0a20c7"} srv.GetAccount.Run(func(args mock.Arguments) { addr := args.Get(1).(flow.Address) - assert.Equal(t, "0000000000000001", addr.String()) + assert.Equal(t, "f8d6e0586b0a20c7", addr.String()) srv.GetAccount.Return(tests.NewAccountWithAddress(inArgs[0]), nil) }) - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, nil, srv.Mock) + result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) + assert.NoError(t, err) + assert.NotNil(t, result) + }) + + t.Run("Success with account name", func(t *testing.T) { + testAddr := flow.HexToAddress("f8d6e0586b0a20c7") + testAccount := &accounts.Account{ + Name: "test-account", + Address: testAddr, + Key: accounts.NewHexKeyFromPrivateKey(0, crypto.SHA3_256, util.GenerateTestPrivateKey()), + } + state.Accounts().AddOrUpdate(testAccount) + + inArgs := []string{"test-account"} + + srv.GetAccount.Run(func(args mock.Arguments) { + addr := args.Get(1).(flow.Address) + assert.Equal(t, "f8d6e0586b0a20c7", addr.String()) + srv.GetAccount.Return(tests.NewAccountWithAddress(addr.Hex()), nil) + }) + + result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) assert.NoError(t, err) assert.NotNil(t, result) }) From f6b2fcecbd989e2722f8a479e412c09f2d5837b2 Mon Sep 17 00:00:00 2001 From: Chase Fleming <1666730+chasefleming@users.noreply.github.com> Date: Mon, 27 Oct 2025 11:04:14 -0700 Subject: [PATCH 3/3] Use network flag to resolve account --- internal/accounts/accounts_test.go | 4 ++-- internal/accounts/get.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/accounts/accounts_test.go b/internal/accounts/accounts_test.go index a10df7454..98462c0b3 100644 --- a/internal/accounts/accounts_test.go +++ b/internal/accounts/accounts_test.go @@ -262,7 +262,7 @@ func Test_Get(t *testing.T) { srv.GetAccount.Return(tests.NewAccountWithAddress(inArgs[0]), nil) }) - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) + result, err := get(inArgs, command.GlobalFlags{Network: "emulator"}, util.NoLogger, srv.Mock, state) assert.NoError(t, err) assert.NotNil(t, result) }) @@ -284,7 +284,7 @@ func Test_Get(t *testing.T) { srv.GetAccount.Return(tests.NewAccountWithAddress(addr.Hex()), nil) }) - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) + result, err := get(inArgs, command.GlobalFlags{Network: "emulator"}, util.NoLogger, srv.Mock, state) assert.NoError(t, err) assert.NotNil(t, result) }) diff --git a/internal/accounts/get.go b/internal/accounts/get.go index ff4296763..abab8b6c6 100644 --- a/internal/accounts/get.go +++ b/internal/accounts/get.go @@ -50,12 +50,12 @@ var getCommand = &command.Command{ func get( args []string, - _ command.GlobalFlags, + globalFlags command.GlobalFlags, logger output.Logger, flow flowkit.Services, state *flowkit.State, ) (command.Result, error) { - address, err := util.ResolveAddressOrAccountNameForNetworks(args[0], state, []string{"mainnet", "testnet", "emulator"}) + address, err := util.ResolveAddressOrAccountNameForNetworks(args[0], state, []string{globalFlags.Network}) if err != nil { return nil, err }