Skip to content

Commit

Permalink
Updated metal-go client for sub-commands Users
Browse files Browse the repository at this point in the history
  • Loading branch information
codinja1188 committed Jul 27, 2023
1 parent 9fc1587 commit 4edc249
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 21 deletions.
17 changes: 8 additions & 9 deletions internal/users/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand All @@ -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)
Expand Down
11 changes: 6 additions & 5 deletions internal/users/retrieve.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand All @@ -44,22 +45,22 @@ 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)
}
}

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)
Expand Down
16 changes: 9 additions & 7 deletions internal/users/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand All @@ -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
},
}

Expand All @@ -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 {
Expand Down
66 changes: 66 additions & 0 deletions test/e2e/user_test.go
Original file line number Diff line number Diff line change
@@ -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)
})
}
}

0 comments on commit 4edc249

Please sign in to comment.