| package client |
|
|
| import ( |
| "context" |
| "errors" |
| "io" |
| "net/http" |
| "strings" |
| "testing" |
| ) |
|
|
| func TestPostJSONWithStatusUsesProvidedFallbackClient(t *testing.T) { |
| var fallbackCalled bool |
| client := &Client{} |
| primary := failingDoer{err: errors.New("primary failed")} |
| fallbackDoer := doerFunc(func(req *http.Request) (*http.Response, error) { |
| fallbackCalled = true |
| return &http.Response{ |
| StatusCode: http.StatusOK, |
| Header: make(http.Header), |
| Body: io.NopCloser(strings.NewReader(`{"ok":true}`)), |
| Request: req, |
| }, nil |
| }) |
|
|
| resp, status, err := client.postJSONWithStatus( |
| context.Background(), |
| primary, |
| fallbackDoer, |
| "https://example.com/api", |
| map[string]string{"x-test": "1"}, |
| map[string]any{"foo": "bar"}, |
| ) |
| if err != nil { |
| t.Fatalf("postJSONWithStatus error: %v", err) |
| } |
| if status != http.StatusOK { |
| t.Fatalf("status=%d want=%d", status, http.StatusOK) |
| } |
| if !fallbackCalled { |
| t.Fatal("expected provided fallback doer to be called") |
| } |
| if ok, _ := resp["ok"].(bool); !ok { |
| t.Fatalf("unexpected response body: %#v", resp) |
| } |
| } |
|
|
| type doerFunc func(*http.Request) (*http.Response, error) |
|
|
| func (f doerFunc) Do(req *http.Request) (*http.Response, error) { |
| return f(req) |
| } |
|
|