]> git.giacomolli.uk - onechat/blobdiff - telegram_api_test.go
Derive contexts from the caller and name timeouts
[onechat] / telegram_api_test.go
index 7cdee660314dca0df947d07d02188c8f28c70172..98aa232a9539894007921f177c3622c81a88462d 100644 (file)
@@ -112,7 +112,7 @@ func TestSendCallsTimeOutOnAStalledConnection(t *testing.T) {
                        api.sendTimeout = 50 * time.Millisecond
                        start := time.Now()
                        err := tc.send(t.Context(), api)
-                       require.ErrorIs(t, err, errTelegramNetwork)
+                       require.EqualError(t, err, "no answer in 50ms")
                        require.Less(t, time.Since(start), 5*time.Second)
                        require.NotContains(t, err.Error(), telegramTestToken)
                        require.NotContains(t, err.Error(), server.URL)
@@ -123,6 +123,7 @@ func TestSendCallsTimeOutOnAStalledConnection(t *testing.T) {
                        api.sendTimeout = time.Hour
                        ctx, cancel := context.WithCancel(t.Context())
                        time.AfterFunc(50*time.Millisecond, cancel)
+
                        start = time.Now()
                        err = tc.send(ctx, api)
                        require.Error(t, err)
@@ -149,31 +150,34 @@ func TestBotErrorsDoNotHoldTheToken(t *testing.T) {
                                }
                        },
                        retry:     true,
-                       errorText: "no valid answer",
+                       errorText: "no answer",
                },
                {
                        name: "rate limit waits as asked",
                        reply: func(w http.ResponseWriter) {
                                w.WriteHeader(http.StatusTooManyRequests)
+
                                _, _ = io.WriteString(w, `{"ok":false,"error_code":429,"description":"Too Many Requests: retry after 3","parameters":{"retry_after":3}}`)
                        },
                        retry:     true,
                        wait:      3 * time.Second,
-                       errorText: "answered 429",
+                       errorText: "429",
                },
                {
                        name: "server error page is retried",
                        reply: func(w http.ResponseWriter) {
                                w.WriteHeader(http.StatusBadGateway)
+
                                _, _ = io.WriteString(w, "<html>bad gateway</html>")
                        },
                        retry:     true,
-                       errorText: "answered 502: Bad Gateway",
+                       errorText: "502 Bad Gateway",
                },
                {
                        name: "token echoed in a description is hidden",
                        reply: func(w http.ResponseWriter) {
                                w.WriteHeader(http.StatusUnauthorized)
+
                                _, _ = io.WriteString(w, `{"ok":false,"error_code":401,"description":"Unauthorized: bot`+telegramTestToken+`"}`)
                        },
                        retry:     false,
@@ -183,30 +187,33 @@ func TestBotErrorsDoNotHoldTheToken(t *testing.T) {
                        name: "bad request is a refusal",
                        reply: func(w http.ResponseWriter) {
                                w.WriteHeader(http.StatusBadRequest)
+
                                _, _ = io.WriteString(w, `{"ok":false,"error_code":400,"description":"Bad Request: can't parse"}`)
                        },
                        retry:     false,
                        rejected:  true,
-                       errorText: "answered 400: Bad Request: can't parse",
+                       errorText: "400 Bad Request: can't parse",
                },
                {
                        name: "unknown method is a refusal",
                        reply: func(w http.ResponseWriter) {
                                w.WriteHeader(http.StatusNotFound)
+
                                _, _ = io.WriteString(w, `{"ok":false,"error_code":404,"description":"Not Found"}`)
                        },
                        retry:     false,
                        rejected:  true,
-                       errorText: "answered 404: Not Found",
+                       errorText: "404 Not Found",
                },
                {
                        name: "not found page of a proxy is not a refusal",
                        reply: func(w http.ResponseWriter) {
                                w.WriteHeader(http.StatusNotFound)
+
                                _, _ = io.WriteString(w, "<html>not found</html>")
                        },
                        retry:     false,
-                       errorText: "answered 404: Not Found",
+                       errorText: "404 Not Found",
                },
                {
                        name: "broken answer is retried",
@@ -214,13 +221,13 @@ func TestBotErrorsDoNotHoldTheToken(t *testing.T) {
                                _, _ = io.WriteString(w, `{"ok":`)
                        },
                        retry:     true,
-                       errorText: "decode answer",
+                       errorText: "invalid JSON",
                },
        }
 
        for _, tc := range testCases {
                t.Run(tc.name, func(t *testing.T) {
-                       server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+                       server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
                                tc.reply(w)
                        }))
                        t.Cleanup(server.Close)
@@ -241,6 +248,6 @@ func TestBotErrorsDoNotHoldTheToken(t *testing.T) {
        server.Close()
 
        _, err := newTelegramAPI(server.URL, telegramTestToken).GetUpdates(t.Context(), 0)
-       require.ErrorIs(t, err, errTelegramNetwork)
+       require.ErrorAs(t, err, new(*TelegramNetworkError))
        require.NotContains(t, err.Error(), telegramTestToken)
 }