76 lines
2.5 KiB
Go
76 lines
2.5 KiB
Go
package dingtalk
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestSendMarkdownSignsRequestAndSendsPayload(t *testing.T) {
|
|
var captured struct {
|
|
Query map[string]string
|
|
Body markdownPayload
|
|
}
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
captured.Query = map[string]string{
|
|
"access_token": r.URL.Query().Get("access_token"),
|
|
"timestamp": r.URL.Query().Get("timestamp"),
|
|
"sign": r.URL.Query().Get("sign"),
|
|
}
|
|
if err := json.NewDecoder(r.Body).Decode(&captured.Body); err != nil {
|
|
t.Fatalf("decode request body: %v", err)
|
|
}
|
|
_, _ = w.Write([]byte(`{"errcode":0,"errmsg":"ok"}`))
|
|
}))
|
|
defer server.Close()
|
|
|
|
client, err := New(Config{
|
|
WebhookURL: server.URL + "?access_token=token",
|
|
Secret: "SEC_TEST",
|
|
AtMobiles: []string{" 13800138000 ", ""},
|
|
AtAll: false,
|
|
}, server.Client())
|
|
if err != nil {
|
|
t.Fatalf("New() error = %v", err)
|
|
}
|
|
client.now = func() time.Time { return time.UnixMilli(1710000000123).UTC() }
|
|
|
|
if err := client.SendMarkdown(context.Background(), MarkdownMessage{Title: "财务申请", Text: "### 财务申请待审核"}); err != nil {
|
|
t.Fatalf("SendMarkdown() error = %v", err)
|
|
}
|
|
if captured.Query["access_token"] != "token" {
|
|
t.Fatalf("access token mismatch: %q", captured.Query["access_token"])
|
|
}
|
|
if captured.Query["timestamp"] != "1710000000123" {
|
|
t.Fatalf("timestamp mismatch: %q", captured.Query["timestamp"])
|
|
}
|
|
if captured.Query["sign"] != sign(1710000000123, "SEC_TEST") {
|
|
t.Fatalf("sign mismatch: %q", captured.Query["sign"])
|
|
}
|
|
if captured.Body.MsgType != "markdown" || captured.Body.Markdown.Title != "财务申请" || captured.Body.Markdown.Text == "" {
|
|
t.Fatalf("markdown payload mismatch: %+v", captured.Body)
|
|
}
|
|
if len(captured.Body.At.AtMobiles) != 1 || captured.Body.At.AtMobiles[0] != "13800138000" {
|
|
t.Fatalf("at mobiles mismatch: %+v", captured.Body.At.AtMobiles)
|
|
}
|
|
}
|
|
|
|
func TestSendMarkdownReturnsDingTalkError(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, _ = w.Write([]byte(`{"errcode":310000,"errmsg":"keywords not in content"}`))
|
|
}))
|
|
defer server.Close()
|
|
|
|
client, err := New(Config{WebhookURL: server.URL}, server.Client())
|
|
if err != nil {
|
|
t.Fatalf("New() error = %v", err)
|
|
}
|
|
|
|
if err := client.SendMarkdown(context.Background(), MarkdownMessage{Title: "财务申请", Text: "text"}); err == nil {
|
|
t.Fatal("SendMarkdown() error = nil, want dingtalk errcode")
|
|
}
|
|
}
|