Files
iotlcm/bot/internal/feishu/client_test.go
T

63 lines
1.9 KiB
Go

package feishu
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestSendText(t *testing.T) {
var gotText string
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch r.URL.Path {
case "/open-apis/auth/v3/tenant_access_token/internal":
_, _ = w.Write([]byte(`{"code":0,"tenant_access_token":"test-token","expire":7200}`))
case "/open-apis/im/v1/messages":
if r.URL.Query().Get("receive_id_type") != "chat_id" || r.Header.Get("Authorization") != "Bearer test-token" {
t.Errorf("unexpected request: %s %s", r.URL.String(), r.Header.Get("Authorization"))
}
var payload struct {
ReceiveID string `json:"receive_id"`
MsgType string `json:"msg_type"`
Content string `json:"content"`
}
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
t.Error(err)
}
if payload.ReceiveID != "test-chat" || payload.MsgType != "text" {
t.Errorf("unexpected payload: %+v", payload)
}
var content struct {
Text string `json:"text"`
}
if err := json.Unmarshal([]byte(payload.Content), &content); err != nil {
t.Error(err)
}
gotText = content.Text
_, _ = w.Write([]byte(`{"code":0,"msg":"success"}`))
default:
http.NotFound(w, r)
}
}))
defer server.Close()
client := NewClient("test-app", "test-secret", "test-chat")
client.baseURL = server.URL
message := "连接测试:含引号 \" 和换行\n第二行"
if err := client.SendText(context.Background(), message); err != nil {
t.Fatal(err)
}
if gotText != message {
t.Fatalf("text mismatch: %q", gotText)
}
}
func TestSendTextRejectsEmpty(t *testing.T) {
client := NewClient("test-app", "test-secret", "test-chat")
if err := client.SendText(context.Background(), ""); err == nil || !strings.Contains(err.Error(), "text is required") {
t.Fatalf("unexpected error: %v", err)
}
}