PageRenderTime 58ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/vkontakte_spy/tests/parsers.py

https://github.com/trashgenerator/vkontakte-spy
Python | 325 lines | 308 code | 16 blank | 1 comment | 0 complexity | 3bce645cb313a97dc9bcac3de183b6fe MD5 | raw file
Possible License(s): BSD-3-Clause
  1. #-*-coding:utf-8-*-
  2. import datetime
  3. from pprint import pprint as pp
  4. from django.test import TestCase
  5. from vkontakte_spy import parsers, connectors
  6. class ParsersTests(TestCase):
  7. def test_rus2eng(self):
  8. self.failUnlessEqual(parsers.rus2eng('18 июля 2010'.decode('utf-8')),
  9. '18 july 2010')
  10. def test_rus2eng_today(self):
  11. self.failUnlessEqual(parsers.rus2eng('сегодня'.decode('utf-8')),
  12. datetime.date.today().strftime("%d %B %Y"))
  13. def test_rus2eng_yesterday(self):
  14. self.failUnlessEqual(parsers.rus2eng('вчера'.decode('utf-8')),
  15. (datetime.date.today() -
  16. datetime.timedelta(1)).strftime("%d %B %Y"))
  17. def test_abslinks(self):
  18. text = '<a class="memLink" href="/id123456">User</a> добавила приложение <a href="/app123456">Application</a>.'
  19. text_final = '<a class="memLink" href="http://vkontakte.ru/id123456">User</a> добавила приложение <a href="http://vkontakte.ru/app123456">Application</a>.'
  20. self.failUnlessEqual(parsers.abslinks(text.decode('utf-8'),
  21. 'http://vkontakte.ru'), text_final.decode('utf-8'))
  22. class VKNewsParserTest(TestCase):
  23. def setUp(self):
  24. self.vkconnector = connectors.DummyVKConnector()
  25. self.parser = parsers.VKNewsParser(self.vkconnector)
  26. def test_pageexists_true(self):
  27. text = '<ul class="pageList"><li class="current">1</li><li><a href="newsfeed.php?section=&offset=50" onclick="return getPage(50)">2</a></li><li><a href="newsfeed.php?section=&offset=100" onclick="return getPage(100)">3</a></li>'
  28. self.assertTrue(self.parser.pageexists(text, 50))
  29. def test_pageexists_false(self):
  30. text = '<ul class="pageList"><li class="current">1</li><li><a href="newsfeed.php?section=&offset=50" onclick="return getPage(50)">2</a></li><li><a href="newsfeed.php?section=&offset=100" onclick="return getPage(100)">3</a></li>'
  31. self.assertFalse(self.parser.pageexists(text, 300))
  32. def test_parsepage(self):
  33. text = texts[0]
  34. self.failUnlessEqual(len(self.parser.parsepage(text)), 2)
  35. def test_parsepage_date(self):
  36. text = texts[0]
  37. news = self.parser.parsepage(text)
  38. date = datetime.datetime.now().replace(hour=12, minute=15, second=0,
  39. microsecond=0)
  40. self.failUnlessEqual(news[0]['date'], date)
  41. def test_parsepage_date(self):
  42. text = texts[0]
  43. news = self.parser.parsepage(text)
  44. date = datetime.datetime.now().replace(hour=12, minute=15, second=0,
  45. microsecond=0)
  46. self.failUnlessEqual(news[0]['date'], date)
  47. def test_parsepage_type(self):
  48. text = texts[0]
  49. news = self.parser.parsepage(text)
  50. self.failUnlessEqual(news[1]['type'], 'friends')
  51. def test_parsepage_vkuser_pk(self):
  52. text = texts[0]
  53. news = self.parser.parsepage(text)
  54. self.failUnlessEqual(news[1]['vkuser_pk'], 9374)
  55. def test_parsepage_row(self):
  56. text = texts[0]
  57. news = self.parser.parsepage(text)
  58. raw = u"""\n<tr>\n<td class="feedIconWrap">\n<div><img class="feedIcon" src="images/icons/friends_s.gif?2" /></div>\n</td>\n<td class="feedStory">\n<a class="memLink" href="/id9374">User2</a> \u0434\u043e\u0431\u0430\u0432\u0438\u043b 2 \u0434\u0440\u0443\u0437\u0435\u0439: <div class="feedFriends"><div class="feedFriend">\n<div class="feedFriendImg">\n<a href="/user3"><img src="http://cs9934.vkontakte.ru/u2345/c_g2d123.jpg" /></a>\n</div>\n<div class="feedFriendText">\n<a href="/user3">User3Surname<br /><small>User3Name</small></a>\n</div>\n</div><div class="feedFriend">\n<div class="feedFriendImg">\n<a href="/id34523"><img src="http://cs1345.vkontakte.ru/u24235/c_45dg13.jpg" /></a>\n</div>\n<div class="feedFriendText">\n<a href="/id34523">User4Surname<br /><small>User4Name</small></a>\n</div>\n</div></div>\n</td>\n<td class="feedTime">\n<div>12:05</div>\n</td>\n</tr>\n"""
  59. self.failUnlessEqual(news[1]['raw'], raw)
  60. def test_parse(self):
  61. self.vkconnector.text = texts[1]
  62. news = self.parser.parse()
  63. self.failUnlessEqual(len(news), 1)
  64. def test_parse_lastdate(self):
  65. self.vkconnector.text = texts[1]
  66. lastdate = (datetime.datetime.now() -
  67. datetime.timedelta(1)).replace(hour=23, minute=40, second=0,
  68. microsecond=0)
  69. news = self.parser.parse(lastdate=lastdate)
  70. self.failUnlessEqual(len(news), 4)
  71. def test_parse_lastdate_lastitems(self):
  72. self.vkconnector.text = texts[1]
  73. lastdate = (datetime.datetime.now() -
  74. datetime.timedelta(1)).replace(hour=23, minute=40, second=0,
  75. microsecond=0)
  76. lastitems = ({'raw': u'\n<tr>\n<td class="feedIconWrap">\n<div><img class="feedIcon" src="images/icons/friends_s.gif?2" /></div>\n</td>\n<td class="feedStory">\n<a class="memLink" href="/id57473">User10</a> \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430 2 \u0434\u0440\u0443\u0437\u0435\u0439: <div class="feedFriends"><div class="feedFriend">\n<div class="feedFriendImg">\n<a href="/User4"><img src="http://cs12344.vkontakte.ru/u124124/c_342ffc3.jpg" /></a>\n</div>\n<div class="feedFriendText">\n<a href="/User4">User4<br /><small>User4</small></a>\n</div>\n</div><div class="feedFriend">\n<div class="feedFriendImg">\n<a href="/id234234"><img src="http://cs345.vkontakte.ru/u21235/c_3fc23c3.jpg" /></a>\n</div>\n<div class="feedFriendText">\n<a href="/id234234">User6<br /><small>User6</small></a>\n</div>\n</div></div>\n</td>\n<td class="feedTime">\n<div>23:40</div>\n</td>\n</tr>\n'},)
  77. news = self.parser.parse(lastdate=lastdate, lastitems=lastitems)
  78. self.failUnlessEqual(len(news), 3)
  79. def test_parse_error(self):
  80. self.vkconnector.text = '<div class="feedDayWrap"><div class="feedDay">'
  81. self.assertRaises(parsers.VKParserError, self.parser.parse)
  82. class VKFriendsParserTest(TestCase):
  83. def setUp(self):
  84. self.vkconnector = connectors.DummyVKConnector()
  85. self.parser = parsers.VKFriendsParser(self.vkconnector)
  86. def test_parse_friends(self):
  87. self.vkconnector.text = texts[2]
  88. friends, groups = self.parser.parse()
  89. self.failUnlessEqual(len(friends), 2)
  90. def test_parse_groups(self):
  91. self.vkconnector.text = texts[2]
  92. friends, groups = self.parser.parse()
  93. self.failUnlessEqual(len(groups), 3)
  94. def test_parse_usergroups(self):
  95. self.vkconnector.text = texts[2]
  96. friends, groups = self.parser.parse()
  97. self.failUnlessEqual(friends[1]['groups'], [1, 2])
  98. def test_parse_error(self):
  99. self.vkconnector.text = 'broken text'
  100. self.assertRaises(parsers.VKParserError, self.parser.parse)
  101. def test_parse_user(self):
  102. self.vkconnector.text = texts[2]
  103. vkuser = {'groups': [],
  104. 'vkid': '14357',
  105. 'image': 'http://cs5345.vkontakte.ru/u12432345/b_v345vv3.jpg',
  106. 'name': 'User1Name',
  107. 'nickname': 'user1nickname',
  108. 'rod': 'User1rod',
  109. 'surname': 'User1Surname',
  110. 'universityid': '345'}
  111. friends, groups = self.parser.parse()
  112. self.failUnlessEqual(friends[0], vkuser)
  113. texts = ("""<div class="feedDayWrap"><div class="feedDay">сегодня</div></div>
  114. <div class="items_wrap">
  115. <table class="feedTable first" cellpadding="0" cellspacing="0" border="0">
  116. <tr>
  117. <td class="feedIconWrap">
  118. <div><img class="feedIcon" src="images/icons/groups_s.gif?2"></div>
  119. </td>
  120. <td class="feedStory">
  121. <a class="memLink" href="/user1">User1</a> вступил в группу <a href='club123457'>Group1</a>.
  122. </td>
  123. <td class="feedTime">
  124. <div>12:15</div>
  125. </td>
  126. </tr>
  127. </table><table class="feedTable " cellpadding="0" cellspacing="0" border="0">
  128. <tr>
  129. <td class="feedIconWrap">
  130. <div><img class="feedIcon" src="images/icons/friends_s.gif?2"></div>
  131. </td>
  132. <td class="feedStory">
  133. <a class="memLink" href="/id9374">User2</a> добавил 2 друзей: <div class="feedFriends"><div class="feedFriend">
  134. <div class="feedFriendImg">
  135. <a href="/user3"><img src="http://cs9934.vkontakte.ru/u2345/c_g2d123.jpg"/></a>
  136. </div>
  137. <div class="feedFriendText">
  138. <a href="/user3">User3Surname<br/><small>User3Name</small></a>
  139. </div>
  140. </div><div class="feedFriend">
  141. <div class="feedFriendImg">
  142. <a href="/id34523"><img src="http://cs1345.vkontakte.ru/u24235/c_45dg13.jpg"/></a>
  143. </div>
  144. <div class="feedFriendText">
  145. <a href="/id34523">User4Surname<br/><small>User4Name</small></a>
  146. </div>
  147. </div></div>
  148. </td>
  149. <td class="feedTime">
  150. <div>12:05</div>
  151. </td>
  152. </tr>
  153. </table>
  154. </div>""",
  155. """<div class="feedDayWrap"><div class="feedDay">сегодня</div></div>
  156. <div class="items_wrap">
  157. <table class="feedTable first" cellpadding="0" cellspacing="0" border="0">
  158. <tr>
  159. <td class="feedIconWrap">
  160. <div><img class="feedIcon" src="images/icons/groups_s.gif?2"></div>
  161. </td>
  162. <td class="feedStory">
  163. <a class="memLink" href="/user1">User1</a> вступил в группу <a href='club123457'>Group1</a>.
  164. </td>
  165. <td class="feedTime">
  166. <div>12:15</div>
  167. </td>
  168. </tr>
  169. </table><table class="feedTable " cellpadding="0" cellspacing="0" border="0">
  170. <tr>
  171. <td class="feedIconWrap">
  172. <div><img class="feedIcon" src="images/icons/friends_s.gif?2"></div>
  173. </td>
  174. <td class="feedStory">
  175. <a class="memLink" href="/id9374">User2</a> добавил 2 друзей: <div class="feedFriends"><div class="feedFriend">
  176. <div class="feedFriendImg">
  177. <a href="/user3"><img src="http://cs9934.vkontakte.ru/u2345/c_g2d123.jpg"/></a>
  178. </div>
  179. <div class="feedFriendText">
  180. <a href="/user3">User3Surname<br/><small>User3Name</small></a>
  181. </div>
  182. </div><div class="feedFriend">
  183. <div class="feedFriendImg">
  184. <a href="/id34523"><img src="http://cs1345.vkontakte.ru/u24235/c_45dg13.jpg"/></a>
  185. </div>
  186. <div class="feedFriendText">
  187. <a href="/id34523">User4Surname<br/><small>User4Name</small></a>
  188. </div>
  189. </div></div>
  190. </td>
  191. <td class="feedTime">
  192. <div>12:05</div>
  193. </td>
  194. </tr>
  195. </table>
  196. </div><div class="feedDayWrap"><div class="feedDay">вчера</div></div>
  197. <div class="items_wrap">
  198. <table class="feedTable first" cellpadding="0" cellspacing="0" border="0">
  199. <tr>
  200. <td class="feedIconWrap">
  201. <div><img class="feedIcon" src="images/icons/friends_s.gif?2"></div>
  202. </td>
  203. <td class="feedStory">
  204. <a class="memLink" href="/id5747">User5</a> добавила 2 друзей: <div class="feedFriends"><div class="feedFriend">
  205. <div class="feedFriendImg">
  206. <a href="/User4"><img src="http://cs12344.vkontakte.ru/u124124/c_342ffc3.jpg"/></a>
  207. </div>
  208. <div class="feedFriendText">
  209. <a href="/User4">User4<br/><small>User4</small></a>
  210. </div>
  211. </div><div class="feedFriend">
  212. <div class="feedFriendImg">
  213. <a href="/id234234"><img src="http://cs345.vkontakte.ru/u21235/c_3fc23c3.jpg"/></a>
  214. </div>
  215. <div class="feedFriendText">
  216. <a href="/id234234">User6<br/><small>User6</small></a>
  217. </div>
  218. </div></div>
  219. </td>
  220. <td class="feedTime">
  221. <div>23:40</div>
  222. </td>
  223. </tr>
  224. </table><table class="feedTable first" cellpadding="0" cellspacing="0" border="0">
  225. <tr>
  226. <td class="feedIconWrap">
  227. <div><img class="feedIcon" src="images/icons/friends_s.gif?2"></div>
  228. </td>
  229. <td class="feedStory">
  230. <a class="memLink" href="/id57473">User10</a> добавила 2 друзей: <div class="feedFriends"><div class="feedFriend">
  231. <div class="feedFriendImg">
  232. <a href="/User4"><img src="http://cs12344.vkontakte.ru/u124124/c_342ffc3.jpg"/></a>
  233. </div>
  234. <div class="feedFriendText">
  235. <a href="/User4">User4<br/><small>User4</small></a>
  236. </div>
  237. </div><div class="feedFriend">
  238. <div class="feedFriendImg">
  239. <a href="/id234234"><img src="http://cs345.vkontakte.ru/u21235/c_3fc23c3.jpg"/></a>
  240. </div>
  241. <div class="feedFriendText">
  242. <a href="/id234234">User6<br/><small>User6</small></a>
  243. </div>
  244. </div></div>
  245. </td>
  246. <td class="feedTime">
  247. <div>23:40</div>
  248. </td>
  249. </tr>
  250. </table><table class="feedTable " cellpadding="0" cellspacing="0" border="0">
  251. <tr>
  252. <td class="feedIconWrap">
  253. <div><img class="feedIcon" src="images/icons/friends_s.gif?2"></div>
  254. </td>
  255. <td class="feedStory">
  256. <a class="memLink" href="/user7">User7</a> добавил в друзья <a class="memLink" href="/id12312">User3</a>.
  257. </td>
  258. <td class="feedTime">
  259. <div>23:27</div>
  260. </td>
  261. </tr>
  262. </table><table class="feedTable " cellpadding="0" cellspacing="0" border="0">
  263. <tr>
  264. <td class="feedIconWrap">
  265. <div><img class="feedIcon" src="images/icons/people_s.gif?2"></div>
  266. </td>
  267. <td class="feedStory">
  268. <a class="memLink" href="/user8">User8</a> Status.
  269. </td>
  270. <td class="feedTime">
  271. <div>23:19</div>
  272. </td>
  273. </tr>
  274. </table><div>""",
  275. """ var friendsData = {'id':12345,'mid':12345,'hash':'sdlfjl2k3r','summary':"У Вас 123 друга",'friends':[[14357,"User1Name User1Surname","http:\/\/cs5345.vkontakte.ru\/u12432345\/b_v345vv3.jpg",1,"user1nickname","User1rod",0,1,345,"10",0],[3453461,"User2name User2Surname","http:\/\/cs24234.vkontakte.ru\/u363453\/b_ghb354.jpg",1,"user2nickname","User2Rod",0,1,234,"10",0]],'universities':{123:"univ1",234:"univ2",2:"univ3"}
  276. var friendsLists = {"1":"first","2":"second","3":"third"}; // [[cat_id => name]]
  277. var friendCats = {"14357":1,"3453461":7}
  278. """)