]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blobdiff - vendor/github.com/DreamItGetIT/statuscake/client_test.go
Merge branch 'add_ssl_tests' of github.com:alexandreFre/terraform-provider-statuscake
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / DreamItGetIT / statuscake / client_test.go
diff --git a/vendor/github.com/DreamItGetIT/statuscake/client_test.go b/vendor/github.com/DreamItGetIT/statuscake/client_test.go
new file mode 100644 (file)
index 0000000..7c40c81
--- /dev/null
@@ -0,0 +1,236 @@
+package statuscake
+
+import (
+       "bytes"
+       "io"
+       "io/ioutil"
+       "log"
+       "net/http"
+       "net/url"
+       "os"
+       "path/filepath"
+       "testing"
+
+       "github.com/stretchr/testify/assert"
+       "github.com/stretchr/testify/require"
+)
+
+func TestAuth_validate(t *testing.T) {
+       assert := assert.New(t)
+       require := require.New(t)
+
+       auth := &Auth{}
+       err := auth.validate()
+
+       require.NotNil(err)
+       assert.Contains(err.Error(), "Username is required")
+       assert.Contains(err.Error(), "Apikey is required")
+
+       auth.Username = "foo"
+       err = auth.validate()
+
+       require.NotNil(err)
+       assert.Equal("Apikey is required", err.Error())
+
+       auth.Apikey = "bar"
+       err = auth.validate()
+       assert.Nil(err)
+}
+
+func TestClient(t *testing.T) {
+       require := require.New(t)
+       assert := assert.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       assert.Equal("random-user", c.username)
+       assert.Equal("my-pass", c.apiKey)
+}
+
+func TestClient_newRequest(t *testing.T) {
+       assert := assert.New(t)
+       require := require.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       r, err := c.newRequest("GET", "/hello", nil, nil)
+
+       require.Nil(err)
+       assert.Equal("GET", r.Method)
+       assert.Equal("https://app.statuscake.com/API/hello", r.URL.String())
+       assert.Equal("random-user", r.Header.Get("Username"))
+       assert.Equal("my-pass", r.Header.Get("API"))
+}
+
+func TestClient_doRequest(t *testing.T) {
+       assert := assert.New(t)
+       require := require.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       hc := &fakeHTTPClient{StatusCode: 200}
+       c.c = hc
+
+       req, err := http.NewRequest("GET", "http://example.com/test", nil)
+       require.Nil(err)
+
+       _, err = c.doRequest(req)
+       require.Nil(err)
+
+       assert.Len(hc.requests, 1)
+       assert.Equal("http://example.com/test", hc.requests[0].URL.String())
+}
+
+func TestClient_doRequest_WithHTTPErrors(t *testing.T) {
+       assert := assert.New(t)
+       require := require.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       hc := &fakeHTTPClient{
+               StatusCode: 500,
+       }
+       c.c = hc
+
+       req, err := http.NewRequest("GET", "http://example.com/test", nil)
+       require.Nil(err)
+
+       _, err = c.doRequest(req)
+       require.NotNil(err)
+       assert.IsType(&httpError{}, err)
+}
+
+func TestClient_doRequest_HttpAuthenticationErrors(t *testing.T) {
+       assert := assert.New(t)
+       require := require.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       hc := &fakeHTTPClient{
+               StatusCode: 200,
+               Fixture:    "auth_error.json",
+       }
+       c.c = hc
+
+       req, err := http.NewRequest("GET", "http://example.com/test", nil)
+       require.Nil(err)
+
+       _, err = c.doRequest(req)
+       require.NotNil(err)
+       assert.IsType(&AuthenticationError{}, err)
+}
+
+func TestClient_get(t *testing.T) {
+       require := require.New(t)
+       assert := assert.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       hc := &fakeHTTPClient{}
+       c.c = hc
+
+       c.get("/hello", nil)
+       assert.Len(hc.requests, 1)
+       assert.Equal("GET", hc.requests[0].Method)
+       assert.Equal("https://app.statuscake.com/API/hello", hc.requests[0].URL.String())
+}
+
+func TestClient_put(t *testing.T) {
+       require := require.New(t)
+       assert := assert.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       hc := &fakeHTTPClient{}
+       c.c = hc
+
+       v := url.Values{"foo": {"bar"}}
+       c.put("/hello", v)
+       assert.Len(hc.requests, 1)
+       assert.Equal("PUT", hc.requests[0].Method)
+       assert.Equal("https://app.statuscake.com/API/hello", hc.requests[0].URL.String())
+
+       b, err := ioutil.ReadAll(hc.requests[0].Body)
+       require.Nil(err)
+       assert.Equal("foo=bar", string(b))
+}
+
+func TestClient_delete(t *testing.T) {
+       require := require.New(t)
+       assert := assert.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       hc := &fakeHTTPClient{}
+       c.c = hc
+
+       v := url.Values{"foo": {"bar"}}
+       c.delete("/hello", v)
+       assert.Len(hc.requests, 1)
+       assert.Equal("DELETE", hc.requests[0].Method)
+       assert.Equal("https://app.statuscake.com/API/hello?foo=bar", hc.requests[0].URL.String())
+}
+
+func TestClient_Tests(t *testing.T) {
+       require := require.New(t)
+       assert := assert.New(t)
+
+       c, err := New(Auth{Username: "random-user", Apikey: "my-pass"})
+       require.Nil(err)
+
+       expected := &tests{
+               client: c,
+       }
+
+       assert.Equal(expected, c.Tests())
+}
+
+type fakeBody struct {
+       io.Reader
+}
+
+func (f *fakeBody) Close() error {
+       return nil
+}
+
+type fakeHTTPClient struct {
+       StatusCode int
+       Fixture    string
+       requests   []*http.Request
+}
+
+func (c *fakeHTTPClient) Do(r *http.Request) (*http.Response, error) {
+       c.requests = append(c.requests, r)
+       var body []byte
+
+       if c.Fixture != "" {
+               p := filepath.Join("fixtures", c.Fixture)
+               f, err := os.Open(p)
+               if err != nil {
+                       log.Fatal(err)
+               }
+               defer f.Close()
+
+               b, err := ioutil.ReadAll(f)
+               if err != nil {
+                       log.Fatal(err)
+               }
+
+               body = b
+       }
+
+       resp := &http.Response{
+               StatusCode: c.StatusCode,
+               Body:       &fakeBody{Reader: bytes.NewReader(body)},
+       }
+
+       return resp, nil
+}