Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. import datetime
  2. import pytest
  3. from django.utils import timezone
  4. from oscar.apps.dashboard.reviews import views
  5. from oscar.core.loading import get_model
  6. from oscar.test.factories.catalogue import ProductReviewFactory
  7. from oscar.test.factories.customer import UserFactory
  8. now = timezone.now()
  9. ProductReview = get_model('reviews', 'ProductReview')
  10. keywords = [
  11. 'aaaaa',
  12. 'bbbbb',
  13. 'ccccc',
  14. 'ddddd'
  15. ]
  16. @pytest.fixture
  17. def reviews():
  18. for i in range(10):
  19. keyword = keywords[i % len(keywords)]
  20. date_created = now - datetime.timedelta(days=i)
  21. user = UserFactory(
  22. first_name=keyword
  23. )
  24. review = ProductReviewFactory(
  25. score=i % 5,
  26. title='review title product %d %s' % (i, keyword),
  27. body='review body product %d %s' % (i, keyword),
  28. status=i % 3,
  29. user=user,
  30. )
  31. review.date_created = date_created
  32. review.save()
  33. return ProductReview.objects.all()
  34. @pytest.fixture
  35. def reviewlistview(rf, reviews):
  36. view = views.ReviewListView()
  37. view.request = rf.get('/')
  38. return view
  39. @pytest.mark.django_db
  40. class TestReviewListView(object):
  41. def test_get(self, rf):
  42. request = rf.get('/')
  43. view = views.ReviewListView.as_view()
  44. response = view(request)
  45. assert response.status_code == 200
  46. request = rf.get('/', data=dict(keyword='test', status='', date_from='', date_to='', name=''))
  47. response = view(request)
  48. assert response.status_code == 200
  49. request = rf.get('/', data=dict(keyword='', status='0', date_from='', date_to='', name=''))
  50. response = view(request)
  51. assert response.status_code == 200
  52. request = rf.get('/', data=dict(
  53. keyword='test', status='', date_from='2017-01-01', date_to='', name=''))
  54. response = view(request)
  55. assert response.status_code == 200
  56. request = rf.get('/', data=dict(
  57. keyword='test', status='', date_from='', date_to='2017-01-01', name=''))
  58. response = view(request)
  59. assert response.status_code == 200
  60. request = rf.get('/', data=dict(
  61. keyword='test', status='', date_from='2017-01-01', date_to='2017-12-31', name=''))
  62. response = view(request)
  63. assert response.status_code == 200
  64. request = rf.get('/', data=dict(
  65. keyword='', status='', date_from='', date_to='', name='test'))
  66. response = view(request)
  67. assert response.status_code == 200
  68. def test_add_filter_status(self, rf, reviews):
  69. request = rf.get('/', data=dict(status=ProductReview.FOR_MODERATION))
  70. view = views.ReviewListView.as_view()
  71. response = view(request)
  72. view = response.context_data['view']
  73. qs = view.get_queryset()
  74. assert qs.count() == 4
  75. request = rf.get('/', data=dict(status=ProductReview.APPROVED))
  76. view = views.ReviewListView.as_view()
  77. response = view(request)
  78. view = response.context_data['view']
  79. qs = view.get_queryset()
  80. assert qs.count() == 3
  81. request = rf.get('/', data=dict(status=ProductReview.REJECTED))
  82. view = views.ReviewListView.as_view()
  83. response = view(request)
  84. view = response.context_data['view']
  85. qs = view.get_queryset()
  86. assert qs.count() == 3
  87. def test_add_filter_keyword(self, rf, reviews):
  88. expect = {
  89. 'aaaaa': 3,
  90. 'bbbbb': 3,
  91. 'ccccc': 2,
  92. 'ddddd': 2,
  93. }
  94. for keyword in expect:
  95. request = rf.get('/', data=dict(keyword=keyword))
  96. view = views.ReviewListView.as_view()
  97. response = view(request)
  98. view = response.context_data['view']
  99. qs = view.get_queryset()
  100. assert qs.count() == expect[keyword]
  101. assert 'with keyword matching' in view.desc_ctx['kw_filter']
  102. assert keyword in view.desc_ctx['kw_filter']
  103. def test_add_filter_name(self, rf, reviews):
  104. expect = {
  105. 'aaaaa': 3,
  106. 'bbbbb': 3,
  107. 'ccccc': 2,
  108. 'ddddd': 2,
  109. }
  110. for keyword in expect:
  111. name = '%s winterbottom' % keyword
  112. request = rf.get('/', data=dict(name=name))
  113. view = views.ReviewListView.as_view()
  114. response = view(request)
  115. view = response.context_data['view']
  116. qs = view.get_queryset()
  117. assert qs.count() == expect[keyword]
  118. assert 'with customer name matching' in view.desc_ctx['name_filter']
  119. assert keyword in view.desc_ctx['name_filter']
  120. def test_get_date_from_to_queryset(self, reviewlistview):
  121. view = reviewlistview
  122. date_from = now - datetime.timedelta(days=6)
  123. date_to = now - datetime.timedelta(days=2)
  124. qs = view.get_queryset()
  125. assert qs.count() == 10
  126. qs = view.get_date_from_to_queryset(None, None)
  127. assert qs.count() == 10
  128. assert view.desc_ctx['date_filter'] == ''
  129. qs = view.get_date_from_to_queryset(date_from, None, qs)
  130. assert qs.count() == 7
  131. assert view.desc_ctx['date_filter'].startswith(' created after')
  132. qs = view.get_date_from_to_queryset(None, date_to, qs)
  133. assert qs.count() == 5
  134. assert view.desc_ctx['date_filter'].startswith(' created before')
  135. qs = view.get_date_from_to_queryset(date_from, date_to, qs)
  136. assert qs.count() == 5
  137. assert view.desc_ctx['date_filter'].startswith(' created between')