package wxworkbot import ( "github.com/stretchr/testify/assert" "net/http" "os" "strings" "testing" "time" ) func getBotKey() string { return os.Getenv("WXWORK_BOT_KEY") } func TestMarshalText(t *testing.T) { text := Text{ Content: "广州今日天气:29度,大部分多云,降雨概率:60%", MentionedList: []string{"wangqing", "@all"}, MentionedMobileList: []string{"13800001111", "@all"}, } msgBytes, err := marshalMessage(text) assert.Nil(t, err) expected := `{"msgtype":"text","text":{"content":"广州今日天气:29度,大部分多云,降雨概率:60%","mentioned_list":["wangqing","@all"],"mentioned_mobile_list":["13800001111","@all"]}}` msg := strings.TrimSuffix(string(msgBytes), "\n") assert.Equal(t, expected, msg) } func TestMarshalTextMessage(t *testing.T) { textMsg := textMessage{ Text: Text{ Content: "广州今日天气:29度,大部分多云,降雨概率:60%", MentionedList: []string{"wangqing", "@all"}, MentionedMobileList: []string{"13800001111", "@all"}, }, } msgBytes, err := marshalMessage(textMsg) assert.Nil(t, err) expected := `{"msgtype":"text","text":{"content":"广州今日天气:29度,大部分多云,降雨概率:60%","mentioned_list":["wangqing","@all"],"mentioned_mobile_list":["13800001111","@all"]}}` msg := strings.TrimSuffix(string(msgBytes), "\n") assert.Equal(t, expected, msg) } func TestMarshalMarkdown(t *testing.T) { markdown := Markdown{ Content: "233", } msgBytes, err := marshalMessage(markdown) assert.Nil(t, err) expected := `{"msgtype":"markdown","markdown":{"content":"233"}}` msg := strings.TrimSuffix(string(msgBytes), "\n") assert.Equal(t, expected, msg) } func TestMarshalMarkdownMessage(t *testing.T) { markdownMsg := markdownMessage{ Markdown: Markdown{ Content: "233", }, } msgBytes, err := marshalMessage(markdownMsg) assert.Nil(t, err) expected := `{"msgtype":"markdown","markdown":{"content":"233"}}` msg := strings.TrimSuffix(string(msgBytes), "\n") assert.Equal(t, expected, msg) } func TestMarshalImage(t *testing.T) { image := Image{ Base64: "DATA", MD5: "MD5", } msgBytes, err := marshalMessage(image) assert.Nil(t, err) expected := `{"msgtype":"image","image":{"base64":"DATA","md5":"MD5"}}` msg := strings.TrimSuffix(string(msgBytes), "\n") assert.Equal(t, expected, msg) } func TestMarshalImageMessage(t *testing.T) { imageMsg := imageMessage{ Image: Image{ Base64: "DATA", MD5: "MD5", }, } msgBytes, err := marshalMessage(imageMsg) assert.Nil(t, err) expected := `{"msgtype":"image","image":{"base64":"DATA","md5":"MD5"}}` msg := strings.TrimSuffix(string(msgBytes), "\n") assert.Equal(t, expected, msg) } func TestMarshalNews(t *testing.T) { news := News{ Articles: []NewsArticle{ { Title: "中秋节礼品领取", Description: "今年中秋节公司有豪礼相送", URL: "URL", PicURL: "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png", }, }, } msgBytes, err := marshalMessage(news) assert.Nil(t, err) expected := `{"msgtype":"news","news":{"articles":[{"title":"中秋节礼品领取","description":"今年中秋节公司有豪礼相送","url":"URL","picurl":"http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"}]}}` msg := strings.TrimSuffix(string(msgBytes), "\n") assert.Equal(t, expected, msg) } func TestMarshalNewsMessage(t *testing.T) { newsMsg := newsMessage{ News: News{ Articles: []NewsArticle{ { Title: "中秋节礼品领取", Description: "今年中秋节公司有豪礼相送", URL: "URL", PicURL: "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png", }, }}, } msgBytes, err := marshalMessage(newsMsg) assert.Nil(t, err) expected := `{"msgtype":"news","news":{"articles":[{"title":"中秋节礼品领取","description":"今年中秋节公司有豪礼相送","url":"URL","picurl":"http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"}]}}` msg := strings.TrimSuffix(string(msgBytes), "\n") assert.Equal(t, expected, msg) } func TestMarshalUnsupportedMessage(t *testing.T) { text := struct { Foo string }{ Foo: "bar", } _, err := marshalMessage(text) assert.Equal(t, ErrUnsupportedMessage, err) } func TestSendText(t *testing.T) { bot := New(getBotKey()) err := bot.Send(Text{ Content: "测试发送文本消息", MentionedList: []string{"wangqing", "@all"}, MentionedMobileList: []string{"13800001111", "@all"}, }) assert.Nil(t, err) } func TestSendWithInvalidBotKey(t *testing.T) { textMsg := textMessage{ Text: Text{ Content: "广州今日天气:29度,大部分多云,降雨概率:60%", MentionedList: []string{"wangqing", "@all"}, MentionedMobileList: []string{"13800001111", "@all"}, }, } bot := New("这是一个错误的 BOT KEY") err := bot.Send(textMsg) assert.NotNil(t, err) } func TestWithCustomHttpClient(t *testing.T) { bot := WxWorkBot{ Key: getBotKey(), Client: &http.Client{ Timeout: 1 * time.Second, }, } err := bot.Send(Text{ Content: "广州今日天气:29度,大部分多云,降雨概率:60%", MentionedList: []string{"wangqing", "@all"}, MentionedMobileList: []string{"13800001111", "@all"}, }) assert.Nil(t, err) }