Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

test_voucher_views.py 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import pytest
  2. from django.contrib.messages import get_messages
  3. from django.urls import reverse
  4. from oscar.apps.dashboard.vouchers import views
  5. from oscar.core.loading import get_model
  6. from oscar.test.factories import voucher
  7. from oscar.test.factories.offer import ConditionalOfferFactory
  8. from tests.fixtures import RequestFactory
  9. ConditionalOffer = get_model("offer", "ConditionalOffer")
  10. Voucher = get_model("voucher", "Voucher")
  11. VoucherSet = get_model("voucher", "VoucherSet")
  12. @pytest.fixture
  13. def many_voucher_sets():
  14. voucher.VoucherSetFactory.create_batch(30)
  15. return VoucherSet.objects.all()
  16. @pytest.mark.django_db
  17. class TestDashboardVouchers:
  18. def test_voucher_update_view_for_voucher_in_set(self):
  19. vs = voucher.VoucherSetFactory(count=10)
  20. v = vs.vouchers.first()
  21. view = views.VoucherUpdateView.as_view()
  22. request = RequestFactory().get("/")
  23. response = view(request, pk=v.pk)
  24. assert response.status_code == 302
  25. assert response.url == reverse(
  26. "dashboard:voucher-set-update", kwargs={"pk": vs.pk}
  27. )
  28. assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
  29. "warning",
  30. "The voucher can only be edited as part of its set",
  31. )
  32. data = {
  33. "code": v.code,
  34. "name": "New name",
  35. "start_datetime": v.start_datetime,
  36. "end_datetime": v.end_datetime,
  37. "usage": v.usage,
  38. "offers": [v.offers],
  39. }
  40. request = RequestFactory().post("/", data=data)
  41. response = view(request, pk=v.pk)
  42. assert response.status_code == 302
  43. assert response.url == reverse(
  44. "dashboard:voucher-set-update", kwargs={"pk": vs.pk}
  45. )
  46. assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
  47. "warning",
  48. "The voucher can only be edited as part of its set",
  49. )
  50. v.refresh_from_db()
  51. assert v.name != "New name"
  52. def test_voucher_delete_view(self):
  53. v = voucher.VoucherFactory()
  54. v.offers.add(ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER))
  55. assert Voucher.objects.count() == 1
  56. assert ConditionalOffer.objects.count() == 1
  57. request = RequestFactory().post("/")
  58. response = views.VoucherDeleteView.as_view()(request, pk=v.pk)
  59. assert Voucher.objects.count() == 0
  60. # Related offer is not deleted
  61. assert ConditionalOffer.objects.count() == 1
  62. assert response.status_code == 302
  63. assert response.url == reverse("dashboard:voucher-list")
  64. assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
  65. "warning",
  66. "Voucher deleted",
  67. )
  68. def test_voucher_delete_view_for_voucher_in_set(self):
  69. vs = voucher.VoucherSetFactory(count=10)
  70. assert Voucher.objects.count() == 10
  71. request = RequestFactory().post("/")
  72. response = views.VoucherDeleteView.as_view()(request, pk=vs.vouchers.first().pk)
  73. vs.refresh_from_db()
  74. assert vs.count == 9 # "count" is updated
  75. assert Voucher.objects.count() == 9
  76. assert response.status_code == 302
  77. assert response.url == reverse(
  78. "dashboard:voucher-set-detail", kwargs={"pk": vs.pk}
  79. )
  80. assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
  81. "warning",
  82. "Voucher deleted",
  83. )
  84. @pytest.mark.django_db
  85. class TestDashboardVoucherSets:
  86. # pylint: disable=unused-argument, redefined-outer-name
  87. def test_voucher_set_list_view(self, rf, many_voucher_sets):
  88. view = views.VoucherSetListView.as_view()
  89. request = rf.get("/")
  90. response = view(request)
  91. # if these are missing the pagination is broken
  92. assert response.context_data["paginator"]
  93. assert response.context_data["page_obj"]
  94. assert response.status_code == 200
  95. def test_voucher_set_detail_view(self, rf):
  96. voucher.VoucherSetFactory(count=10)
  97. vs2 = voucher.VoucherSetFactory(count=15)
  98. request = rf.get("/")
  99. response = views.VoucherSetDetailView.as_view()(request, pk=vs2.pk)
  100. # The view should only list vouchers for vs2
  101. assert len(response.context_data["vouchers"]) == 15
  102. assert response.status_code == 200
  103. def test_voucher_set_delete_view(self):
  104. vs = voucher.VoucherSetFactory(count=10)
  105. assert VoucherSet.objects.count() == 1
  106. assert Voucher.objects.count() == 10
  107. request = RequestFactory().post("/")
  108. response = views.VoucherSetDeleteView.as_view()(request, pk=vs.pk)
  109. assert VoucherSet.objects.count() == 0
  110. assert Voucher.objects.count() == 0
  111. assert response.status_code == 302
  112. assert response.url == reverse("dashboard:voucher-set-list")
  113. assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
  114. "warning",
  115. "Voucher set deleted",
  116. )