(new): v1.2 release
Golang lint / lint (push) Successful in 11m32s

This commit is contained in:
2026-08-19 14:58:25 +03:00
parent f03a081ed6
commit 29b208eeec
79 changed files with 7301 additions and 2060 deletions
+40
View File
@@ -1,6 +1,7 @@
package tgapi
import (
"errors"
"io"
"net/http"
"strings"
@@ -88,3 +89,42 @@ func TestAPICloseClosesIdleConnections(t *testing.T) {
t.Fatal("expected Close to close idle HTTP connections")
}
}
func TestAPIStopsAfterConfiguredRetryLimit(t *testing.T) {
calls := 0
client := &http.Client{Transport: roundTripFunc(func(_ *http.Request) (*http.Response, error) {
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(2))
defer func() { _ = api.Close() }()
_, err := api.GetMe()
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 != 3 {
t.Fatalf("request count = %d, want 3", calls)
}
}
func TestReadBodyRejectsOversizedResponse(t *testing.T) {
body := io.NopCloser(io.LimitReader(strings.NewReader(strings.Repeat("x", maximumResponseSize+1)), maximumResponseSize+1))
_, err := readBody(body)
if !errors.Is(err, ErrResponseTooLarge) {
t.Fatalf("expected ErrResponseTooLarge, got %v", err)
}
}