Skip to content

Commit cd568de

Browse files
committed
Added Unit test case for events sub commands
1 parent 198710b commit cd568de

File tree

4 files changed

+174
-20
lines changed

4 files changed

+174
-20
lines changed

internal/events/event.go

+3
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ func (c *Client) NewCommand() *cobra.Command {
6464
type Servicer interface {
6565
MetalAPI(*cobra.Command) *metal.APIClient
6666
Format() outputs.Format
67+
Filters() map[string]string
68+
Includes(defaultIncludes []string) (incl []string)
69+
Excludes(defaultExcludes []string) (excl []string)
6770
}
6871

6972
func NewClient(s Servicer, out outputs.Outputer) *Client {

internal/events/retrieve.go

+15-11
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ func (c *Client) Retrieve() *cobra.Command {
5959
var err error
6060
header := []string{"ID", "Body", "Type", "Created"}
6161
inc := []string{}
62-
exc := []string{}
6362

6463
// only fetch extra details when rendered
6564
switch c.Servicer.Format() {
@@ -70,34 +69,39 @@ func (c *Client) Retrieve() *cobra.Command {
7069
if deviceID != "" && projectID != "" && organizationID != "" && eventID != "" {
7170
return fmt.Errorf("id, project-id, device-id, and organization-id parameters are mutually exclusive")
7271
} else if deviceID != "" {
73-
events, err = pager.GetDeviceEvents(c.EventService, deviceID, inc, exc)
72+
deviceRequest := c.EventService.FindDeviceEvents(context.Background(), deviceID).Include(c.Servicer.Includes(inc)).Exclude(c.Servicer.Excludes(nil))
73+
events, err = pager.GetDeviceEvents(deviceRequest)
7474
if err != nil {
75-
return fmt.Errorf("Could not list Device Events: %w", err)
75+
return fmt.Errorf("could not list Device Events: %w", err)
7676
}
7777
} else if projectID != "" {
78-
events, err = pager.GetProjectEvents(c.EventService, projectID, inc, exc)
78+
projRequest := c.EventService.FindProjectEvents(context.Background(), projectID).Include(c.Servicer.Includes(inc)).Exclude(c.Servicer.Excludes(nil))
79+
events, err = pager.GetProjectEvents(projRequest)
7980
if err != nil {
80-
return fmt.Errorf("Could not list Project Events: %w", err)
81+
return fmt.Errorf("could not list Project Events: %w", err)
8182
}
8283
} else if organizationID != "" {
83-
events, err = pager.GetOrganizationEvents(c.EventService, organizationID, inc, exc)
84+
85+
orgRequest := c.EventService.FindOrganizationEvents(context.Background(), organizationID).Include(c.Servicer.Includes(inc)).Exclude(c.Servicer.Excludes(nil))
86+
events, err = pager.GetOrganizationEvents(orgRequest)
8487
if err != nil {
85-
return fmt.Errorf("Could not list Organization Events: %w", err)
88+
return fmt.Errorf("could not list Organization Events: %w", err)
8689
}
8790
} else if eventID != "" {
88-
event, _, err := c.EventService.FindEventById(context.Background(), eventID).Include(inc).Exclude(exc).Execute()
91+
event, _, err := c.EventService.FindEventById(context.Background(), eventID).Include(c.Servicer.Includes(inc)).Exclude(c.Servicer.Excludes(nil)).Execute()
8992
if err != nil {
90-
return fmt.Errorf("Could not get Event: %w", err)
93+
return fmt.Errorf("could not get Event: %w", err)
9194
}
9295

9396
data := make([][]string, 1)
9497

9598
data[0] = []string{event.GetId(), event.GetBody(), event.GetType(), event.GetCreatedAt().String()}
9699
return c.Out.Output(event, header, &data)
97100
} else {
98-
events, err = pager.GetAllEvents(c.EventService, inc, exc)
101+
request := c.EventService.FindEvents(context.Background()).Include(c.Servicer.Includes(inc)).Exclude(c.Servicer.Excludes(nil))
102+
events, err = pager.GetAllEvents(request)
99103
if err != nil {
100-
return fmt.Errorf("Could not list Events: %w", err)
104+
return fmt.Errorf("could not list Events: %w", err)
101105
}
102106
}
103107

internal/pagination/pager.go

+8-9
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ func GetAllProjects(s metal.ProjectsApiService, include []string, exclude []stri
2525
}
2626
}
2727

28-
func GetDeviceEvents(s metal.EventsApiService, deviceId string, include []string, exclude []string) ([]metal.Event, error) {
28+
func GetDeviceEvents(s metal.ApiFindDeviceEventsRequest) ([]metal.Event, error) {
2929
var events []metal.Event
3030

3131
page := int32(1) // int32 | Page to return (optional) (default to 1)
3232
perPage := int32(20) // int32 | Items returned per page (optional) (default to 10)
3333

3434
for {
35-
eventsPage, _, err := s.FindDeviceEvents(context.Background(), deviceId).Include(include).Exclude(exclude).Page(page).PerPage(perPage).Execute()
35+
eventsPage, _, err := s.Page(page).PerPage(perPage).Execute()
3636
if err != nil {
3737
return nil, err
3838
}
@@ -46,14 +46,14 @@ func GetDeviceEvents(s metal.EventsApiService, deviceId string, include []string
4646
}
4747
}
4848

49-
func GetProjectEvents(s metal.EventsApiService, projectId string, include []string, exclude []string) ([]metal.Event, error) {
49+
func GetProjectEvents(s metal.ApiFindProjectEventsRequest) ([]metal.Event, error) {
5050
var events []metal.Event
5151

5252
page := int32(1) // int32 | Page to return (optional) (default to 1)
5353
perPage := int32(20) // int32 | Items returned per page (optional) (default to 10)
5454

5555
for {
56-
eventsPage, _, err := s.FindProjectEvents(context.Background(), projectId).Include(include).Exclude(exclude).Page(page).PerPage(perPage).Execute()
56+
eventsPage, _, err := s.Page(page).PerPage(perPage).Execute()
5757
if err != nil {
5858
return nil, err
5959
}
@@ -67,14 +67,14 @@ func GetProjectEvents(s metal.EventsApiService, projectId string, include []stri
6767
}
6868
}
6969

70-
func GetOrganizationEvents(s metal.EventsApiService, orgId string, include []string, exclude []string) ([]metal.Event, error) {
70+
func GetOrganizationEvents(s metal.ApiFindOrganizationEventsRequest) ([]metal.Event, error) {
7171
var events []metal.Event
7272

7373
page := int32(1) // int32 | Page to return (optional) (default to 1)
7474
perPage := int32(20) // int32 | Items returned per page (optional) (default to 10)
7575

7676
for {
77-
eventsPage, _, err := s.FindOrganizationEvents(context.Background(), orgId).Include(include).Exclude(exclude).Page(page).PerPage(perPage).Execute()
77+
eventsPage, _, err := s.Page(page).PerPage(perPage).Execute()
7878
if err != nil {
7979
return nil, err
8080
}
@@ -88,14 +88,13 @@ func GetOrganizationEvents(s metal.EventsApiService, orgId string, include []str
8888
}
8989
}
9090

91-
func GetAllEvents(s metal.EventsApiService, include []string, exclude []string) ([]metal.Event, error) {
91+
func GetAllEvents(s metal.ApiFindEventsRequest) ([]metal.Event, error) {
9292
var events []metal.Event
9393

9494
page := int32(1) // int32 | Page to return (optional) (default to 1)
9595
perPage := int32(20) // int32 | Items returned per page (optional) (default to 10)
96-
9796
for {
98-
eventsPage, _, err := s.FindEvents(context.Background()).Include(include).Exclude(exclude).Page(page).PerPage(perPage).Execute()
97+
eventsPage, _, err := s.Page(page).PerPage(perPage).Execute()
9998
if err != nil {
10099
return nil, err
101100
}

test/e2e/event_test.go

+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
package e2e
2+
3+
import (
4+
"io"
5+
"os"
6+
"strings"
7+
"testing"
8+
9+
root "github.com/equinix/metal-cli/internal/cli"
10+
"github.com/equinix/metal-cli/internal/events"
11+
outputPkg "github.com/equinix/metal-cli/internal/outputs"
12+
"github.com/spf13/cobra"
13+
)
14+
15+
func TestCli_Plans(t *testing.T) {
16+
subCommand := "event"
17+
consumerToken := ""
18+
apiURL := ""
19+
Version := "metal"
20+
rootClient := root.NewClient(consumerToken, apiURL, Version)
21+
type fields struct {
22+
MainCmd *cobra.Command
23+
Outputer outputPkg.Outputer
24+
}
25+
tests := []struct {
26+
name string
27+
fields fields
28+
want *cobra.Command
29+
cmdFunc func(*testing.T, *cobra.Command)
30+
}{
31+
{
32+
name: "get",
33+
fields: fields{
34+
MainCmd: events.NewClient(rootClient, outputPkg.Outputer(&outputPkg.Standard{})).NewCommand(),
35+
Outputer: outputPkg.Outputer(&outputPkg.Standard{}),
36+
},
37+
want: &cobra.Command{},
38+
cmdFunc: func(t *testing.T, c *cobra.Command) {
39+
root := c.Root()
40+
root.SetArgs([]string{subCommand, "get"})
41+
rescueStdout := os.Stdout
42+
r, w, _ := os.Pipe()
43+
os.Stdout = w
44+
if err := root.Execute(); err != nil {
45+
t.Error(err)
46+
}
47+
w.Close()
48+
out, _ := io.ReadAll(r)
49+
os.Stdout = rescueStdout
50+
if !strings.Contains(string(out[:]), "instance.created") &&
51+
!strings.Contains(string(out[:]), "instance.deleted") &&
52+
!strings.Contains(string(out[:]), "ssh_key.created") &&
53+
!strings.Contains(string(out[:]), "ssh_key.deleted") {
54+
t.Error("expected output should include instance.created, instance.deleted, ssh_key.created, ssh_key.deleted by TYPE")
55+
}
56+
},
57+
},
58+
{
59+
name: "get_by_orgID",
60+
fields: fields{
61+
MainCmd: events.NewClient(rootClient, outputPkg.Outputer(&outputPkg.Standard{})).NewCommand(),
62+
Outputer: outputPkg.Outputer(&outputPkg.Standard{}),
63+
},
64+
want: &cobra.Command{},
65+
cmdFunc: func(t *testing.T, c *cobra.Command) {
66+
root := c.Root()
67+
root.SetArgs([]string{subCommand, "get", "--token", os.Getenv("METAL_AUTH_TOKEN"), "-o", os.Getenv("METAL_ORG_ID")})
68+
rescueStdout := os.Stdout
69+
r, w, _ := os.Pipe()
70+
os.Stdout = w
71+
if err := root.Execute(); err != nil {
72+
t.Error(err)
73+
}
74+
w.Close()
75+
out, _ := io.ReadAll(r)
76+
os.Stdout = rescueStdout
77+
if !strings.Contains(string(out[:]), "instance.created") &&
78+
!strings.Contains(string(out[:]), "instance.deleted") &&
79+
!strings.Contains(string(out[:]), "ssh_key.created") &&
80+
!strings.Contains(string(out[:]), "ssh_key.deleted") {
81+
t.Error("expected output should include instance.created, instance.deleted, ssh_key.created, ssh_key.deleted by TYPE")
82+
}
83+
},
84+
},
85+
{
86+
name: "get_by_projID",
87+
fields: fields{
88+
MainCmd: events.NewClient(rootClient, outputPkg.Outputer(&outputPkg.Standard{})).NewCommand(),
89+
Outputer: outputPkg.Outputer(&outputPkg.Standard{}),
90+
},
91+
want: &cobra.Command{},
92+
cmdFunc: func(t *testing.T, c *cobra.Command) {
93+
root := c.Root()
94+
root.SetArgs([]string{subCommand, "get", "--token", os.Getenv("METAL_AUTH_TOKEN"), "-p", os.Getenv("METAL_PROJ_ID")})
95+
rescueStdout := os.Stdout
96+
r, w, _ := os.Pipe()
97+
os.Stdout = w
98+
if err := root.Execute(); err != nil {
99+
t.Error(err)
100+
}
101+
w.Close()
102+
out, _ := io.ReadAll(r)
103+
os.Stdout = rescueStdout
104+
if !strings.Contains(string(out[:]), "instance.created") &&
105+
!strings.Contains(string(out[:]), "instance.deleted") &&
106+
!strings.Contains(string(out[:]), "ssh_key.created") &&
107+
!strings.Contains(string(out[:]), "ssh_key.deleted") {
108+
t.Error("expected output should include instance.created, instance.deleted, ssh_key.created, ssh_key.deleted by TYPE")
109+
}
110+
},
111+
},
112+
{
113+
name: "get_by_DeviceID",
114+
fields: fields{
115+
MainCmd: events.NewClient(rootClient, outputPkg.Outputer(&outputPkg.Standard{})).NewCommand(),
116+
Outputer: outputPkg.Outputer(&outputPkg.Standard{}),
117+
},
118+
want: &cobra.Command{},
119+
cmdFunc: func(t *testing.T, c *cobra.Command) {
120+
root := c.Root()
121+
root.SetArgs([]string{subCommand, "get", "--token", os.Getenv("METAL_AUTH_TOKEN"), "-p", os.Getenv("METAL_DEVICE_ID")})
122+
rescueStdout := os.Stdout
123+
r, w, _ := os.Pipe()
124+
os.Stdout = w
125+
if err := root.Execute(); err != nil {
126+
t.Error(err)
127+
}
128+
w.Close()
129+
out, _ := io.ReadAll(r)
130+
os.Stdout = rescueStdout
131+
if !strings.Contains(string(out[:]), "instance.created") &&
132+
!strings.Contains(string(out[:]), "instance.deleted") &&
133+
!strings.Contains(string(out[:]), "ssh_key.created") &&
134+
!strings.Contains(string(out[:]), "ssh_key.deleted") {
135+
t.Error("expected output should include instance.created, instance.deleted, ssh_key.created, ssh_key.deleted by TYPE")
136+
}
137+
},
138+
},
139+
}
140+
141+
for _, tt := range tests {
142+
t.Run(tt.name, func(t *testing.T) {
143+
rootCmd := rootClient.NewCommand()
144+
rootCmd.AddCommand(tt.fields.MainCmd)
145+
tt.cmdFunc(t, tt.fields.MainCmd)
146+
})
147+
}
148+
}

0 commit comments

Comments
 (0)