@@ -278,19 +278,17 @@ func TestPrepareMultipartRichMessageUsesAttachName(t *testing.T) {
|
||||
}},
|
||||
}
|
||||
|
||||
buf, contentType, err := prepareMultipart(
|
||||
body, contentType := prepareMultipartStream(
|
||||
[]UploaderFile{NewUploaderFile("animation.mp4", []byte("animation")).SetAttachName("animation")},
|
||||
params,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("prepareMultipart returned error: %v", err)
|
||||
}
|
||||
defer func() { _ = body.Close() }()
|
||||
|
||||
_, contentTypeParams, err := mime.ParseMediaType(contentType)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseMediaType returned error: %v", err)
|
||||
}
|
||||
reader := multipart.NewReader(buf, contentTypeParams["boundary"])
|
||||
reader := multipart.NewReader(body, contentTypeParams["boundary"])
|
||||
|
||||
parts := make(map[string]string)
|
||||
var fileData []byte
|
||||
@@ -324,6 +322,43 @@ func TestPrepareMultipartRichMessageUsesAttachName(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUploaderStopsAfterConfiguredRetryLimit(t *testing.T) {
|
||||
calls := 0
|
||||
client := &http.Client{Transport: roundTripFunc(func(req *http.Request) (*http.Response, error) {
|
||||
_, _ = io.Copy(io.Discard, req.Body)
|
||||
calls++
|
||||
return &http.Response{
|
||||
StatusCode: http.StatusOK,
|
||||
Body: io.NopCloser(strings.NewReader(
|
||||
`{"ok":false,"error_code":429,"description":"retry","parameters":{"retry_after":0}}`,
|
||||
)),
|
||||
}, nil
|
||||
})}
|
||||
|
||||
api := NewAPI(NewAPIOpts("token").
|
||||
SetAPIURL("https://example.test").
|
||||
SetHTTPClient(client).
|
||||
SetMaxRetries(1))
|
||||
defer func() { _ = api.Close() }()
|
||||
uploader := NewUploader(api)
|
||||
defer func() { _ = uploader.Close() }()
|
||||
|
||||
_, err := uploader.SendPhoto(
|
||||
UploadPhoto{ChatID: 42},
|
||||
NewUploaderFile("photo.jpg", []byte("img")),
|
||||
)
|
||||
if !errors.Is(err, ErrRetryLimit) {
|
||||
t.Fatalf("expected ErrRetryLimit, got %v", err)
|
||||
}
|
||||
var responseErr *ResponseError
|
||||
if !errors.As(err, &responseErr) || responseErr.Code != http.StatusTooManyRequests {
|
||||
t.Fatalf("expected wrapped 429 ResponseError, got %v", err)
|
||||
}
|
||||
if calls != 2 {
|
||||
t.Fatalf("request count = %d, want 2", calls)
|
||||
}
|
||||
}
|
||||
|
||||
func readMultipartRequest(req *http.Request) (map[string]string, string, []byte, error) {
|
||||
_, params, err := mime.ParseMediaType(req.Header.Get("Content-Type"))
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user