Skip to content

Commit f6289e3

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

File tree

4 files changed

+135
-20
lines changed

4 files changed

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

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

0 commit comments

Comments
 (0)