Add processing when pagination is nil
parent
134128cb56
commit
22f47735b4
17
mastodon.go
17
mastodon.go
|
@ -103,19 +103,18 @@ func (c *Client) doAPI(ctx context.Context, method string, uri string, params in
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
lh := resp.Header.Get("Link")
|
|
||||||
if lh != "" {
|
|
||||||
retPG, err := newPagination(lh)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
*pg = *retPG
|
|
||||||
}
|
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return parseAPIError("bad request", resp)
|
return parseAPIError("bad request", resp)
|
||||||
} else if res == nil {
|
} else if res == nil {
|
||||||
return nil
|
return nil
|
||||||
|
} else if pg != nil {
|
||||||
|
if lh := resp.Header.Get("Link"); lh != "" {
|
||||||
|
pg2, err := newPagination(lh)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*pg = *pg2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return json.NewDecoder(resp.Body).Decode(&res)
|
return json.NewDecoder(resp.Body).Decode(&res)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,24 +13,24 @@ import (
|
||||||
|
|
||||||
func TestDoAPI(t *testing.T) {
|
func TestDoAPI(t *testing.T) {
|
||||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
q := r.URL.Query()
|
if r.URL.Query().Get("max_id") == "999" {
|
||||||
if q.Get("max_id") == "123" && q.Get("since_id") == "789" && q.Get("limit") == "10" {
|
w.Header().Set("Link", `<:>; rel="next"`)
|
||||||
|
} else {
|
||||||
w.Header().Set("Link", `<http://example.com?max_id=234>; rel="next", <http://example.com?since_id=890>; rel="prev"`)
|
w.Header().Set("Link", `<http://example.com?max_id=234>; rel="next", <http://example.com?since_id=890>; rel="prev"`)
|
||||||
fmt.Fprintln(w, `[{"username": "foo"}, {"username": "bar"}]`)
|
|
||||||
}
|
}
|
||||||
w.Header().Set("Link", `<:>; rel="next"`)
|
fmt.Fprintln(w, `[{"username": "foo"}, {"username": "bar"}]`)
|
||||||
}))
|
}))
|
||||||
defer ts.Close()
|
defer ts.Close()
|
||||||
|
|
||||||
c := NewClient(&Config{Server: ts.URL})
|
c := NewClient(&Config{Server: ts.URL})
|
||||||
err := c.doAPI(context.Background(), http.MethodGet, "/", nil, nil, &Pagination{
|
var accounts []Account
|
||||||
|
err := c.doAPI(context.Background(), http.MethodGet, "/", nil, &accounts, &Pagination{
|
||||||
MaxID: Int64(999),
|
MaxID: Int64(999),
|
||||||
})
|
})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("should be fail: %v", err)
|
t.Fatalf("should be fail: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var accounts []Account
|
|
||||||
pg := &Pagination{
|
pg := &Pagination{
|
||||||
MaxID: Int64(123),
|
MaxID: Int64(123),
|
||||||
SinceID: Int64(789),
|
SinceID: Int64(789),
|
||||||
|
@ -74,6 +74,18 @@ func TestDoAPI(t *testing.T) {
|
||||||
if accounts[1].Username != "bar" {
|
if accounts[1].Username != "bar" {
|
||||||
t.Fatalf("want %q but %q", "bar", accounts[1].Username)
|
t.Fatalf("want %q but %q", "bar", accounts[1].Username)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// *Pagination is nil
|
||||||
|
err = c.doAPI(context.Background(), http.MethodGet, "/", nil, &accounts, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("should not be fail: %v", err)
|
||||||
|
}
|
||||||
|
if accounts[0].Username != "foo" {
|
||||||
|
t.Fatalf("want %q but %q", "foo", accounts[0].Username)
|
||||||
|
}
|
||||||
|
if accounts[1].Username != "bar" {
|
||||||
|
t.Fatalf("want %q but %q", "bar", accounts[1].Username)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAuthenticate(t *testing.T) {
|
func TestAuthenticate(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue