Files
Cyrene_v2/plugins/channels/telegram/helpers_test.go
T

62 lines
1.7 KiB
Go

package telegram
import (
"encoding/json"
"io"
"log/slog"
"net/http"
"net/http/httptest"
"strings"
"testing"
"git.yeij.top/AskaEth/Cyrene_v2/internal/logger"
)
// discardLogger returns a silent, source-tagged logger for tests.
func discardLogger() *slog.Logger {
return logger.WithSource(logger.New(logger.Options{Out: io.Discard}), "plugins/channels/telegram")
}
// newTestAdapter wires a Telegram adapter to an httptest server whose handler
// answers the Bot API methods. The server is closed on test cleanup.
func newTestAdapter(t *testing.T, h http.Handler) (*Adapter, *httptest.Server) {
t.Helper()
srv := httptest.NewServer(h)
t.Cleanup(srv.Close)
a := New(
Config{BotToken: "123456:TESTTOKEN"},
WithBaseURL(srv.URL),
WithHTTPClient(srv.Client()),
WithLogger(discardLogger()),
)
return a, srv
}
// methodOf extracts the Bot API method name from the request path, which takes
// the form /bot<token>/<method>.
func methodOf(r *http.Request) string {
parts := strings.Split(r.URL.Path, "/")
return parts[len(parts)-1]
}
// decodeBody unmarshals an incoming JSON request body into a map for assertions.
func decodeBody(r *http.Request) map[string]any {
var m map[string]any
if err := json.NewDecoder(r.Body).Decode(&m); err != nil {
return nil
}
return m
}
// okResponse writes a generic Bot API success envelope with the given result.
func okResponse(w http.ResponseWriter, result any) {
body := map[string]any{"ok": true, "result": result}
_ = json.NewEncoder(w).Encode(body)
}
// failResponse writes a Bot API error envelope.
func failResponse(w http.ResponseWriter, desc string, code int) {
body := map[string]any{"ok": false, "description": desc, "error_code": code}
_ = json.NewEncoder(w).Encode(body)
}