testutils.py 5.3 KB

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