Skip to content

Commit dfc740d

Browse files
authored
(MAINT) Add classes endpoint. (#94)
1 parent 2e79cac commit dfc740d

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed

pkg/classifier/classes.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package classifier
2+
3+
const (
4+
classes = "/classifier-api/v1/classes"
5+
)
6+
7+
func (c *Client) Classes(pagination *Pagination) ([]Class, error) {
8+
payload := []Class{}
9+
err := getRequest(c, classes, nil, &payload)
10+
return payload, err
11+
}
12+
13+
// Class represents a group returned by the classes endpoint.
14+
// See https://www.puppet.com/docs/pe/2019.8/classes_endpoint#get_v1_classes
15+
type Class struct {
16+
Name string
17+
Environment string
18+
Parameters map[string]interface{}
19+
}

pkg/classifier/classes_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package classifier
2+
3+
import (
4+
"net/http"
5+
"testing"
6+
7+
"github.com/jarcoal/httpmock"
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
var (
12+
client *Client
13+
classifierURL = "https://test-host:4433"
14+
)
15+
16+
func init() {
17+
client = NewClient(classifierURL, "xxxx", nil)
18+
httpmock.Activate()
19+
httpmock.ActivateNonDefault(client.resty.GetClient())
20+
}
21+
22+
func TestClassesSuccess(t *testing.T) {
23+
setupGetResponder(t, classes, "", "classes-response.json")
24+
actual, err := client.Classes(nil)
25+
26+
expected := []Class{{Name: "classinproduction", Environment: "production"},
27+
{Name: "classindev", Environment: "development"}}
28+
29+
require.Nil(t, err)
30+
require.True(t, len(actual) == len(expected))
31+
require.Equal(t, expected, actual)
32+
}
33+
34+
func TestClassesFailure(t *testing.T) {
35+
setupResponderWithStatusCodeAndBody(t, classes, http.StatusInternalServerError, nil)
36+
_, err := client.Classes(nil)
37+
38+
require.NotNil(t, err)
39+
}

pkg/classifier/groups_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ func setupGetResponder(t *testing.T, url, query, responseFilename string) {
4747
response.Body.Close()
4848
}
4949

50+
func setupResponderWithStatusCodeAndBody(t *testing.T, url string, statusCode int, response interface{}) {
51+
httpmock.Reset()
52+
responder, err := httpmock.NewJsonResponder(statusCode, response)
53+
require.Nil(t, err)
54+
httpmock.RegisterResponder(http.MethodGet, hostURL+url, responder)
55+
httpmock.RegisterResponder(http.MethodPost, hostURL+url, responder)
56+
}
57+
5058
var (
5159
pdbClient *Client
5260
hostURL = "https://test-host:4433"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[
2+
{
3+
"name": "classinproduction",
4+
"environment": "production"
5+
},
6+
{
7+
"name": "classindev",
8+
"environment": "development"
9+
}
10+
]

0 commit comments

Comments
 (0)