testutils.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. from datetime import timedelta
  2. from django.contrib.auth import get_user_model
  3. from django.utils import timezone
  4. from misago.core.utils import slugify
  5. from .checksums import update_post_checksum
  6. from .models import Poll, Post, Thread
  7. UserModel = get_user_model()
  8. def post_thread(
  9. category,
  10. title='Test thread',
  11. poster='Tester',
  12. is_global=False,
  13. is_pinned=False,
  14. is_unapproved=False,
  15. is_hidden=False,
  16. is_closed=False,
  17. started_on=None
  18. ):
  19. started_on = started_on or timezone.now()
  20. kwargs = {
  21. 'category': category,
  22. 'title': title,
  23. 'slug': slugify(title),
  24. 'started_on': started_on,
  25. 'last_post_on': started_on,
  26. 'is_unapproved': is_unapproved,
  27. 'is_hidden': is_hidden,
  28. 'is_closed': is_closed,
  29. }
  30. if is_global:
  31. kwargs['weight'] = 2
  32. elif is_pinned:
  33. kwargs['weight'] = 1
  34. try:
  35. kwargs.update({
  36. 'starter': poster,
  37. 'starter_name': poster.username,
  38. 'starter_slug': poster.slug,
  39. 'last_poster': poster,
  40. 'last_poster_name': poster.username,
  41. 'last_poster_slug': poster.slug,
  42. })
  43. except AttributeError:
  44. kwargs.update({
  45. 'starter_name': poster,
  46. 'starter_slug': slugify(poster),
  47. 'last_poster_name': poster,
  48. 'last_poster_slug': slugify(poster),
  49. })
  50. thread = Thread.objects.create(**kwargs)
  51. reply_thread(
  52. thread,
  53. poster=poster,
  54. posted_on=started_on,
  55. is_hidden=is_hidden,
  56. is_unapproved=is_unapproved,
  57. )
  58. return thread
  59. def reply_thread(
  60. thread,
  61. poster="Tester",
  62. message="I am test message",
  63. is_unapproved=False,
  64. is_hidden=False,
  65. is_event=False,
  66. is_protected=False,
  67. has_reports=False,
  68. has_open_reports=False,
  69. posted_on=None,
  70. poster_ip='127.0.0.1'
  71. ):
  72. posted_on = posted_on or thread.last_post_on + timedelta(minutes=5)
  73. kwargs = {
  74. 'category': thread.category,
  75. 'thread': thread,
  76. 'original': message,
  77. 'parsed': message,
  78. 'checksum': 'nope',
  79. 'poster_ip': poster_ip,
  80. 'posted_on': posted_on,
  81. 'updated_on': posted_on,
  82. 'is_event': is_event,
  83. 'is_unapproved': is_unapproved,
  84. 'is_hidden': is_hidden,
  85. 'is_protected': is_protected,
  86. 'has_reports': has_reports,
  87. 'has_open_reports': has_open_reports,
  88. }
  89. try:
  90. kwargs.update({
  91. 'poster': poster,
  92. 'poster_name': poster.username,
  93. })
  94. except AttributeError:
  95. kwargs.update({'poster_name': poster})
  96. post = Post.objects.create(**kwargs)
  97. update_post_checksum(post)
  98. post.save()
  99. thread.synchronize()
  100. thread.save()
  101. thread.category.synchronize()
  102. thread.category.save()
  103. return post
  104. def post_poll(thread, poster):
  105. poll = Poll.objects.create(
  106. category=thread.category,
  107. thread=thread,
  108. poster=poster,
  109. poster_name=poster.username,
  110. poster_slug=poster.slug,
  111. poster_ip='127.0.0.1',
  112. question="Lorem ipsum dolor met?",
  113. choices=[
  114. {
  115. 'hash': 'aaaaaaaaaaaa',
  116. 'label': 'Alpha',
  117. 'votes': 1
  118. },
  119. {
  120. 'hash': 'bbbbbbbbbbbb',
  121. 'label': 'Beta',
  122. 'votes': 0
  123. },
  124. {
  125. 'hash': 'gggggggggggg',
  126. 'label': 'Gamma',
  127. 'votes': 2
  128. },
  129. {
  130. 'hash': 'dddddddddddd',
  131. 'label': 'Delta',
  132. 'votes': 1
  133. },
  134. ],
  135. allowed_choices=2,
  136. votes=4
  137. )
  138. # one user voted for Alpha choice
  139. try:
  140. user = UserModel.objects.get(slug='bob')
  141. except UserModel.DoesNotExist:
  142. user = UserModel.objects.create_user('bob', 'bob@test.com', 'Pass.123')
  143. poll.pollvote_set.create(
  144. category=thread.category,
  145. thread=thread,
  146. voter=user,
  147. voter_name=user.username,
  148. voter_slug=user.slug,
  149. voter_ip='127.0.0.1',
  150. choice_hash='aaaaaaaaaaaa',
  151. )
  152. # test user voted on third and last choices
  153. poll.pollvote_set.create(
  154. category=thread.category,
  155. thread=thread,
  156. voter=poster,
  157. voter_name=poster.username,
  158. voter_slug=poster.slug,
  159. voter_ip='127.0.0.1',
  160. choice_hash='gggggggggggg',
  161. )
  162. poll.pollvote_set.create(
  163. category=thread.category,
  164. thread=thread,
  165. voter=poster,
  166. voter_name=poster.username,
  167. voter_slug=poster.slug,
  168. voter_ip='127.0.0.1',
  169. choice_hash='dddddddddddd',
  170. )
  171. # somebody else voted on third option before being deleted
  172. poll.pollvote_set.create(
  173. category=thread.category,
  174. thread=thread,
  175. voter_name='deleted',
  176. voter_slug='deleted',
  177. voter_ip='127.0.0.1',
  178. choice_hash='gggggggggggg',
  179. )
  180. return poll
  181. def like_post(post, liker=None, username=None):
  182. if not post.last_likes:
  183. post.last_likes = []
  184. if liker:
  185. like = post.postlike_set.create(
  186. category=post.category,
  187. thread=post.thread,
  188. liker=liker,
  189. liker_name=liker.username,
  190. liker_slug=liker.slug,
  191. liker_ip='127.0.0.1',
  192. )
  193. post.last_likes = [{
  194. 'id': liker.id,
  195. 'username': liker.username,
  196. }] + post.last_likes
  197. else:
  198. like = post.postlike_set.create(
  199. category=post.category,
  200. thread=post.thread,
  201. liker_name=username,
  202. liker_slug=slugify(username),
  203. liker_ip='127.0.0.1',
  204. )
  205. post.last_likes = [{
  206. 'id': None,
  207. 'username': username,
  208. }] + post.last_likes
  209. post.likes += 1
  210. post.save()
  211. return like