From bd0dd26192dcb82d51ab9e68e9de3c1f34330f3c Mon Sep 17 00:00:00 2001 From: Aofei Sheng Date: Mon, 18 May 2020 18:41:41 +0800 Subject: [PATCH 1/2] errors: fix regular expression Telegram Bot API now returns an extra field for error responses, such as: {"ok":false,"error_code":429,"description":"Too Many Requests: retry after 8","parameters":{"retry_after":8}} --- errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/errors.go b/errors.go index 189ceb6..667d91f 100644 --- a/errors.go +++ b/errors.go @@ -45,7 +45,7 @@ func NewAPIError(code int, msgs ...string) *APIError { return err } -var errorRx = regexp.MustCompile(`{.+"error_code":(\d+),"description":"(.+)"}`) +var errorRx = regexp.MustCompile(`{.+"error_code":(\d+),"description":"(.+)".*}`) var ( // General errors From 0179138315a89886c2de92b50ddd797a3415749e Mon Sep 17 00:00:00 2001 From: Aofei Sheng Date: Mon, 18 May 2020 20:44:44 +0800 Subject: [PATCH 2/2] tests: implement extractOk() function test --- util_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 util_test.go diff --git a/util_test.go b/util_test.go new file mode 100644 index 0000000..2272cdf --- /dev/null +++ b/util_test.go @@ -0,0 +1,18 @@ +package telebot + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestExtractOk(t *testing.T) { + data := []byte(`{"ok":true,"result":{"foo":"bar"}}`) + assert.NoError(t, extractOk(data)) + + data = []byte(`{"ok":false,"error_code":429,"description":"Too Many Requests: retry after 8","parameters":{"retry_after":8}}`) + assert.Error(t, extractOk(data)) + + data = []byte(`{"ok":false,"error_code":400,"description":"Bad Request: reply message not found"}`) // Also check the old format + assert.EqualError(t, extractOk(data), ErrToReplyNotFound.Error()) +}