You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

313 lines
12KB

  1. package main
  2. import (
  3. "testing"
  4. )
  5. func TestReadCommonHeader(t *testing.T) {
  6. var msg = `<xml><ToUserName><![CDATA[gh_f09231355c68]]></ToUserName>
  7. <FromUserName><![CDATA[oUN420bxqFqlx0ZQHciUOesZO3PE]]></FromUserName>
  8. <CreateTime>1492972518</CreateTime>
  9. <MsgType><![CDATA[event]]></MsgType>
  10. <Event><![CDATA[CLICK]]></Event>
  11. <EventKey><![CDATA[V1001_TODAY_MUSIC]]></EventKey>
  12. </xml>`
  13. h := ReadCommonHeader(msg)
  14. AssertEqual(t, h.ToUserName, "gh_f09231355c68", "ToUserName failed")
  15. AssertEqual(t, h.FromUserName, "oUN420bxqFqlx0ZQHciUOesZO3PE", "FromUserName failed")
  16. AssertEqual(t, h.CreateTime, int64(1492972518), "CreateTime Failed")
  17. AssertEqual(t, h.MsgType, "event", "MsgType failed")
  18. }
  19. func TestTxtMsg(t *testing.T) {
  20. msg := `<xml>
  21. <ToUserName><![CDATA[toUser]]></ToUserName>
  22. <FromUserName><![CDATA[fromUser]]></FromUserName>
  23. <CreateTime>1348831860</CreateTime>
  24. <MsgType><![CDATA[text]]></MsgType>
  25. <Content><![CDATA[this is a test]]></Content>
  26. <MsgId>1234567890123456</MsgId>
  27. </xml>`
  28. h := ReadCommonHeader(msg)
  29. AssertEqual(t, h.MsgType, "text", "Expect text type")
  30. m := ReadTextMsg(msg)
  31. AssertEqual(t, m.Content, "this is a test", "Content failed")
  32. AssertEqual(t, m.MsgId, int64(1234567890123456), "MsgId not match")
  33. }
  34. func TestPicMsg(t *testing.T) {
  35. msg := `<xml>
  36. <ToUserName><![CDATA[toUser]]></ToUserName>
  37. <FromUserName><![CDATA[fromUser]]></FromUserName>
  38. <CreateTime>1348831860</CreateTime>
  39. <MsgType><![CDATA[image]]></MsgType>
  40. <PicUrl><![CDATA[this is a url]]></PicUrl>
  41. <MediaId><![CDATA[media_id]]></MediaId>
  42. <MsgId>1234567890123456</MsgId>
  43. </xml>`
  44. h := ReadCommonHeader(msg)
  45. AssertEqual(t, h.MsgType, "image", "")
  46. m := ReadPicMsg(msg)
  47. AssertEqual(t, m.MediaId, "media_id", "Media id failed")
  48. AssertEqual(t, m.PicUrl, "this is a url", "PicUrl failed")
  49. AssertEqual(t, m.MsgId, int64(1234567890123456), "MsgId not match")
  50. }
  51. func TestVoiceMsg(t *testing.T) {
  52. msg := `<xml>
  53. <ToUserName><![CDATA[toUser]]></ToUserName>
  54. <FromUserName><![CDATA[fromUser]]></FromUserName>
  55. <CreateTime>1357290913</CreateTime>
  56. <MsgType><![CDATA[voice]]></MsgType>
  57. <MediaId><![CDATA[media_id]]></MediaId>
  58. <Format><![CDATA[Format]]></Format>
  59. <Recognition><![CDATA[some result]]></Recognition>
  60. <MsgId>1234567890123456</MsgId>
  61. </xml>`
  62. h := ReadCommonHeader(msg)
  63. AssertEqual(t, h.MsgType, "voice", "Message type should be voice")
  64. m := ReadVoiceMsg(msg)
  65. AssertEqual(t, m.MediaId, "media_id", "Media id failed")
  66. AssertEqual(t, m.Format, "Format", "Format failed")
  67. AssertEqual(t, m.Recognition, "some result", "Recognition failed")
  68. AssertEqual(t, m.MsgId, int64(1234567890123456), "MsgId not match")
  69. }
  70. func TestVideoMsg(t *testing.T) {
  71. msg := `<xml>
  72. <ToUserName><![CDATA[toUser]]></ToUserName>
  73. <FromUserName><![CDATA[fromUser]]></FromUserName>
  74. <CreateTime>1357290913</CreateTime>
  75. <MsgType><![CDATA[video]]></MsgType>
  76. <MediaId><![CDATA[media_id]]></MediaId>
  77. <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
  78. <MsgId>1234567890123456</MsgId>
  79. </xml>`
  80. h := ReadCommonHeader(msg)
  81. AssertEqual(t, h.MsgType, "video", "Message type should be video")
  82. m := ReadVideoMsg(msg)
  83. AssertEqual(t, m.MediaId, "media_id", "Media id failed")
  84. AssertEqual(t, m.ThumbMediaId, "thumb_media_id", "Format failed")
  85. AssertEqual(t, m.MsgId, int64(1234567890123456), "MsgId not match")
  86. }
  87. func TestShortVideoMsg(t *testing.T) {
  88. msg := `<xml>
  89. <ToUserName><![CDATA[toUser]]></ToUserName>
  90. <FromUserName><![CDATA[fromUser]]></FromUserName>
  91. <CreateTime>1357290913</CreateTime>
  92. <MsgType><![CDATA[shortvideo]]></MsgType>
  93. <MediaId><![CDATA[media_id]]></MediaId>
  94. <ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
  95. <MsgId>1234567890123456</MsgId>
  96. </xml>`
  97. h := ReadCommonHeader(msg)
  98. AssertEqual(t, h.MsgType, "shortvideo", "Message type should be video")
  99. m := ReadShortVideoMsg(msg)
  100. AssertEqual(t, m.MediaId, "media_id", "Media id failed")
  101. AssertEqual(t, m.ThumbMediaId, "thumb_media_id", "thumb_media_id failed")
  102. AssertEqual(t, m.MsgId, int64(1234567890123456), "MsgId not match")
  103. }
  104. func TestLocationMsg(t *testing.T) {
  105. msg := `<xml>
  106. <ToUserName><![CDATA[toUser]]></ToUserName>
  107. <FromUserName><![CDATA[fromUser]]></FromUserName>
  108. <CreateTime>1351776360</CreateTime>
  109. <MsgType><![CDATA[location]]></MsgType>
  110. <Location_X>23.134521</Location_X>
  111. <Location_Y>113.358803</Location_Y>
  112. <Scale>20</Scale>
  113. <Label><![CDATA[Location description]]></Label>
  114. <MsgId>1234567890123456</MsgId>
  115. </xml>`
  116. h := ReadCommonHeader(msg)
  117. AssertEqual(t, h.MsgType, "location", "Message type should be video")
  118. m := ReadLocationMsg(msg)
  119. AssertEqual(t, m.Location_X, (float64(23.134521)), "Location_X failed")
  120. AssertEqual(t, m.Location_Y, (float64(113.358803)), "Location_Y failed")
  121. AssertEqual(t, m.Scale, int(20), "Scale failed")
  122. AssertEqual(t, m.Label, "Location description", "Label failed")
  123. AssertEqual(t, m.MsgId, int64(1234567890123456), "MsgId not match")
  124. }
  125. func TestLinkMsg(t *testing.T) {
  126. msg := `<xml>
  127. <ToUserName><![CDATA[toUser]]></ToUserName>
  128. <FromUserName><![CDATA[fromUser]]></FromUserName>
  129. <CreateTime>1351776360</CreateTime>
  130. <MsgType><![CDATA[link]]></MsgType>
  131. <Title><![CDATA[somelinktitle]]></Title>
  132. <Description><![CDATA[somelinktitleDescription]]></Description>
  133. <Url><![CDATA[url]]></Url>
  134. <MsgId>1234567890123456</MsgId>
  135. </xml>`
  136. h := ReadCommonHeader(msg)
  137. AssertEqual(t, h.MsgType, "link", "Message type should be link")
  138. m := ReadLinkMsg(msg)
  139. AssertEqual(t, m.Title, "somelinktitle", "Title failed")
  140. AssertEqual(t, m.Description, "somelinktitleDescription", "Description failed")
  141. AssertEqual(t, m.Url, "url", "Url failed")
  142. AssertEqual(t, m.MsgId, int64(1234567890123456), "MsgId not match")
  143. }
  144. func TestReadEncryptMsg(t *testing.T) {
  145. msg := `<xml>
  146. <ToUserName><![CDATA[gh_f09231355c68]]></ToUserName>
  147. <Encrypt><![CDATA[Dv3epMMhmmGU1o6lg71IfbpRrOYX1S8oZX3nwW0uBAHHMKx62T4KniS4efuf8fNHWf6gsF/YGaDraF6HhGOdKp8vbzluiIEsCnIveKN1pO+IUDOBBxzPAzQSFSYJ3OwVXWmBdBcC1S5guQrOxLysH+6UIWSor9cEef+94UAKTNw/MLB0zPfqK5TVoN1A0yobmP9OU8wtFJP0L1aKySPFGGbqBMfJkStRTrYLjIQfZ7pAIisB/g3c87w26r7LUz9hVh4ey3/T6cjQ8vKvgNKL3j8y4IwUdmnmTPrrdOsyA1pz69977xKHFtIptZYHKGD9dTW6PyPcKKTP6iOod6Agb8TI+is80auqHkjvUyvT/xPG8fxak/wI9BKzKndAnwxlcDG/8WElkHVl0TwxpsCb48ZxLEf4GFKaYaliC9xBVweKLNnqdbBmzwfe7GBNWC61h7KQYqwtZqMkZs3BBsStcQ==]]></Encrypt>
  148. </xml>`
  149. m := ReadEncryptedMsg(msg)
  150. AssertEqual(t, m.ToUserName, "gh_f09231355c68", "ToUserName failed")
  151. AssertEqual(t, m.Encrypt, "Dv3epMMhmmGU1o6lg71IfbpRrOYX1S8oZX3nwW0uBAHHMKx62T4KniS4efuf8fNHWf6gsF/YGaDraF6HhGOdKp8vbzluiIEsCnIveKN1pO+IUDOBBxzPAzQSFSYJ3OwVXWmBdBcC1S5guQrOxLysH+6UIWSor9cEef+94UAKTNw/MLB0zPfqK5TVoN1A0yobmP9OU8wtFJP0L1aKySPFGGbqBMfJkStRTrYLjIQfZ7pAIisB/g3c87w26r7LUz9hVh4ey3/T6cjQ8vKvgNKL3j8y4IwUdmnmTPrrdOsyA1pz69977xKHFtIptZYHKGD9dTW6PyPcKKTP6iOod6Agb8TI+is80auqHkjvUyvT/xPG8fxak/wI9BKzKndAnwxlcDG/8WElkHVl0TwxpsCb48ZxLEf4GFKaYaliC9xBVweKLNnqdbBmzwfe7GBNWC61h7KQYqwtZqMkZs3BBsStcQ==", "ToUserName failed")
  152. }
  153. func TestReadEventClick(t *testing.T) {
  154. msg := `<xml><ToUserName><![CDATA[gh_f09231355c68]]></ToUserName>
  155. <FromUserName><![CDATA[oUN420bxqFqlx0ZQHciUOesZO3PE]]></FromUserName>
  156. <CreateTime>1493903506</CreateTime>
  157. <MsgType><![CDATA[event]]></MsgType>
  158. <Event><![CDATA[CLICK]]></Event>
  159. <EventKey><![CDATA[MEMBER_SEARCH]]></EventKey>
  160. </xml>`
  161. m := ReadEventMsg(msg)
  162. AssertEqual(t, m.Event, "CLICK", "Expect Click event")
  163. AssertEqual(t, m.EventKey, "MEMBER_SEARCH", "Expect MEMBER_SEARCH")
  164. AssertEqual(t, m.Ticket, "", "Expect Empty Ticket")
  165. AssertEqual(t, m.Latitude, 0.0, "Expect 0")
  166. AssertEqual(t, m.Longitude, 0.0, "Expect 0")
  167. AssertEqual(t, m.Precision, 0.0, "Expect 0")
  168. }
  169. func TestAcceptLocationInfo(t *testing.T) {
  170. // POST /api?signature=1a9991fc0d1916495e26e07dca7d2c305c529b0d&timestamp=1493303819&nonce=1367712073&openid=oUN420bxqFqlx0ZQHciUOesZO3PE&encrypt_type=aes&msg_signature=46331890d4c95a017a014a009ccc7f37228665db HTTP/1.1
  171. // Host: wechat.hitxy.org.au
  172. // Accept: */*
  173. // Cache-Control: no-cache
  174. // Connection: Keep-Alive
  175. // Content-Length: 618
  176. // Content-Type: text/xml
  177. // Pragma: no-cache
  178. // User-Agent: Mozilla/4.0
  179. // X-Forwarded-For: 103.7.30.105
  180. // X-Forwarded-Host: wechat.hitxy.org.au
  181. // X-Forwarded-Server: wechat.hitxy.org.au
  182. // <xml>
  183. // <ToUserName><![CDATA[gh_f09231355c68]]></ToUserName>
  184. // <Encrypt><![CDATA[OyVaYtbrg9fVyLiNJlL18YFP7C36y9kGL3SZDz5ZpWcelnIfUQwUhXXfl2yvbRlaCRW9q9hqPZ0W9ha2p4KzmWikw/vcorrTagz5vGpr980dEqDb0whsybk5R7jZ7hj7+QfZCEyDxYy/O/QsYFYesq6SsDjUQ7JWoxmOZz6g2Sv2WEJ6cXo2iL1fGswc0jYlSynsp3lnVFeVcT4M0a2IEXAxEEuQ7vB9EMAkRQtl5spMDrrH/xXya6O0N9ux3jw+CTl7Oy4TCnJNRxOCq+6SJR4P3PWgWMKcvvgWcTeVGCvduPHDpYbJ+dpfqlxa3WNASrXpSYgQu8edpuIBIXx0b51jBQF1tcekA+z5nCUS53/9CHVo1a1YXLco5bzdMMh7QnafQOtxBbhz1YASj3XpJpyW+qfXc/QoEsZAhVdZVKBNVRz7yJKarkcQopJhevMzFGP0agjkYA/wQ8MAXD7JJ3r8ecOEhebOhfpt+fQ21yYS7YyFyQeUxEhhsSG8O9Ve]]></Encrypt>
  185. // </xml>
  186. // Decript as:
  187. msg := `
  188. <xml><ToUserName><![CDATA[gh_f09231355c68]]></ToUserName>
  189. <FromUserName><![CDATA[oUN420bxqFqlx0ZQHciUOesZO3PE]]></FromUserName>
  190. <CreateTime>1493304047</CreateTime>
  191. <MsgType><![CDATA[event]]></MsgType>
  192. <Event><![CDATA[LOCATION]]></Event>
  193. <Latitude>-33.764935</Latitude>
  194. <Longitude>150.960327</Longitude>
  195. <Precision>110.000000</Precision>
  196. </xml>`
  197. m := ReadEventMsg(msg)
  198. AssertEqual(t, m.Event, "LOCATION", "Expect LOCATION event")
  199. AssertEqual(t, m.Longitude, 150.960327, "Expect 150.960327")
  200. AssertEqual(t, m.Latitude, -33.764935, "Expect -33.764935")
  201. AssertEqual(t, m.Precision, 110.000000, "Expect 110.000000")
  202. AssertEqual(t, m.EventKey, "", "Expect Empty EventKey")
  203. AssertEqual(t, m.Ticket, "", "Expect Empty Ticket")
  204. }
  205. func TestReadEventFollow(t *testing.T) {
  206. msg := `<xml>
  207. <ToUserName><![CDATA[toUser]]></ToUserName>
  208. <FromUserName><![CDATA[FromUser]]></FromUserName>
  209. <CreateTime>123456789</CreateTime>
  210. <MsgType><![CDATA[event]]></MsgType>
  211. <Event><![CDATA[subscribe]]></Event>
  212. </xml>`
  213. m := ReadEventMsg(msg)
  214. AssertEqual(t, m.Event, "subscribe", "Expect subscribe")
  215. AssertEqual(t, m.EventKey, "", "Expect Empty EventKey")
  216. AssertEqual(t, m.Ticket, "", "Expect Empty Ticket")
  217. AssertEqual(t, m.Latitude, 0.0, "Expect 0")
  218. AssertEqual(t, m.Longitude, 0.0, "Expect 0")
  219. AssertEqual(t, m.Precision, 0.0, "Expect 0")
  220. }
  221. func TestReadEventScanNoFollow(t *testing.T) {
  222. msg := `<xml><ToUserName><![CDATA[toUser]]></ToUserName>
  223. <FromUserName><![CDATA[FromUser]]></FromUserName>
  224. <CreateTime>123456789</CreateTime>
  225. <MsgType><![CDATA[event]]></MsgType>
  226. <Event><![CDATA[subscribe]]></Event>
  227. <EventKey><![CDATA[qrscene_123123]]></EventKey>
  228. <Ticket><![CDATA[TICKET]]></Ticket>
  229. </xml>`
  230. m := ReadEventMsg(msg)
  231. AssertEqual(t, m.Event, "subscribe", "Expect subscribe")
  232. AssertEqual(t, m.EventKey, "qrscene_123123", "Expect qrscene_123123")
  233. AssertEqual(t, m.Ticket, "TICKET", "Expect TICKET")
  234. AssertEqual(t, m.Latitude, 0.0, "Expect 0")
  235. AssertEqual(t, m.Longitude, 0.0, "Expect 0")
  236. AssertEqual(t, m.Precision, 0.0, "Expect 0")
  237. }
  238. func TestReadEventScanWithFollow(t *testing.T) {
  239. msg := `<xml>
  240. <ToUserName><![CDATA[toUser]]></ToUserName>
  241. <FromUserName><![CDATA[FromUser]]></FromUserName>
  242. <CreateTime>123456789</CreateTime>
  243. <MsgType><![CDATA[event]]></MsgType>
  244. <Event><![CDATA[SCAN]]></Event>
  245. <EventKey><![CDATA[SCENE_VALUE]]></EventKey>
  246. <Ticket><![CDATA[TICKET]]></Ticket>
  247. </xml>`
  248. m := ReadEventMsg(msg)
  249. AssertEqual(t, m.Event, "SCAN", "Expect SCAN")
  250. AssertEqual(t, m.EventKey, "SCENE_VALUE", "Expect SCENE_VALUE")
  251. AssertEqual(t, m.Ticket, "TICKET", "Expect TICKET")
  252. AssertEqual(t, m.Latitude, 0.0, "Expect 0")
  253. AssertEqual(t, m.Longitude, 0.0, "Expect 0")
  254. AssertEqual(t, m.Precision, 0.0, "Expect 0")
  255. }
  256. func TestReadEventView(t *testing.T) {
  257. msg := `<xml>
  258. <ToUserName><![CDATA[toUser]]></ToUserName>
  259. <FromUserName><![CDATA[FromUser]]></FromUserName>
  260. <CreateTime>123456789</CreateTime>
  261. <MsgType><![CDATA[event]]></MsgType>
  262. <Event><![CDATA[VIEW]]></Event>
  263. <EventKey><![CDATA[www.qq.com]]></EventKey>
  264. </xml>`
  265. m := ReadEventMsg(msg)
  266. AssertEqual(t, m.Event, "VIEW", "Expect VIEW")
  267. AssertEqual(t, m.EventKey, "www.qq.com", "Expectwww.qq.com")
  268. AssertEqual(t, m.Ticket, "", "Expect Empty Ticket")
  269. AssertEqual(t, m.Latitude, 0.0, "Expect 0")
  270. AssertEqual(t, m.Longitude, 0.0, "Expect 0")
  271. AssertEqual(t, m.Precision, 0.0, "Expect 0")
  272. }