diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2026-06-13 11:21:13 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2026-06-13 11:21:13 -0400 |
| commit | 056cff27d3c003e32e098dc59bb53a8a93efa88a (patch) | |
| tree | f67c33f7a251a4d06b9646e5d20f62e8408a1569 /jttp_test.go | |
| download | jttp-056cff27d3c003e32e098dc59bb53a8a93efa88a.zip | |
Client.Do()
Diffstat (limited to 'jttp_test.go')
| -rw-r--r-- | jttp_test.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/jttp_test.go b/jttp_test.go new file mode 100644 index 0000000..66256c0 --- /dev/null +++ b/jttp_test.go @@ -0,0 +1,84 @@ +package jttp_test + +import ( + "fmt" + "net/http" + "net/http/httptest" + "net/url" + "testing" + + "github.com/stretchr/testify/require" + + "git.samanthony.xyz/jttp" +) + +type Person struct { + Name string + Age int +} + +func TestDo(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, `{"name": "Alice", "age": 123}`) + })) + defer srv.Close() + + clnt := jttp.NewClient(srv.Client()) + url, err := url.Parse(srv.URL) + require.NoError(t, err) + req := &http.Request{Method: http.MethodGet, URL: url} + var alice Person + err = clnt.Do(req, http.StatusOK, &alice) + require.NoError(t, err) + require.Equal(t, Person{"Alice", 123}, alice) +} + +func TestDoReqFail(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "", http.StatusInternalServerError) + })) + defer srv.Close() + + clnt := jttp.NewClient(srv.Client()) + url, err := url.Parse(srv.URL) + require.NoError(t, err) + req := &http.Request{Method: http.MethodGet, URL: url} + var alice Person + err = clnt.Do(req, http.StatusOK, &alice) + require.Error(t, err) + require.Equal(t, fmt.Sprintf("jttp: GET %s: 500 Internal Server Error (expected 200)", srv.URL), err.Error()) +} + +func TestDoBadStatus(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(201) + fmt.Fprint(w, `{"name": "Alice", "age": 123}`) + })) + defer srv.Close() + + clnt := jttp.NewClient(srv.Client()) + url, err := url.Parse(srv.URL) + require.NoError(t, err) + req := &http.Request{Method: http.MethodGet, URL: url} + var alice Person + err = clnt.Do(req, 200, &alice) + require.Error(t, err) + require.Equal(t, fmt.Sprintf("jttp: GET %s: 201 Created (expected 200)", srv.URL), err.Error()) +} + +func TestDoDecodeFail(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprint(w, `{"name": "Alice", "age": "notanumber"}`) + })) + defer srv.Close() + + clnt := jttp.NewClient(srv.Client()) + url, err := url.Parse(srv.URL) + require.NoError(t, err) + req := &http.Request{Method: http.MethodGet, URL: url} + var alice Person + err = clnt.Do(req, http.StatusOK, &alice) + require.Error(t, err) + require.Contains(t, err.Error(), "json") + require.Contains(t, err.Error(), "Person.Age") +} |