Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

test_review.py 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. from datetime import timedelta
  2. from django.urls import reverse
  3. from django.utils import timezone
  4. from oscar.core.compat import get_user_model
  5. from oscar.core.loading import get_model
  6. from oscar.test.factories import ProductReviewFactory, UserFactory
  7. from oscar.test.testcases import WebTestCase
  8. ProductReview = get_model('reviews', 'productreview')
  9. User = get_user_model()
  10. class ReviewsDashboardTests(WebTestCase):
  11. is_staff = True
  12. def test_reviews_dashboard_is_accessible_to_staff(self):
  13. url = reverse('dashboard:reviews-list')
  14. response = self.get(url)
  15. self.assertIsOk(response)
  16. def test_bulk_editing_review_status(self):
  17. user1 = UserFactory()
  18. user2 = UserFactory()
  19. ProductReviewFactory(pk=1, user=user1, status=0)
  20. ProductReviewFactory(pk=2, user=user2, status=0)
  21. ProductReviewFactory(pk=3, user=user2, status=0)
  22. assert(ProductReview.objects.count() == 3)
  23. list_page = self.get(reverse('dashboard:reviews-list'))
  24. form = list_page.forms[1]
  25. form['selected_review'] = [3, 2]
  26. form.submit('update')
  27. self.assertEqual(ProductReview.objects.get(pk=1).status, 0)
  28. self.assertEqual(ProductReview.objects.get(pk=2).status, 1)
  29. self.assertEqual(ProductReview.objects.get(pk=3).status, 1)
  30. def test_filter_reviews_by_name(self):
  31. user1 = UserFactory(first_name='Peter', last_name='Griffin')
  32. user2 = UserFactory(first_name='Lois', last_name='Griffin')
  33. ProductReviewFactory(user=user1, status=0)
  34. ProductReviewFactory(user=user2, status=0)
  35. ProductReviewFactory(user=user2, status=0)
  36. url = reverse('dashboard:reviews-list') + '?name=peter'
  37. response = self.get(url)
  38. self.assertEqual(len(response.context['review_list']), 1)
  39. self.assertEqual(response.context['review_list'][0].user, user1)
  40. url = reverse('dashboard:reviews-list') + '?name=lois+griffin'
  41. response = self.get(url)
  42. self.assertEqual(len(response.context['review_list']), 2)
  43. for review in response.context['review_list']:
  44. self.assertEqual(review.user, user2)
  45. def test_filter_reviews_by_keyword(self):
  46. url = reverse('dashboard:reviews-list')
  47. user1 = UserFactory()
  48. user2 = UserFactory()
  49. review1 = ProductReviewFactory(user=user1, title='Sexy Review')
  50. review2 = ProductReviewFactory(
  51. user=user2, title='Anry Review', body='argh')
  52. ProductReviewFactory(user=user2, title='Lovely Thing')
  53. response = self.get(url, params={'keyword': 'argh'})
  54. self.assertEqual(len(response.context['review_list']), 1)
  55. self.assertEqual(response.context['review_list'][0], review2)
  56. response = self.get(url, params={'keyword': 'review'})
  57. self.assertQuerysetContains(response.context['review_list'],
  58. [review1, review2])
  59. def assertQuerysetContains(self, qs, items):
  60. qs_ids = [obj.id for obj in qs]
  61. item_ids = [item.id for item in items]
  62. self.assertEqual(len(qs_ids), len(item_ids))
  63. for i, j in zip(qs_ids, item_ids):
  64. self.assertEqual(i, j)
  65. def test_filter_reviews_by_date(self):
  66. def n_days_ago(days):
  67. """
  68. The tests below pass timestamps as GET parameters, but the
  69. ProductReviewSearchForm doesn't recognize the timezone notation.
  70. """
  71. return timezone.make_naive(
  72. now - timedelta(days=days), timezone=timezone.utc)
  73. now = timezone.now()
  74. review1 = ProductReviewFactory()
  75. review2 = ProductReviewFactory()
  76. review2.date_created = now - timedelta(days=2)
  77. review2.save()
  78. review3 = ProductReviewFactory()
  79. review3.date_created = now - timedelta(days=10)
  80. review3.save()
  81. url = reverse('dashboard:reviews-list')
  82. response = self.get(url, params={'date_from': n_days_ago(5)})
  83. self.assertQuerysetContains(response.context['review_list'],
  84. [review1, review2])
  85. response = self.get(url, params={'date_to': n_days_ago(5)})
  86. self.assertQuerysetContains(response.context['review_list'],
  87. [review3])
  88. response = self.get(url, params={
  89. 'date_from': n_days_ago(12),
  90. 'date_to': n_days_ago(9),
  91. })
  92. self.assertQuerysetContains(response.context['review_list'],
  93. [review3])
  94. def test_filter_reviews_by_status(self):
  95. url = reverse('dashboard:reviews-list')
  96. user1 = UserFactory()
  97. user2 = UserFactory()
  98. review1 = ProductReviewFactory(user=user1, status=1)
  99. review2 = ProductReviewFactory(user=user2, status=0)
  100. review3 = ProductReviewFactory(user=user2, status=2)
  101. response = self.get(url, params={'status': 0})
  102. self.assertEqual(len(response.context['review_list']), 1)
  103. self.assertEqual(response.context['review_list'][0], review2)
  104. response = self.get(url, params={'status': 1})
  105. self.assertEqual(len(response.context['review_list']), 1)
  106. self.assertEqual(response.context['review_list'][0], review1)
  107. response = self.get(url, params={'status': 2})
  108. self.assertEqual(len(response.context['review_list']), 1)
  109. self.assertEqual(response.context['review_list'][0], review3)
  110. response = self.get(url, params={'status': 3})
  111. reviews = response.context['review_list']
  112. self.assertTrue(review1 in reviews)