diff --git a/internal/users/add.go b/internal/users/add.go index 2fb6927c..a7d5e76f 100644 --- a/internal/users/add.go +++ b/internal/users/add.go @@ -21,11 +21,12 @@ package users import ( + "context" "fmt" "strconv" "strings" - "github.com/packethost/packngo" + metal "github.com/equinix-labs/metal-go/metal/v1" "github.com/spf13/cobra" ) @@ -46,20 +47,18 @@ func (c *Client) Add() *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { cmd.SilenceUsage = true - getOpts := c.Servicer.ListOptions(nil, nil) - createRequest := &packngo.InvitationCreateRequest{ - Invitee: email, - Roles: roles, - ProjectsIDs: projectsIDs, - } - invitation, _, err := c.InvitationService.Create(organizationID, createRequest, getOpts) + invitationInput := metal.NewInvitationInput(email) + invitationInput.SetRoles(roles) + invitationInput.SetProjectsIds(projectsIDs) + + invitation, _, err := c.InvitationService.CreateOrganizationInvitation(context.Background(), organizationID).InvitationInput(*invitationInput).Execute() if err != nil { return fmt.Errorf("Could not add Users: %w", err) } data := make([][]string, 1) - data[0] = []string{invitation.ID, invitation.Nonce, invitation.Invitee, invitation.Organization.Href, strconv.Itoa(len(invitation.Projects)), strings.Join(invitation.Roles, ", ")} + data[0] = []string{invitation.GetId(), invitation.GetNonce(), invitation.GetInvitee(), invitation.Organization.GetHref(), strconv.Itoa(len(invitation.GetProjects())), strings.Join(invitation.GetRoles(), ", ")} header := []string{"ID", "Nonce", "Email", "Organization", "Projects", "Roles"} return c.Out.Output(invitation, header, &data) diff --git a/internal/users/retrieve.go b/internal/users/retrieve.go index b92e5988..2b0221f8 100644 --- a/internal/users/retrieve.go +++ b/internal/users/retrieve.go @@ -21,9 +21,10 @@ package users import ( + "context" "fmt" - "github.com/packethost/packngo" + metal "github.com/equinix-labs/metal-go/metal/v1" "github.com/spf13/cobra" ) @@ -44,14 +45,14 @@ func (c *Client) Retrieve() *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { cmd.SilenceUsage = true var err error - var user *packngo.User + var user *metal.User if userID == "" { - user, _, err = c.Service.Current() + user, _, err = c.Service.FindCurrentUser(context.Background()).Include(nil).Exclude(nil).Execute() if err != nil { return fmt.Errorf("Could not get current User: %w", err) } } else { - user, _, err = c.Service.Get(userID, c.Servicer.ListOptions(nil, nil)) + user, _, err = c.Service.FindUserById(context.Background(), userID).Include(nil).Exclude(nil).Execute() if err != nil { return fmt.Errorf("Could not get Users: %w", err) } @@ -59,7 +60,7 @@ func (c *Client) Retrieve() *cobra.Command { data := make([][]string, 1) - data[0] = []string{user.ID, user.FullName, user.Email, user.Created} + data[0] = []string{user.GetId(), user.GetFullName(), user.GetEmail(), user.CreatedAt.String()} header := []string{"ID", "Full Name", "Email", "Created"} return c.Out.Output(user, header, &data) diff --git a/internal/users/user.go b/internal/users/user.go index 907ff4cf..671faf87 100644 --- a/internal/users/user.go +++ b/internal/users/user.go @@ -21,15 +21,15 @@ package users import ( + metal "github.com/equinix-labs/metal-go/metal/v1" "github.com/equinix/metal-cli/internal/outputs" - "github.com/packethost/packngo" "github.com/spf13/cobra" ) type Client struct { Servicer Servicer - Service packngo.UserService - InvitationService packngo.InvitationService + Service metal.UsersApiService + InvitationService metal.OrganizationsApiService Out outputs.Outputer } @@ -46,8 +46,8 @@ func (c *Client) NewCommand() *cobra.Command { root.PersistentPreRun(cmd, args) } } - c.Service = c.Servicer.API(cmd).Users - c.InvitationService = c.Servicer.API(cmd).Invitations + c.Service = *c.Servicer.MetalAPI(cmd).UsersApi + c.InvitationService = *c.Servicer.MetalAPI(cmd).OrganizationsApi }, } @@ -59,8 +59,10 @@ func (c *Client) NewCommand() *cobra.Command { } type Servicer interface { - API(*cobra.Command) *packngo.Client - ListOptions(defaultIncludes, defaultExcludes []string) *packngo.ListOptions + MetalAPI(*cobra.Command) *metal.APIClient + Filters() map[string]string + Includes(defaultIncludes []string) (incl []string) + Excludes(defaultExcludes []string) (excl []string) } func NewClient(s Servicer, out outputs.Outputer) *Client { diff --git a/test/e2e/user_test.go b/test/e2e/user_test.go new file mode 100644 index 00000000..850b1950 --- /dev/null +++ b/test/e2e/user_test.go @@ -0,0 +1,66 @@ +package e2e + +import ( + "io" + "os" + "strings" + "testing" + + root "github.com/equinix/metal-cli/internal/cli" + outputPkg "github.com/equinix/metal-cli/internal/outputs" + "github.com/equinix/metal-cli/internal/users" + "github.com/spf13/cobra" +) + +func TestCli_Users(t *testing.T) { + subCommand := "user" + consumerToken := "" + apiURL := "" + Version := "metal" + rootClient := root.NewClient(consumerToken, apiURL, Version) + type fields struct { + MainCmd *cobra.Command + Outputer outputPkg.Outputer + } + tests := []struct { + name string + fields fields + want *cobra.Command + cmdFunc func(*testing.T, *cobra.Command) + }{ + { + name: "get", + fields: fields{ + MainCmd: users.NewClient(rootClient, outputPkg.Outputer(&outputPkg.Standard{})).NewCommand(), + Outputer: outputPkg.Outputer(&outputPkg.Standard{}), + }, + want: &cobra.Command{}, + cmdFunc: func(t *testing.T, c *cobra.Command) { + root := c.Root() + root.SetArgs([]string{subCommand, "get"}) + rescueStdout := os.Stdout + r, w, _ := os.Pipe() + os.Stdout = w + if err := root.Execute(); err != nil { + t.Error(err) + } + w.Close() + out, _ := io.ReadAll(r) + os.Stdout = rescueStdout + if !strings.Contains(string(out[:]), "ID") && + !strings.Contains(string(out[:]), "FULL NAME") && + !strings.Contains(string(out[:]), "EMAIL") && + !strings.Contains(string(out[:]), "CREATED") { + t.Error("expected output should include ID, FULL NAME, EMAIL, CREATED") + } + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + rootCmd := rootClient.NewCommand() + rootCmd.AddCommand(tt.fields.MainCmd) + tt.cmdFunc(t, tt.fields.MainCmd) + }) + } +}