Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Omitting EndpointURL from Extension if empty #282

Merged
merged 1 commit into from
Feb 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
30 changes: 30 additions & 0 deletions client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"net/http"
"net/http/httptest"
"reflect"
"strings"
"testing"
)

Expand Down Expand Up @@ -43,6 +44,35 @@ func testEqual(t *testing.T, expected interface{}, actual interface{}) {
}
}

// testErrCheck looks to see if errContains is a substring of err.Error(). If
// not, this calls t.Fatal(). It also calls t.Fatal() if there was an error, but
// errContains is empty. Returns true if you should continue running the test,
// or false if you should stop the test.
func testErrCheck(t *testing.T, name string, errContains string, err error) bool {
t.Helper()

if len(errContains) > 0 {
if err == nil {
t.Fatalf("%s error = <nil>, should contain %q", name, errContains)
return false
}

if errStr := err.Error(); !strings.Contains(errStr, errContains) {
t.Fatalf("%s error = %q, should contain %q", name, errStr, errContains)
return false
}

return false
}

if err != nil && len(errContains) == 0 {
t.Fatalf("%s unexpected error: %v", name, err)
return false
}

return true
}

func TestAPIError_Error(t *testing.T) {
const jsonBody = `{"error":{"code": 420, "message": "Enhance Your Calm", "errors":["Enhance Your Calm", "Slow Your Roll"]}}`

Expand Down
2 changes: 1 addition & 1 deletion extension.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
type Extension struct {
APIObject
Name string `json:"name"`
EndpointURL string `json:"endpoint_url"`
EndpointURL string `json:"endpoint_url,omitempty"`
ExtensionObjects []APIObject `json:"extension_objects"`
ExtensionSchema APIObject `json:"extension_schema"`
Config interface{} `json:"config"`
Expand Down
98 changes: 86 additions & 12 deletions extension_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package pagerduty

import (
"encoding/json"
"net/http"
"testing"
)
Expand Down Expand Up @@ -55,28 +56,56 @@ func TestExtension_Create(t *testing.T) {
setup()
defer teardown()

input := &Extension{Name: "foo"}
input1 := &Extension{Name: "foo"}
input2 := &Extension{Name: "bar", EndpointURL: "expected_url"}

mux.HandleFunc("/extensions", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "POST")
w.Write([]byte(`{"extension": {"name": "foo", "id": "1"}}`))
var got map[string]interface{}

err := json.NewDecoder(r.Body).Decode(&got)

testErrCheck(t, "Extension_Create()", "", err)
name := got["name"]

if name == "foo" {
testNoEndpointURL(t, got)
testMethod(t, r, "POST")
w.Write([]byte(`{"extension": {"name": "foo", "id": "1"}}`))
} else {
testGotExpectedURL(t, "expected_url", got)
testMethod(t, r, "POST")
w.Write([]byte(`{"extension": {"name": "bar", "id": "2", "endpoint_url": "expected_url"}}`))
}
})

var client = &Client{apiEndpoint: server.URL, authToken: "foo", HTTPClient: defaultHTTPClient}

res, err := client.CreateExtension(input)

want := &Extension{
want1 := &Extension{
Name: "foo",
APIObject: APIObject{
ID: "1",
},
}

want2 := &Extension{
Name: "bar",
EndpointURL: "expected_url",
APIObject: APIObject{
ID: "2",
},
}

res1, err := client.CreateExtension(input1)
if err != nil {
t.Fatal(err)
}
testEqual(t, want, res)
testEqual(t, want1, res1)

res2, err := client.CreateExtension(input2)
if err != nil {
t.Fatal(err)
}
testEqual(t, want2, res2)
}

func TestExtension_Delete(t *testing.T) {
Expand Down Expand Up @@ -125,26 +154,71 @@ func TestExtension_Update(t *testing.T) {
setup()
defer teardown()

input := &Extension{Name: "foo"}
input1 := &Extension{Name: "foo"}
input2 := &Extension{Name: "foo", EndpointURL: "expected_url"}

mux.HandleFunc("/extensions/1", func(w http.ResponseWriter, r *http.Request) {
var got map[string]interface{}

err := json.NewDecoder(r.Body).Decode(&got)

testErrCheck(t, "Extension_Update()", "", err)
testNoEndpointURL(t, got)

testMethod(t, r, "PUT")
w.Write([]byte(`{"extension": {"name": "foo", "id": "1"}}`))
})

var client = &Client{apiEndpoint: server.URL, authToken: "foo", HTTPClient: defaultHTTPClient}
mux.HandleFunc("/extensions/2", func(w http.ResponseWriter, r *http.Request) {
var got map[string]interface{}

res, err := client.UpdateExtension("1", input)
err := json.NewDecoder(r.Body).Decode(&got)
testErrCheck(t, "Extension_Update()", "", err)

want := &Extension{
testGotExpectedURL(t, "expected_url", got)

testMethod(t, r, "PUT")
w.Write([]byte(`{"extension": {"name": "foo", "id": "2", "endpoint_url": "expected_url"}}`))
})

var client = &Client{apiEndpoint: server.URL, authToken: "foo", HTTPClient: defaultHTTPClient}

want1 := &Extension{
Name: "foo",
APIObject: APIObject{
ID: "1",
},
}

want2 := &Extension{
Name: "foo",
EndpointURL: "expected_url",
APIObject: APIObject{
ID: "2",
},
}

res1, err := client.UpdateExtension("1", input1)
if err != nil {
t.Fatal(err)
}
testEqual(t, want, res)
testEqual(t, want1, res1)

res2, err := client.UpdateExtension("2", input2)
if err != nil {
t.Fatal(err)
}
testEqual(t, want2, res2)
}

func testNoEndpointURL(t *testing.T, got map[string]interface{}) {
if _, ok := got["endpoint_url"]; ok {
t.Errorf(`Expected no url, got: "%v"`, got["endpoint_url"])
}
}

func testGotExpectedURL(t *testing.T, expected string, got map[string]interface{}) {
if got["endpoint_url"] != expected {
t.Errorf(`Expected url: "%v", got: "%v"`, "expected_url", got["endpoint_url"])
}
}