| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import datetime
- from decimal import Decimal as D
-
- from django.test import TestCase
- from django.core import exceptions
- from django.contrib.auth.models import User
- from django_dynamic_fixture import G
-
- from oscar.apps.voucher.models import Voucher
- from oscar.apps.order.models import Order
-
- START_DATE = datetime.date(2011, 01, 01)
- END_DATE = datetime.date(2012, 01, 01)
-
-
- class TestVoucher(TestCase):
-
- def test_saves_code_as_uppercase(self):
- start = datetime.date(2011, 01, 01)
- end = datetime.date(2012, 01, 01)
- voucher = Voucher.objects.create(code='lower',
- start_date=start,
- end_date=end)
- self.assertEqual('LOWER', voucher.code)
-
- def test_checks_dates_are_sensible(self):
- start = datetime.date(2011, 01, 01)
- end = datetime.date(2012, 01, 01)
- with self.assertRaises(exceptions.ValidationError):
- voucher = Voucher.objects.create(code='lower',
- start_date=end,
- end_date=start)
- voucher.clean()
-
- def test_is_active_between_start_and_end_dates(self):
- start = datetime.date(2011, 01, 01)
- test = datetime.date(2011, 01, 10)
- end = datetime.date(2011, 02, 01)
- voucher = Voucher(start_date=start, end_date=end)
- self.assertTrue(voucher.is_active(test))
-
- def test_is_inactive_outside_of_start_and_end_dates(self):
- start = datetime.date(2011, 01, 01)
- test = datetime.date(2011, 03, 10)
- end = datetime.date(2011, 02, 01)
- voucher = Voucher(start_date=start, end_date=end)
- self.assertFalse(voucher.is_active(test))
-
- def test_increments_total_discount_when_recording_usage(self):
- voucher = G(Voucher)
- voucher.record_discount(D('10.00'))
- self.assertEqual(voucher.total_discount, D('10.00'))
- voucher.record_discount(D('10.00'))
- self.assertEqual(voucher.total_discount, D('20.00'))
-
-
- class TestMultiuseVoucher(TestCase):
-
- def setUp(self):
- self.voucher = G(Voucher, usage=Voucher.MULTI_USE)
-
- def test_is_available_to_same_user_multiple_times(self):
- user, order = G(User), G(Order)
- for i in xrange(10):
- self.voucher.record_usage(order, user)
- self.assertTrue(self.voucher.is_available_to_user(user)[0])
-
-
- class TestOncePerCustomerVoucher(TestCase):
-
- def setUp(self):
- self.voucher = G(Voucher, usage=Voucher.ONCE_PER_CUSTOMER)
-
- def test_is_available_to_a_user_once(self):
- user, order = G(User), G(Order)
- self.assertTrue(self.voucher.is_available_to_user(user)[0])
- self.voucher.record_usage(order, user)
- self.assertFalse(self.voucher.is_available_to_user(user)[0])
-
- def test_is_available_to_different_users(self):
- users, order = [G(User), G(User)], G(Order)
- for user in users:
- self.assertTrue(self.voucher.is_available_to_user(user)[0])
- self.voucher.record_usage(order, user)
- self.assertFalse(self.voucher.is_available_to_user(user)[0])
|