Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

313 lignes
12KB

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