您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

test_reviews.py 5.7KB

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