diff --git a/govultr.go b/govultr.go index c39b384..9e78099 100644 --- a/govultr.go +++ b/govultr.go @@ -130,8 +130,7 @@ func (c *Client) NewRequest(ctx context.Context, method, uri string, body interf buf := new(bytes.Buffer) if body != nil { - err = json.NewEncoder(buf).Encode(body) - if err != nil { + if err = json.NewEncoder(buf).Encode(body); err != nil { return nil, err } } diff --git a/govultr_test.go b/govultr_test.go index 5f86c97..ca6f687 100644 --- a/govultr_test.go +++ b/govultr_test.go @@ -194,6 +194,10 @@ func TestClient_SetBaseUrl(t *testing.T) { if client.BaseURL.String() != base { t.Errorf("NewClient BaseUrl = %v, expected %v", client.BaseURL, base) } + + if err := client.SetBaseURL(":"); err == nil { + t.Error("Expected invalid BaseURL to fail") + } } func TestClient_SetUserAgent(t *testing.T) { @@ -273,3 +277,49 @@ func TestClient_SetRetryLimit(t *testing.T) { t.Errorf("NewClient RateLimit = %v, expected %v", client.client.RetryMax, 4) } } + +func TestNewRequest_badURI(t *testing.T) { + c := NewClient(nil) + _, err := c.NewRequest(ctx, http.MethodGet, ":/1.", nil) + if err == nil { + t.Error("expected invalid URI to fail") + } +} + +func TestNewRequest_badBody(t *testing.T) { + c := NewClient(nil) + _, err := c.NewRequest(ctx, http.MethodGet, "/", make(chan int)) + if err == nil { + t.Error("expected invalid Body to fail") + } +} + +func TestRequest_InvalidCall(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/wrong", func(writer http.ResponseWriter, request *http.Request) { + writer.WriteHeader(http.StatusBadRequest) + fmt.Fprint(writer, nil) + }) + + req, _ := client.NewRequest(ctx, http.MethodGet, "/wrong", nil) + if err := client.DoWithContext(ctx, req, nil); err == nil { + t.Error("Expected invalid status code to bad request") + } +} + +func TestRequest_InvalidResponseBody(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/wrong", func(writer http.ResponseWriter, request *http.Request) { + writer.WriteHeader(http.StatusOK) + fmt.Fprint(writer, `{`) + }) + + req, _ := client.NewRequest(ctx, http.MethodGet, "/wrong", nil) + if err := client.DoWithContext(ctx, req, struct{}{}); err == nil { + t.Error("Expected response body to be invalid") + } +}