diff --git a/internal/accounts/accounts_test.go b/internal/accounts/accounts_test.go index 4b55f629a..98462c0b3 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{Network: "emulator"}, 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{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 270d3654e..abab8b6c6 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, + globalFlags 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{globalFlags.Network}) + if err != nil { + return nil, err + } logger.StartProgress(fmt.Sprintf("Loading account %s...", address)) defer logger.StopProgress()