| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import pytest
- from django.contrib.messages import get_messages
- from django.urls import reverse
-
- from oscar.apps.dashboard.vouchers import views
- from oscar.core.loading import get_model
- from oscar.test.factories import voucher
- from oscar.test.factories.offer import ConditionalOfferFactory
- from tests.fixtures import RequestFactory
-
- ConditionalOffer = get_model('offer', 'ConditionalOffer')
- Voucher = get_model('voucher', 'Voucher')
- VoucherSet = get_model('voucher', 'VoucherSet')
-
-
- @pytest.fixture
- def many_voucher_sets():
- voucher.VoucherSetFactory.create_batch(30)
- return VoucherSet.objects.all()
-
-
- @pytest.mark.django_db
- class TestDashboardVouchers:
-
- def test_voucher_update_view_for_voucher_in_set(self):
- vs = voucher.VoucherSetFactory(count=10)
- v = vs.vouchers.first()
-
- view = views.VoucherUpdateView.as_view()
-
- request = RequestFactory().get('/')
- response = view(request, pk=v.pk)
- assert response.status_code == 302
- assert response.url == reverse('dashboard:voucher-set-update', kwargs={'pk': vs.pk})
- assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
- 'warning', "The voucher can only be edited as part of its set")
-
- data = {
- 'code': v.code,
- 'name': "New name",
- 'start_datetime': v.start_datetime,
- 'end_datetime': v.end_datetime,
- 'usage': v.usage,
- 'offers': [v.offers],
- }
- request = RequestFactory().post('/', data=data)
- response = view(request, pk=v.pk)
- assert response.status_code == 302
- assert response.url == reverse('dashboard:voucher-set-update', kwargs={'pk': vs.pk})
- assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == (
- 'warning', "The voucher can only be edited as part of its set")
- v.refresh_from_db()
- assert v.name != "New name"
-
- def test_voucher_delete_view(self):
- v = voucher.VoucherFactory()
- v.offers.add(ConditionalOfferFactory(offer_type=ConditionalOffer.VOUCHER))
- assert Voucher.objects.count() == 1
- assert ConditionalOffer.objects.count() == 1
- request = RequestFactory().post('/')
- response = views.VoucherDeleteView.as_view()(request, pk=v.pk)
- assert Voucher.objects.count() == 0
- # Related offer is not deleted
- assert ConditionalOffer.objects.count() == 1
- assert response.status_code == 302
- assert response.url == reverse('dashboard:voucher-list')
- assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ('warning', "Voucher deleted")
-
- def test_voucher_delete_view_for_voucher_in_set(self):
- vs = voucher.VoucherSetFactory(count=10)
- assert Voucher.objects.count() == 10
- request = RequestFactory().post('/')
- response = views.VoucherDeleteView.as_view()(request, pk=vs.vouchers.first().pk)
- vs.refresh_from_db()
- assert vs.count == 9 # "count" is updated
- assert Voucher.objects.count() == 9
- assert response.status_code == 302
- assert response.url == reverse('dashboard:voucher-set-detail', kwargs={'pk': vs.pk})
- assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ('warning', "Voucher deleted")
-
-
- @pytest.mark.django_db
- class TestDashboardVoucherSets:
-
- def test_voucher_set_list_view(self, rf, many_voucher_sets):
- view = views.VoucherSetListView.as_view()
- request = rf.get('/')
- response = view(request)
- # if these are missing the pagination is broken
- assert response.context_data['paginator']
- assert response.context_data['page_obj']
- assert response.status_code == 200
-
- def test_voucher_set_detail_view(self, rf):
- voucher.VoucherSetFactory(count=10)
- vs2 = voucher.VoucherSetFactory(count=15)
- request = rf.get('/')
- response = views.VoucherSetDetailView.as_view()(request, pk=vs2.pk)
- # The view should only list vouchers for vs2
- assert len(response.context_data['vouchers']) == 15
- assert response.status_code == 200
-
- def test_voucher_set_delete_view(self):
- vs = voucher.VoucherSetFactory(count=10)
- assert VoucherSet.objects.count() == 1
- assert Voucher.objects.count() == 10
- request = RequestFactory().post('/')
- response = views.VoucherSetDeleteView.as_view()(request, pk=vs.pk)
- assert VoucherSet.objects.count() == 0
- assert Voucher.objects.count() == 0
- assert response.status_code == 302
- assert response.url == reverse('dashboard:voucher-set-list')
- assert [(m.level_tag, str(m.message)) for m in get_messages(request)][0] == ('warning', "Voucher set deleted")
|