func TestResponseXMLandJSONMarshal(t *testing.T) { for _, test := range responseMarshalTests { // xml b, err := xml.Marshal(test.Value) if err != nil { t.Errorf("xml.Marshal(%#v):\nError: %s\n", test.Value, err) continue } want := util.TrimSpace(test.ExpectXML) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#v):\nhave %#s\nwant %#s\n", test.Value, b, want) continue } // json b, err = json.Marshal(test.Value) if err != nil { t.Errorf("json.Marshal(%#v):\nError: %s\n", test.Value, err) continue } want = util.TrimSpace(test.ExpectJSON) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#v):\nhave %#s\nwant %#s\n", test.Value, b, want) continue } } }
func TestGroupProductModifyRequestNewAndAppend(t *testing.T) { expectBytes := []byte(`{ "group_id":28, "product":[ { "product_id":"pDF3iY-CgqlAL3k8Ilz-6sj0UYpk", "mod_action":1 }, { "product_id":"pDF3iY-RewlAL3k8Ilz-6sjsepp9", "mod_action":0 } ] }`) request := NewGroupProductModifyRequest( 28, []string{"pDF3iY-CgqlAL3k8Ilz-6sj0UYpk"}, []string{"pDF3iY-RewlAL3k8Ilz-6sjsepp9"}, ) b, err := json.Marshal(request) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", request, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", request, b, want) } } request = NewGroupProductModifyRequest(28, nil, nil) request.AddProduct("pDF3iY-CgqlAL3k8Ilz-6sj0UYpk") request.DeleteProduct("pDF3iY-RewlAL3k8Ilz-6sjsepp9") b, err = json.Marshal(request) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", request, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", request, b, want) } } }
func TestMarshalAndNewFunc(t *testing.T) { // 测试文本消息=============================================================== want := util.TrimSpace([]byte(`{ "filter":{ "group_id":"2" }, "msgtype":"text", "text":{ "content":"CONTENT" } }`)) text := NewText(2, "CONTENT") have, err := json.Marshal(text) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", text, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", text, have, want) } // 测试图片消息=============================================================== want = util.TrimSpace([]byte(`{ "filter":{ "group_id":"2" }, "msgtype":"image", "image":{ "media_id":"123dsdajkasd231jhksad" } }`)) image := NewImage(2, "123dsdajkasd231jhksad") have, err = json.Marshal(image) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", image, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", image, have, want) } // 测试语音消息=============================================================== want = util.TrimSpace([]byte(`{ "filter":{ "group_id":"2" }, "msgtype":"voice", "voice":{ "media_id":"123dsdajkasd231jhksad" } }`)) voice := NewVoice(2, "123dsdajkasd231jhksad") have, err = json.Marshal(voice) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", voice, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", voice, have, want) } // 测试视频消息=============================================================== want = util.TrimSpace([]byte(`{ "filter":{ "group_id":"2" }, "msgtype":"mpvideo", "mpvideo":{ "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc" } }`)) video := NewVideo(2, "IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc") have, err = json.Marshal(video) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", video, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", video, have, want) } // 测试图文消息=============================================================== want = util.TrimSpace([]byte(`{ "filter":{ "group_id":"2" }, "msgtype":"mpnews", "mpnews":{ "media_id":"123dsdajkasd231jhksad" } }`)) news := NewNews(2, "123dsdajkasd231jhksad") have, err = json.Marshal(news) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", news, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", news, have, want) } }
func TestMarshalAndNewFunc(t *testing.T) { // 测试文本消息=============================================================== want := util.TrimSpace([]byte(`{ "touser":[ "oR5Gjjl_eiZoUpGozMo7dbBJ362A", "oR5Gjjo5rXlMUocSEXKT7Q5RQ63Q" ], "msgtype":"text", "text":{ "content":"hello from boxer." } }`)) text := NewText( []string{"oR5Gjjl_eiZoUpGozMo7dbBJ362A", "oR5Gjjo5rXlMUocSEXKT7Q5RQ63Q"}, "hello from boxer.", ) have, err := json.Marshal(text) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", text, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", text, have, want) } // 测试图片消息=============================================================== want = util.TrimSpace([]byte(`{ "touser":[ "OPENID1", "OPENID2" ], "msgtype":"image", "image":{ "media_id":"BTgN0opcW3Y5zV_ZebbsD3NFKRWf6cb7OPswPi9Q83fOJHK2P67dzxn11Cp7THat" } }`)) image := NewImage([]string{"OPENID1", "OPENID2"}, "BTgN0opcW3Y5zV_ZebbsD3NFKRWf6cb7OPswPi9Q83fOJHK2P67dzxn11Cp7THat") have, err = json.Marshal(image) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", image, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", image, have, want) } // 测试语音消息=============================================================== want = util.TrimSpace([]byte(`{ "touser":[ "OPENID1", "OPENID2" ], "msgtype":"voice", "voice":{ "media_id":"mLxl6paC7z2Tl-NJT64yzJve8T9c8u9K2x-Ai6Ujd4lIH9IBuF6-2r66mamn_gIT" } }`)) voice := NewVoice([]string{"OPENID1", "OPENID2"}, "mLxl6paC7z2Tl-NJT64yzJve8T9c8u9K2x-Ai6Ujd4lIH9IBuF6-2r66mamn_gIT") have, err = json.Marshal(voice) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", voice, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", voice, have, want) } // 测试视频消息=============================================================== want = util.TrimSpace([]byte(`{ "touser":[ "OPENID1", "OPENID2" ], "msgtype":"video", "video":{ "media_id":"123dsdajkasd231jhksad", "title":"TITLE", "description":"DESCRIPTION" } }`)) video := NewVideo( []string{"OPENID1", "OPENID2"}, "123dsdajkasd231jhksad", "TITLE", "DESCRIPTION", ) have, err = json.Marshal(video) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", video, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", video, have, want) } // 测试图文消息=============================================================== want = util.TrimSpace([]byte(`{ "touser":[ "OPENID1", "OPENID2" ], "msgtype":"mpnews", "mpnews":{ "media_id":"123dsdajkasd231jhksad" } }`)) news := NewNews([]string{"OPENID1", "OPENID2"}, "123dsdajkasd231jhksad") have, err = json.Marshal(news) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", news, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", news, have, want) } }
func TestMarshalAndNewFunc(t *testing.T) { var expectBytes []byte // 测试文本消息=============================================================== expectBytes = []byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>text</MsgType> <Content>你好</Content> </xml>`) text := NewText("toUser", "fromUser", "你好") text.CreateTime = 12345678 b, err := xml.Marshal(text) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", text, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", text, b, want) } } // 测试图片消息=============================================================== expectBytes = []byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>image</MsgType> <Image> <MediaId>media_id</MediaId> </Image> </xml>`) image := NewImage("toUser", "fromUser", "media_id") image.CreateTime = 12345678 b, err = xml.Marshal(image) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", image, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", image, b, want) } } // 测试语音消息=============================================================== expectBytes = []byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>voice</MsgType> <Voice> <MediaId>media_id</MediaId> </Voice> </xml>`) voice := NewVoice("toUser", "fromUser", "media_id") voice.CreateTime = 12345678 b, err = xml.Marshal(voice) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", voice, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", voice, b, want) } } // 测试视频消息=============================================================== expectBytes = []byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>video</MsgType> <Video> <MediaId>media_id</MediaId> <Title>title</Title> <Description>description</Description> </Video> </xml>`) video := NewVideo("toUser", "fromUser", "media_id", "title", "description") video.CreateTime = 12345678 b, err = xml.Marshal(video) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", video, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", video, b, want) } } // 测试音乐消息=============================================================== expectBytes = []byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>music</MsgType> <Music> <Title>TITLE</Title> <Description>DESCRIPTION</Description> <MusicUrl>MUSIC_Url</MusicUrl> <HQMusicUrl>HQ_MUSIC_Url</HQMusicUrl> <ThumbMediaId>media_id</ThumbMediaId> </Music> </xml>`) music := NewMusic("toUser", "fromUser", "media_id", "MUSIC_Url", "HQ_MUSIC_Url", "TITLE", "DESCRIPTION") music.CreateTime = 12345678 b, err = xml.Marshal(music) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", music, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", music, b, want) } } // 测试图文消息=============================================================== // 没有文章 expectBytes = []byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>news</MsgType> <ArticleCount>0</ArticleCount> <Articles> </Articles> </xml>`) news := NewNews("toUser", "fromUser", nil) news.CreateTime = 12345678 b, err = xml.Marshal(news) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", news, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", news, b, want) } } // 增加一篇没有文章 expectBytes = []byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>news</MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title>title1</Title> <Description>description1</Description> <PicUrl>picurl</PicUrl> <Url>url</Url> </item> </Articles> </xml>`) news.AppendArticle(&NewsArticle{ Title: "title1", Description: "description1", PicURL: "picurl", URL: "url", }) b, err = xml.Marshal(news) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", news, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", news, b, want) } } // 再增加一篇没有文章 expectBytes = []byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>news</MsgType> <ArticleCount>2</ArticleCount> <Articles> <item> <Title>title1</Title> <Description>description1</Description> <PicUrl>picurl</PicUrl> <Url>url</Url> </item> <item> <Title>title</Title> <Description>description</Description> <PicUrl>picurl</PicUrl> <Url>url</Url> </item> </Articles> </xml>`) news.AppendArticle(&NewsArticle{ Title: "title", Description: "description", PicURL: "picurl", URL: "url", }) b, err = xml.Marshal(news) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", news, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", news, b, want) } } // 测试将消息转发到多客服======================================================= expectBytes = []byte(`<xml> <ToUserName>touser</ToUserName> <FromUserName>fromuser</FromUserName> <CreateTime>1399197672</CreateTime> <MsgType>transfer_customer_service</MsgType> </xml>`) transToCS := NewTransferCustomerService("touser", "fromuser") transToCS.CreateTime = 1399197672 b, err = xml.Marshal(transToCS) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", transToCS, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", transToCS, b, want) } } }
func TestMarshalAndNewFunc(t *testing.T) { var expectBytes []byte // 测试文本消息=============================================================== expectBytes = []byte(`{ "touser":"******", "msgtype":"text", "text": { "content":"你好" } }`) text := NewText("toUser", "你好") b, err := json.Marshal(text) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", text, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", text, b, want) } } // 测试图片消息=============================================================== expectBytes = []byte(`{ "touser":"******", "msgtype":"image", "image": { "media_id":"media_id" } }`) image := NewImage("toUser", "media_id") b, err = json.Marshal(image) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", image, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", image, b, want) } } // 测试语音消息=============================================================== expectBytes = []byte(`{ "touser":"******", "msgtype":"voice", "voice": { "media_id":"media_id" } }`) voice := NewVoice("toUser", "media_id") b, err = json.Marshal(voice) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", voice, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", voice, b, want) } } // 测试视频消息=============================================================== expectBytes = []byte(`{ "touser":"******", "msgtype":"video", "video": { "media_id":"media_id", "title":"title", "description":"description" } }`) video := NewVideo("toUser", "media_id", "title", "description") b, err = json.Marshal(video) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", video, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", video, b, want) } } // 测试音乐消息=============================================================== expectBytes = []byte(`{ "touser":"******", "msgtype":"music", "music": { "title":"TITLE", "description":"DESCRIPTION", "musicurl":"MUSIC_Url", "hqmusicurl":"HQ_MUSIC_Url", "thumb_media_id":"media_id" } }`) music := NewMusic("toUser", "media_id", "MUSIC_Url", "HQ_MUSIC_Url", "TITLE", "DESCRIPTION") b, err = json.Marshal(music) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", music, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", music, b, want) } } // 测试图文消息=============================================================== // 没有文章 expectBytes = []byte(`{ "touser":"******", "msgtype":"news", "news":{} }`) news := NewNews("toUser", nil) b, err = json.Marshal(news) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", news, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", news, b, want) } } // 增加一篇没有文章 expectBytes = []byte(`{ "touser":"******", "msgtype":"news", "news":{ "articles":[ { "title":"title1", "description":"description1", "picurl":"picurl", "url":"url" } ] } }`) news.News.Articles = append( news.News.Articles, &NewsArticle{ Title: "title1", Description: "description1", PicURL: "picurl", URL: "url", }, ) b, err = json.Marshal(news) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", news, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", news, b, want) } } // 再增加一篇没有文章 expectBytes = []byte(`{ "touser":"******", "msgtype":"news", "news":{ "articles":[ { "title":"title1", "description":"description1", "picurl":"picurl", "url":"url" }, { "title":"title", "description":"description", "picurl":"picurl", "url":"url" } ] } }`) news.News.Articles = append( news.News.Articles, &NewsArticle{ Title: "title", Description: "description", PicURL: "picurl", URL: "url", }, ) b, err = json.Marshal(news) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", news, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", news, b, want) } } }
func TestMenuJSONMarshal(t *testing.T) { want := util.TrimSpace([]byte(`{ "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜单", "sub_button":[ { "type":"view", "name":"搜索", "url":"http://www.soso.com/" }, { "type":"view", "name":"视频", "url":"http://v.qq.com/" }, { "type":"click", "name":"赞一下我们", "key":"V1001_GOOD" } ] } ] }`)) var subButtons = make([]Button, 3) subButtons[0].InitToViewButton("搜索", "http://www.soso.com/") subButtons[1].InitToViewButton("视频", "http://v.qq.com/") subButtons[2].InitToClickButton("赞一下我们", "V1001_GOOD") var mn Menu mn.Buttons = make([]Button, 2) mn.Buttons[0].InitToClickButton("今日歌曲", "V1001_TODAY_MUSIC") mn.Buttons[1].InitToSubMenuButton("菜单", subButtons) have, err := json.Marshal(mn) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", mn, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", mn, have, want) } want = util.TrimSpace([]byte(`{ "button":[ { "name":"扫码", "sub_button":[ { "type":"scancode_waitmsg", "name":"扫码带提示", "key":"rselfmenu_0_0" }, { "type":"scancode_push", "name":"扫码推事件", "key":"rselfmenu_0_1" } ] }, { "name":"发图", "sub_button":[ { "type":"pic_sysphoto", "name":"系统拍照发图", "key":"rselfmenu_1_0" }, { "type":"pic_photo_or_album", "name":"拍照或者相册发图", "key":"rselfmenu_1_1" }, { "type":"pic_weixin", "name":"微信相册发图", "key":"rselfmenu_1_2" } ] }, { "type":"location_select", "name":"发送位置", "key":"rselfmenu_2_0" } ] }`)) var subButtons0 = make([]Button, 2) subButtons0[0].InitToScanCodeWaitMsgButton("扫码带提示", "rselfmenu_0_0") subButtons0[1].InitToScanCodePushButton("扫码推事件", "rselfmenu_0_1") var subButtons1 = make([]Button, 3) subButtons1[0].InitToPicSysPhotoButton("系统拍照发图", "rselfmenu_1_0") subButtons1[1].InitToPicPhotoOrAlbumButton("拍照或者相册发图", "rselfmenu_1_1") subButtons1[2].InitToPicWeixinButton("微信相册发图", "rselfmenu_1_2") var mn1 Menu mn1.Buttons = make([]Button, 3) mn1.Buttons[0].InitToSubMenuButton("扫码", subButtons0) mn1.Buttons[1].InitToSubMenuButton("发图", subButtons1) mn1.Buttons[2].InitToLocationSelectButton("发送位置", "rselfmenu_2_0") have, err = json.Marshal(mn1) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", mn1, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", mn1, have, want) } }
func TestShelfMarshal(t *testing.T) { expectBytes := []byte(`{ "shelf_name":"测试货架", "shelf_banner":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2ibrWQn8zWFUh1YznsMV0XEiavFfLzDWYyvQOBBszXlMaiabGWzz5B2KhNn2IDemHa3iarmCyribYlZYyw/0", "shelf_info":{ "module_infos":[ { "eid":1, "group_info":{ "group_id":50, "filter":{ "count":2 } } }, { "eid":2, "group_infos":{ "groups":[ { "group_id":49 }, { "group_id":50 }, { "group_id":51 } ] } }, { "eid":3, "group_info":{ "group_id":52, "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5Jm64z4I0TTicv0TjN7Vl9bykUUibYKIOjicAwIt6Oy0Y6a1Rjp5Tos8tg/0" } }, { "eid":4, "group_infos":{ "groups":[ { "group_id":49, "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0" }, { "group_id":50, "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5G1kdy3ViblHrR54gbCmbiaMnl5HpLGm5JFeENyO9FEZAy6mPypEpLibLA/0" }, { "group_id":52, "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0" } ] } }, { "eid":5, "group_infos":{ "groups":[ { "group_id":43 }, { "group_id":44 }, { "group_id":45 }, { "group_id":46 } ], "img_background":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0" } } ] } }`) _shelf := Shelf{ Name: "测试货架", Banner: "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2ibrWQn8zWFUh1YznsMV0XEiavFfLzDWYyvQOBBszXlMaiabGWzz5B2KhNn2IDemHa3iarmCyribYlZYyw/0", } modules := make([]Module, 5) modules[0].InitToModule1(50, 2) modules[1].InitToModule2([]int64{49, 50, 51}) modules[2].InitToModule3(52, "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5Jm64z4I0TTicv0TjN7Vl9bykUUibYKIOjicAwIt6Oy0Y6a1Rjp5Tos8tg/0") modules[3].InitToModule4([]Group{ Group{ GroupId: 49, Image: "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0", }, Group{ GroupId: 50, Image: "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5G1kdy3ViblHrR54gbCmbiaMnl5HpLGm5JFeENyO9FEZAy6mPypEpLibLA/0", }, Group{ GroupId: 52, Image: "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0", }, }) modules[4].InitToModule5([]int64{43, 44, 45, 46}, "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0") _shelf.Info.ModuleInfos = modules b, err := json.Marshal(_shelf) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", _shelf, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", _shelf, b, want) } } }
func TestGroupProductModifyRequestNewAndAppend(t *testing.T) { expectBytes := []byte(`{ "Name":"testexpress", "Assumer":0, "Valuation":0, "TopFee":[ { "Type":10000027, "Normal":{ "StartStandards":1, "StartFees":2, "AddStandards":3, "AddFees":1 }, "Custom":[ { "StartStandards":1, "StartFees":100, "AddStandards":1, "AddFees":3, "DestCountry":"中国", "DestProvince":"广东省", "DestCity":"广州市" } ] }, { "Type":10000028, "Normal":{ "StartStandards":1, "StartFees":3, "AddStandards":3, "AddFees":2 }, "Custom":[ { "StartStandards":1, "StartFees":10, "AddStandards":1, "AddFees":30, "DestCountry":"中国", "DestProvince":"广东省", "DestCity":"广州市" } ] }, { "Type":10000029, "Normal":{ "StartStandards":1, "StartFees":4, "AddStandards":3, "AddFees":3 }, "Custom":[ { "StartStandards":1, "StartFees":8, "AddStandards":2, "AddFees":11, "DestCountry":"中国", "DestProvince":"广东省", "DestCity":"广州市" } ] } ] }`) tpl := DeliveryTemplate{ Name: "testexpress", Assumer: ASSUMER_BUYER, Valuation: VALUATION_BY_ITEM, TopFees: []TopFee{ TopFee{ ExpressId: 10000027, Normal: TopFeeNormal{ StartStandards: 1, StartFees: 2, AddStandards: 3, AddFees: 1, }, Customs: []TopFeeCustom{ TopFeeCustom{ TopFeeNormal: TopFeeNormal{ StartStandards: 1, StartFees: 100, AddStandards: 1, AddFees: 3, }, DestCountry: "中国", DestProvince: "广东省", DestCity: "广州市", }, }, }, TopFee{ ExpressId: 10000028, Normal: TopFeeNormal{ StartStandards: 1, StartFees: 3, AddStandards: 3, AddFees: 2, }, Customs: []TopFeeCustom{ TopFeeCustom{ TopFeeNormal: TopFeeNormal{ StartStandards: 1, StartFees: 10, AddStandards: 1, AddFees: 30, }, DestCountry: "中国", DestProvince: "广东省", DestCity: "广州市", }, }, }, TopFee{ ExpressId: 10000029, Normal: TopFeeNormal{ StartStandards: 1, StartFees: 4, AddStandards: 3, AddFees: 3, }, Customs: []TopFeeCustom{ TopFeeCustom{ TopFeeNormal: TopFeeNormal{ StartStandards: 1, StartFees: 8, AddStandards: 2, AddFees: 11, }, DestCountry: "中国", DestProvince: "广东省", DestCity: "广州市", }, }, }, }, } b, err := json.Marshal(tpl) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", tpl, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", tpl, b, want) } } }
func TestProductMarshal(t *testing.T) { expectBytes := []byte(`{ "product_base":{ "name":"testaddproduct", "category_id":[ "537074298" ], "main_img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ulEKogfsiaua49pvLfUS8Ym0GSYjViaLic0FD3vN0V8PILcibEGb2fPfEOmw/0", "img":[ "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ulEKogfsiaua49pvLfUS8Ym0GSYjViaLic0FD3vN0V8PILcibEGb2fPfEOmw/0" ], "detail":[ { "text":"test first" }, { "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ul1UcLcwxrFdwTKYhH9Q5YZoCfX4Ncx655ZK6ibnlibCCErbKQtReySaVA/0" }, { "text":"test again" } ], "property":[ { "id":"1075741879", "vid":"1079749967" }, { "id":"1075754127", "vid":"1079795198" }, { "id":"1075777334", "vid":"1079837440" } ], "sku_info":[ { "id":"1075741873", "vid":[ "1079742386", "1079742363" ] } ], "buy_limit":10 }, "sku_list":[ { "sku_id":"1075741873:1079742386", "price":30, "icon_url":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl28bJj62XgfHPibY3ORKicN1oJ4CcoIr4BMbfA8LqyyjzOZzqrOGz3f5KWq1QGP3fo6TOTSYD3TBQjuw/0", "product_code":"testing", "ori_price":9000000, "quantity":800 }, { "sku_id":"1075741873:1079742363", "price":30, "icon_url":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl28bJj62XgfHPibY3ORKicN1oJ4CcoIr4BMbfA8LqyyjzOZzqrOGz3f5KWq1QGP3fo6TOTSYD3TBQjuw/0", "product_code":"testingtesting", "ori_price":9000000, "quantity":800 } ], "attrext":{ "location":{ "country":"中国", "province":"广东省", "city":"广州市", "address":"T.I.T创意园" }, "isPostFree":0, "isHasReceipt":1, "isUnderGuaranty":0, "isSupportReplace":0 }, "delivery_info":{ "delivery_type":0, "express":[ { "id":10000027, "price":100 }, { "id":10000028, "price":100 }, { "id":10000029, "price":100 } ] } }`) _product := Product{ AttrBase: AttrBase{ Name: "testaddproduct", CategoryIds: []string{"537074298"}, MainImage: "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ulEKogfsiaua49pvLfUS8Ym0GSYjViaLic0FD3vN0V8PILcibEGb2fPfEOmw/0", Images: []string{"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ulEKogfsiaua49pvLfUS8Ym0GSYjViaLic0FD3vN0V8PILcibEGb2fPfEOmw/0"}, Details: []Detail{{Text: "test first"}, {Image: "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl2iccsvYbHvnphkyGtnvjD3ul1UcLcwxrFdwTKYhH9Q5YZoCfX4Ncx655ZK6ibnlibCCErbKQtReySaVA/0"}, {Text: "test again"}}, Properties: []Property{{"1075741879", "1079749967"}, {"1075754127", "1079795198"}, {"1075777334", "1079837440"}}, SKUInfo: []SKU{{Id: "1075741873", ValueIds: []string{"1079742386", "1079742363"}}}, BuyLimit: 10, }, } _product.AttrExt = &AttrExt{ Location: Location{ Country: "中国", Province: "广东省", City: "广州市", Address: "T.I.T创意园", }, IsPostFree: 0, IsHasReceipt: 1, IsUnderGuaranty: 0, IsSupportReplace: 0, } _product.SKUList = []ProductSKU{ { Id: "1075741873:1079742386", Price: 30, IconURL: "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl28bJj62XgfHPibY3ORKicN1oJ4CcoIr4BMbfA8LqyyjzOZzqrOGz3f5KWq1QGP3fo6TOTSYD3TBQjuw/0", ProductCode: "testing", OriginalPrice: 9000000, Quantity: 800, }, { Id: "1075741873:1079742363", Price: 30, IconURL: "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl28bJj62XgfHPibY3ORKicN1oJ4CcoIr4BMbfA8LqyyjzOZzqrOGz3f5KWq1QGP3fo6TOTSYD3TBQjuw/0", ProductCode: "testingtesting", OriginalPrice: 9000000, Quantity: 800, }, } _product.DeliveryInfo = NewDeliveryInfoWithExpresses([]Express{ { Id: 10000027, Price: 100, }, { Id: 10000028, Price: 100, }, { Id: 10000029, Price: 100, }, }) b, err := json.Marshal(_product) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", _product, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", _product, b, want) } } }
func TestMarshalAndInitFunc(t *testing.T) { var expectBytes []byte // 控件1 ==================================================================== expectBytes = []byte(`{ "eid":1, "group_info":{ "group_id":50, "filter":{ "count":4 } } }`) var md1 Module md1.InitToModule1(50, 4) b, err := json.Marshal(md1) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", md1, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", md1, b, want) } } // 控件2 ==================================================================== expectBytes = []byte(`{ "eid":2, "group_infos":{ "groups":[ { "group_id":49 }, { "group_id":50 }, { "group_id":51 } ] } }`) var md2 Module md2.InitToModule2([]int64{49, 50, 51}) b, err = json.Marshal(md2) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", md2, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", md2, b, want) } } // 控件3 ==================================================================== expectBytes = []byte(`{ "eid":3, "group_info":{ "group_id":52, "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5Jm64z4I0TTicv0TjN7Vl9bykUUibYKIOjicAwIt6Oy0Y6a1Rjp5Tos8tg/0" } }`) var md3 Module md3.InitToModule3(52, "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5Jm64z4I0TTicv0TjN7Vl9bykUUibYKIOjicAwIt6Oy0Y6a1Rjp5Tos8tg/0") b, err = json.Marshal(md3) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", md3, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", md3, b, want) } } // 控件4 ==================================================================== expectBytes = []byte(`{ "eid":4, "group_infos":{ "groups":[ { "group_id":49, "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0" }, { "group_id":50, "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5G1kdy3ViblHrR54gbCmbiaMnl5HpLGm5JFeENyO9FEZAy6mPypEpLibLA/0" }, { "group_id":52, "img":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0" } ] } }`) var md4 Module md4.InitToModule4([]Group{ { 49, "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0", }, { 50, "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5G1kdy3ViblHrR54gbCmbiaMnl5HpLGm5JFeENyO9FEZAy6mPypEpLibLA/0", }, { 52, "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0", }, }) b, err = json.Marshal(md4) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", md4, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", md4, b, want) } } // 控件5 ==================================================================== expectBytes = []byte(`{ "eid":5, "group_infos":{ "groups":[ { "group_id":43 }, { "group_id":44 }, { "group_id":45 }, { "group_id":46 } ], "img_background":"http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0" } }`) var md5 Module md5.InitToModule5( []int64{43, 44, 45, 46}, "http://mmbiz.qpic.cn/mmbiz/4whpV1VZl29nqqObBwFwnIX3licVPnFV5uUQx7TLx4tB9qZfbe3JmqR4NkkEmpb5LUWoXF1ek9nga0IkeSSFZ8g/0", ) b, err = json.Marshal(md5) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", md5, err) } else { want := util.TrimSpace(expectBytes) if !bytes.Equal(b, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", md5, b, want) } } }
func TestMarshalAndNewFunc(t *testing.T) { // 纯文本模板消息============================================================== want := util.TrimSpace([]byte(`{ "touser":"******", "template_id":"aygtGTLdrjHJP7Bu4EdkptNfYaeFKi98ygn2kitCJ6fAfdmN88naVvX6V5uIV5x0", "data":{ "Goods":"苹果", "Unit_price":"RMB 20.13", "Quantity":"5", "Total":"RMB 100.65", "Source":{ "Shop":"Jas屌丝商店", "Recommend":"5颗星" } } }`)) var data struct { Goods string Unit_price string Quantity string Total string Source struct { Shop string Recommend string } } data.Goods = "苹果" data.Unit_price = "RMB 20.13" data.Quantity = "5" data.Total = "RMB 100.65" data.Source.Shop = "Jas屌丝商店" data.Source.Recommend = "5颗星" msg := NewMsg("OPENID", "aygtGTLdrjHJP7Bu4EdkptNfYaeFKi98ygn2kitCJ6fAfdmN88naVvX6V5uIV5x0", &data) have, err := json.Marshal(msg) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", msg, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", msg, have, want) } // 带链接的模板消息============================================================== want = util.TrimSpace([]byte(`{ "touser":"******", "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY", "data":{ "User":{ "value":"黄先生", "color":"#173177" }, "Date":{ "value":"06月07日 19时24分", "color":"#173177" }, "CardNumber":{ "value":"0426", "color":"#173177" }, "Type":{ "value":"消费", "color":"#173177" }, "Money":{ "value":"人民币260.00元", "color":"#173177" }, "DeadTime":{ "value":"06月07日19时24分", "color":"#173177" }, "Left":{ "value":"6504.09", "color":"#173177" } }, "url":"http://weixin.qq.com/download", "topcolor":"#FF0000" }`)) type DateValue struct { Value string `json:"value"` Color string `json:"color"` } var data1 struct { User DateValue Date DateValue CardNumber DateValue Type DateValue Money DateValue DeadTime DateValue Left DateValue } data1.User.Value = "黄先生" data1.User.Color = "#173177" data1.Date.Value = "06月07日 19时24分" data1.Date.Color = "#173177" data1.CardNumber.Value = "0426" data1.CardNumber.Color = "#173177" data1.Type.Value = "消费" data1.Type.Color = "#173177" data1.Money.Value = "人民币260.00元" data1.Money.Color = "#173177" data1.DeadTime.Value = "06月07日19时24分" data1.DeadTime.Color = "#173177" data1.Left.Value = "6504.09" data1.Left.Color = "#173177" msg1 := NewMsgWithLink("OPENID", "ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY", &data1, "http://weixin.qq.com/download", "#FF0000") have, err = json.Marshal(msg1) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", msg1, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", msg1, have, want) } }
func TestMarshalAndNewFunc(t *testing.T) { // 测试文本消息=============================================================== want := util.TrimSpace([]byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>text</MsgType> <Content>你好</Content> </xml>`)) text := NewText("toUser", "fromUser", "你好", 12345678) have, err := xml.Marshal(text) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", text, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", text, have, want) } // 测试图片消息=============================================================== want = util.TrimSpace([]byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>image</MsgType> <Image> <MediaId>media_id</MediaId> </Image> </xml>`)) image := NewImage("toUser", "fromUser", "media_id", 12345678) have, err = xml.Marshal(image) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", image, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", image, have, want) } // 测试语音消息=============================================================== want = util.TrimSpace([]byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>voice</MsgType> <Voice> <MediaId>media_id</MediaId> </Voice> </xml>`)) voice := NewVoice("toUser", "fromUser", "media_id", 12345678) have, err = xml.Marshal(voice) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", voice, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", voice, have, want) } // 测试视频消息=============================================================== want = util.TrimSpace([]byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>video</MsgType> <Video> <MediaId>media_id</MediaId> <Title>title</Title> <Description>description</Description> </Video> </xml>`)) video := NewVideo("toUser", "fromUser", "media_id", "title", "description", 12345678) have, err = xml.Marshal(video) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", video, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", video, have, want) } // 测试音乐消息=============================================================== want = util.TrimSpace([]byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>music</MsgType> <Music> <Title>TITLE</Title> <Description>DESCRIPTION</Description> <MusicUrl>MUSIC_Url</MusicUrl> <HQMusicUrl>HQ_MUSIC_Url</HQMusicUrl> <ThumbMediaId>media_id</ThumbMediaId> </Music> </xml>`)) music := NewMusic("toUser", "fromUser", "media_id", "MUSIC_Url", "HQ_MUSIC_Url", "TITLE", "DESCRIPTION", 12345678) have, err = xml.Marshal(music) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", music, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", music, have, want) } // 测试图文消息, 没有文章======================================================= want = util.TrimSpace([]byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>news</MsgType> <ArticleCount>0</ArticleCount> <Articles> </Articles> </xml>`)) news := NewNews("toUser", "fromUser", make([]NewsArticle, 0, 2), 12345678) have, err = xml.Marshal(news) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", news, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", news, have, want) } // 测试图文消息, 1篇文章======================================================= want = util.TrimSpace([]byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>news</MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title>title1</Title> <Description>description1</Description> <PicUrl>picurl</PicUrl> <Url>url</Url> </item> </Articles> </xml>`)) news.AppendArticle(NewsArticle{ Title: "title1", Description: "description1", PicURL: "picurl", URL: "url", }) have, err = xml.Marshal(news) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", news, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", news, have, want) } // 测试图文消息, 2篇文章======================================================= want = util.TrimSpace([]byte(`<xml> <ToUserName>toUser</ToUserName> <FromUserName>fromUser</FromUserName> <CreateTime>12345678</CreateTime> <MsgType>news</MsgType> <ArticleCount>2</ArticleCount> <Articles> <item> <Title>title1</Title> <Description>description1</Description> <PicUrl>picurl</PicUrl> <Url>url</Url> </item> <item> <Title>title</Title> <Description>description</Description> <PicUrl>picurl</PicUrl> <Url>url</Url> </item> </Articles> </xml>`)) news.AppendArticle(NewsArticle{ Title: "title", Description: "description", PicURL: "picurl", URL: "url", }) have, err = xml.Marshal(news) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", news, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", news, have, want) } // 测试将消息转发到多客服======================================================= want = util.TrimSpace([]byte(`<xml> <ToUserName>touser</ToUserName> <FromUserName>fromuser</FromUserName> <CreateTime>1399197672</CreateTime> <MsgType>transfer_customer_service</MsgType> </xml>`)) transToCS := NewTransferToCustomerService("touser", "fromuser", 1399197672) have, err = xml.Marshal(transToCS) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", transToCS, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", transToCS, have, want) } // 测试将消息转发到指定客服======================================================= want = util.TrimSpace([]byte(`<xml> <ToUserName>touser</ToUserName> <FromUserName>fromuser</FromUserName> <CreateTime>1399197672</CreateTime> <MsgType>transfer_customer_service</MsgType> <TransInfo> <KfAccount>test1@test</KfAccount> </TransInfo> </xml>`)) transToSCS := NewTransferToSpecialCustomerService("touser", "fromuser", "test1@test", 1399197672) have, err = xml.Marshal(transToSCS) if err != nil { t.Errorf("xml.Marshal(%#q):\nError: %s\n", transToSCS, err) } else if !bytes.Equal(have, want) { t.Errorf("xml.Marshal(%#q):\nhave %#s\nwant %#s\n", transToSCS, have, want) } }
func TestMarshalAndNewFunc(t *testing.T) { // 测试文本消息=============================================================== want := util.TrimSpace([]byte(`{ "touser":"******", "msgtype":"text", "text":{ "content":"Hello World" } }`)) text := NewText("OPENID", "Hello World") have, err := json.Marshal(text) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", text, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", text, have, want) } // 测试图片消息=============================================================== want = util.TrimSpace([]byte(`{ "touser":"******", "msgtype":"image", "image":{ "media_id":"MEDIA_ID" } }`)) image := NewImage("OPENID", "MEDIA_ID") have, err = json.Marshal(image) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", image, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", image, have, want) } // 测试语音消息=============================================================== want = util.TrimSpace([]byte(`{ "touser":"******", "msgtype":"voice", "voice":{ "media_id":"MEDIA_ID" } }`)) voice := NewVoice("OPENID", "MEDIA_ID") have, err = json.Marshal(voice) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", voice, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", voice, have, want) } // 测试视频消息=============================================================== want = util.TrimSpace([]byte(`{ "touser":"******", "msgtype":"video", "video":{ "media_id":"MEDIA_ID", "thumb_media_id":"THUMB_MEDIA_ID", "title":"TITLE", "description":"DESCRIPTION" } }`)) video := NewVideo("OPENID", "MEDIA_ID", "THUMB_MEDIA_ID", "TITLE", "DESCRIPTION") have, err = json.Marshal(video) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", video, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", video, have, want) } // 测试音乐消息=============================================================== want = util.TrimSpace([]byte(`{ "touser":"******", "msgtype":"music", "music":{ "title":"MUSIC_TITLE", "description":"MUSIC_DESCRIPTION", "musicurl":"MUSIC_URL", "hqmusicurl":"HQ_MUSIC_URL", "thumb_media_id":"THUMB_MEDIA_ID" } }`)) music := NewMusic("OPENID", "THUMB_MEDIA_ID", "MUSIC_URL", "HQ_MUSIC_URL", "MUSIC_TITLE", "MUSIC_DESCRIPTION") have, err = json.Marshal(music) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", music, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", music, have, want) } // 图文消息================================================================== articles := make([]NewsArticle, 2) articles[0].Init("Happy Day1", "Is Really A Happy Day1", "URL1", "PIC_URL1") articles[1].Init("Happy Day2", "Is Really A Happy Day2", "URL2", "PIC_URL2") // 测试图文消息, 没有文章======================================================= want = util.TrimSpace([]byte(`{ "touser":"******", "msgtype":"news", "news":{} }`)) news := NewNews("OPENID", articles[:0]) have, err = json.Marshal(news) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", news, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", news, have, want) } // 测试图文消息, 1篇文章======================================================= want = util.TrimSpace([]byte(`{ "touser":"******", "msgtype":"news", "news":{ "articles":[ { "title":"Happy Day1", "description":"Is Really A Happy Day1", "url":"URL1", "picurl":"PIC_URL1" } ] } }`)) news = NewNews("OPENID", articles[:1]) have, err = json.Marshal(news) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", news, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", news, have, want) } // 测试图文消息, 2篇文章======================================================= want = util.TrimSpace([]byte(`{ "touser":"******", "msgtype":"news", "news":{ "articles":[ { "title":"Happy Day1", "description":"Is Really A Happy Day1", "url":"URL1", "picurl":"PIC_URL1" }, { "title":"Happy Day2", "description":"Is Really A Happy Day2", "url":"URL2", "picurl":"PIC_URL2" } ] } }`)) news = NewNews("OPENID", articles[:2]) have, err = json.Marshal(news) if err != nil { t.Errorf("json.Marshal(%#q):\nError: %s\n", news, err) } else if !bytes.Equal(have, want) { t.Errorf("json.Marshal(%#q):\nhave %#s\nwant %#s\n", news, have, want) } }