You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

review_tests.py 5.2KB

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