Skip to content

Commit c7ca146

Browse files
committed
Added Unit test case for events sub commands
1 parent 15e23b9 commit c7ca146

File tree

4 files changed

+132
-20
lines changed

4 files changed

+132
-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

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package e2e
2+
3+
import (
4+
"fmt"
5+
"io"
6+
"os"
7+
"regexp"
8+
"strings"
9+
"testing"
10+
11+
root "github.com/equinix/metal-cli/internal/cli"
12+
"github.com/equinix/metal-cli/internal/events"
13+
outputPkg "github.com/equinix/metal-cli/internal/outputs"
14+
"github.com/equinix/metal-cli/internal/projects"
15+
"github.com/spf13/cobra"
16+
)
17+
18+
func TestCli_Events(t *testing.T) {
19+
var projectId string
20+
subCommand := "event"
21+
consumerToken := ""
22+
apiURL := ""
23+
Version := "metal"
24+
rootClient := root.NewClient(consumerToken, apiURL, Version)
25+
type fields struct {
26+
MainCmd *cobra.Command
27+
Outputer outputPkg.Outputer
28+
}
29+
tests := []struct {
30+
name string
31+
fields fields
32+
want *cobra.Command
33+
cmdFunc func(*testing.T, *cobra.Command)
34+
}{
35+
{
36+
name: "get Project Id",
37+
fields: fields{
38+
MainCmd: projects.NewClient(rootClient, outputPkg.Outputer(&outputPkg.Standard{})).NewCommand(),
39+
Outputer: outputPkg.Outputer(&outputPkg.Standard{}),
40+
},
41+
want: &cobra.Command{},
42+
cmdFunc: func(t *testing.T, c *cobra.Command) {
43+
root := c.Root()
44+
root.SetArgs([]string{"project", "get"})
45+
rescueStdout := os.Stdout
46+
r, w, _ := os.Pipe()
47+
os.Stdout = w
48+
if err := root.Execute(); err != nil {
49+
t.Error(err)
50+
}
51+
w.Close()
52+
out, _ := io.ReadAll(r)
53+
os.Stdout = rescueStdout
54+
55+
name := "Test Project"
56+
idNamePattern := `(?m)^\| ([a-zA-Z0-9-]+) +\| *` + name + ` *\|`
57+
58+
// Find the match of the ID and NAME pattern in the table string
59+
match := regexp.MustCompile(idNamePattern).FindStringSubmatch(string(out[:]))
60+
61+
// Extract the ID from the match
62+
if len(match) > 1 {
63+
projectId = strings.TrimSpace(match[1])
64+
fmt.Println("Extracted ID:", projectId)
65+
} else {
66+
fmt.Println("No ID found for the given NAME.")
67+
}
68+
},
69+
},
70+
{
71+
name: "get",
72+
fields: fields{
73+
MainCmd: events.NewClient(rootClient, outputPkg.Outputer(&outputPkg.Standard{})).NewCommand(),
74+
Outputer: outputPkg.Outputer(&outputPkg.Standard{}),
75+
},
76+
want: &cobra.Command{},
77+
cmdFunc: func(t *testing.T, c *cobra.Command) {
78+
root := c.Root()
79+
root.SetArgs([]string{subCommand, "get", "-p", projectId})
80+
rescueStdout := os.Stdout
81+
r, w, _ := os.Pipe()
82+
os.Stdout = w
83+
if err := root.Execute(); err != nil {
84+
t.Error(err)
85+
}
86+
w.Close()
87+
out, _ := io.ReadAll(r)
88+
os.Stdout = rescueStdout
89+
if !strings.Contains(string(out[:]), "instance.created") &&
90+
!strings.Contains(string(out[:]), "instance.deleted") &&
91+
!strings.Contains(string(out[:]), "ssh_key.created") &&
92+
!strings.Contains(string(out[:]), "ssh_key.deleted") {
93+
t.Error("expected output should include instance.created, instance.deleted, ssh_key.created, ssh_key.deleted by TYPE")
94+
}
95+
},
96+
},
97+
}
98+
99+
for _, tt := range tests {
100+
t.Run(tt.name, func(t *testing.T) {
101+
rootCmd := rootClient.NewCommand()
102+
rootCmd.AddCommand(tt.fields.MainCmd)
103+
tt.cmdFunc(t, tt.fields.MainCmd)
104+
})
105+
}
106+
}

0 commit comments

Comments
 (0)