package kook import ( "encoding/json" "io" "log/slog" "net/http" "net/http/httptest" "testing" "github.com/gorilla/websocket" "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/kook") } // newTestAdapter wires a KOOK adapter to an httptest server whose handler // answers the REST API (and optionally upgrades a WebSocket). 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: "testtoken"}, WithBaseURL(srv.URL), WithHTTPClient(srv.Client()), WithLogger(discardLogger()), ) return a, srv } // 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 } // kookOK writes a KOOK success envelope with the given data payload. func kookOK(w http.ResponseWriter, data any) { _ = json.NewEncoder(w).Encode(map[string]any{"code": 0, "message": "ok", "data": data}) } // kookFail writes a KOOK error envelope with the given code/message. func kookFail(w http.ResponseWriter, code int, msg string) { _ = json.NewEncoder(w).Encode(map[string]any{"code": code, "message": msg, "data": struct{}{}}) } // wsUpgrader upgrades an HTTP request to a WebSocket for gateway tests. var wsUpgrader = websocket.Upgrader{}