-
Notifications
You must be signed in to change notification settings - Fork 0
/
testfranciabasket.py
135 lines (95 loc) · 4.14 KB
/
testfranciabasket.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import unittest
from franciabasket import FranciaBasket, Order, Receipt, rounding_rule
from decimal import Decimal
class TestReceiptFormatCase(unittest.TestCase):
def setUp(self):
self.receipt = Receipt()
def test_print_empty_receipt(self):
self.assertEqual("\nSales Taxes: 0.00\nTotal: 0.00",
self.receipt.deliver())
def test_print_two_orders_receipt(self):
orders = [
Order('1 book at 10.00'),
Order('1 book at 10.00')
]
self.receipt.set_orders(orders)
self.receipt.set_tax(Decimal(2.53))
self.receipt.set_total(Decimal(11.78))
self.assertEqual(
"1 book: 10.00\n1 book: 10.00\nSales Taxes: 2.53\nTotal: 11.78",
self.receipt.deliver())
class TestBasketCommunicateWithReceiptCase(unittest.TestCase):
def setUp(self):
self.orders = []
self.tax = Decimal("0.0")
self.total = Decimal("0.0")
self.basket = FranciaBasket()
def set_orders(self, orders):
self.orders = orders
def set_tax(self, tax):
self.tax = tax
def set_total(self, total):
self.total = total
def test_print_receipt_empty_basket(self):
self.basket.print_receipt(self)
self.assertEqual(0, len(self.orders))
self.assertEqual(Decimal('0.0'), self.tax)
self.assertEqual(Decimal('0.0'), self.total)
def test_print_receipt_two_no_taxed_items(self):
self.basket.add_item('1 book at 10.02')
self.basket.add_item('1 book at 10.08')
self.basket.print_receipt(self)
self.assertEqual(2, len(self.orders))
self.assertEqual(Decimal('0.0'), self.tax)
self.assertEqual(Decimal('20.10'), self.total)
def test_print_receipt_taxed_items(self):
self.basket.add_item('1 music CD at 10.00')
self.basket.add_item('1 music CD at 10.00')
self.basket.print_receipt(self)
self.assertEqual(Decimal('2.0'), self.tax)
self.assertEqual(Decimal('22.0'), self.total)
def test_basket_orders_are_safe(self):
self.basket.print_receipt(self)
self.orders.append('invalid item')
self.assertNotEqual(len(self.basket.orders()), len(self.orders))
class TestOrderCase(unittest.TestCase):
def test_parse_order(self):
order = Order('13 music CD at 14.99')
self.assertEqual(13, order.quantity())
self.assertEqual('music CD', order.description())
self.assertEqual(Decimal('14.99'), order.price())
def test_rounding_rule(self):
self.assertEqual(Decimal('1.00'), rounding_rule(Decimal('1.00')))
self.assertEqual(Decimal('1.05'), rounding_rule(Decimal('1.01')))
self.assertEqual(Decimal('1.10'), rounding_rule(Decimal('1.06')))
def test_order_taxes(self):
order = Order('13 music CD at 14.99')
price = Decimal('14.99')
tax = rounding_rule(price * Decimal('0.1'))
self.assertEqual(tax, order.tax())
self.assertEqual(price + tax, order.taxed_price())
def test_order_free(self):
order = Order('13 book at 14.99')
self.assertEqual(Decimal('0.00'), order.tax())
def test_order_free_imported(self):
order = Order('13 imported book at 10.00')
price = Decimal('10.00')
tax = rounding_rule(price * Decimal('0.05'))
self.assertEqual(tax, order.tax())
def test_order_imported_and_taxed(self):
order = Order('1 imported bottle of perfume at 10.00')
price = Decimal('10.00')
tax = rounding_rule(price*Decimal('0.05') + price*Decimal('0.10'))
self.assertEqual(tax, order.tax())
def test_order_tax_check(self):
order = Order('13 music CD at 14.99')
self.assertTrue(order.is_taxed())
order = Order('13 book at 14.99')
self.assertFalse(order.is_taxed())
order = Order('13 medical at 14.99')
self.assertFalse(order.is_taxed())
def test_order_import_check(self):
order = Order('13 music CD at 14.99')
self.assertFalse(order.is_imported())
order = Order('1 imported box of chocolates at 10.00')
self.assertTrue(order.is_imported())