forked from django-oscar/django-oscar
/
model_tests.py
86 lines (62 loc) · 2.91 KB
/
model_tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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 TestSavingAVoucher(TestCase):
def test_saves_code_as_uppercase(self):
voucher = Voucher(code='lower', start_date=START_DATE,
end_date=END_DATE)
voucher.save()
self.assertEqual('LOWER', voucher.code)
def test_verifies_dates_are_sensible(self):
with self.assertRaises(exceptions.ValidationError):
voucher = Voucher.objects.create(
code='lower', start_date=END_DATE, end_date=START_DATE)
voucher.clean()
class TestAVoucher(TestCase):
def setUp(self):
self.voucher = Voucher(start_date=START_DATE, end_date=END_DATE)
def test_is_active_between_start_and_end_dates(self):
test = datetime.date(2011, 06, 10)
self.assertTrue(self.voucher.is_active(test))
def test_is_active_on_end_date(self):
self.assertTrue(self.voucher.is_active(END_DATE))
def test_is_active_on_start_date(self):
self.assertTrue(self.voucher.is_active(START_DATE))
def test_is_inactive_outside_of_start_and_end_dates(self):
test = datetime.date(2012, 03, 10)
self.assertFalse(self.voucher.is_active(test))
def test_increments_total_discount_when_recording_usage(self):
voucher = G(Voucher)
voucher.record_discount({'discount': D('10.00')})
self.assertEqual(voucher.total_discount, D('10.00'))
voucher.record_discount({'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])