예제 #1
0
 def test_total_joe_bulk_item_promo_long_order(self):
     """test to verify the return of the method
     total"""
     joe = Customer('John Doe', 0)
     cart = [LineItem(str(item_code), 1, 1.0) for item_code in range(10)]
     order = Order(joe, cart, BulkItemPromo())
     self.assertEqual(order.total(), 10.0)
예제 #2
0
 def test_due_joe_large_order_promo_with_long_order(self):
     """test to verify the return of the method
     due"""
     joe = Customer('John Doe', 0)
     cart = [LineItem(str(item_code), 1, 1.0) for item_code in range(10)]
     order = Order(joe, cart, LargeOrderPromo())
     self.assertEqual(order.due(), 9.3)
예제 #3
0
 def test_due_joe_bulk_item_promo(self):
     """test to verify the return of the method
     due"""
     joe = Customer('John Doe', 0)
     cart = [LineItem('banana', 30, .5), LineItem('apple', 10, 1.5)]
     order = Order(joe, cart, BulkItemPromo())
     self.assertEqual(order.due(), 28.5)
예제 #4
0
 def test_due_joe_fidelity_promo(self):
     """test to verify the return of the method
     due"""
     joe = Customer('John Doe', 0)
     cart = [LineItem('banana', 4, .5), LineItem('apple', 10, 1.5)]
     order = Order(joe, cart, FidelityPromo())
     self.assertEqual(order.due(), 17.0)
예제 #5
0
def test_fidelity_promo():
    cart = [
        LineItem('banana', 4, .5),
        LineItem('apple', 10, 1.5),
        LineItem('watermellon', 5, 5.0)
    ]

    assert repr(Order(joe, cart,
                      FidelityPromo())) == '<Order total: 42.00 due: 42.00>'
    assert repr(Order(ann, cart,
                      FidelityPromo())) == '<Order total: 42.00 due: 39.90>'
예제 #6
0
    def test_due_ana_fideliy_promo(self):
        """test to verify the return of the method
        due"""
        ana = Customer('Ana Smith', 1100)
        cart = [
            LineItem('banana', 4, .5),
            LineItem('apple', 10, 1.5),
            LineItem('watermellon', 5, 5.0)
        ]
        order = Order(ana, cart, FidelityPromo())

        self.assertEqual(order.due(), 39.9)
예제 #7
0
    def test_total_ana_bulk_item_promo(self):
        """test to verify the return of the method
        total"""
        ana = Customer('Ana Smith', 1100)
        cart = [
            LineItem('banana', 4, .5),
            LineItem('apple', 10, 1.5),
            LineItem('watermellon', 20, 5.0)
        ]
        order = Order(ana, cart, BulkItemPromo())

        self.assertEqual(order.total(), 117.0)
예제 #8
0
    """10% discount for each LineItem with 20 or more units"""
    discount = 0
    for item in order.cart:
        if item.quantity >= 20:
            discount += item.total() * .1
    return discount

def large_order_promo(order):
    """7% discount for orders with 10 or more distinct items"""
    distinct_items = {item.product for item in order.cart}
    if len(distinct_items) >= 10:
        return order.total() * .07
    return 0

joe = Customer('John Doe', 0)  
ann = Customer('Ann Smith', 1100)
cart = [LineItem('banana', 4, .5),  
        LineItem('apple', 10, 1.5),
        LineItem('watermellon', 5, 5.0)]
print(Order(joe, cart, fidelity_promo))
print(Order(ann, cart, fidelity_promo))

banana_cart = [LineItem('banana', 30, .5),  
               LineItem('apple', 10, 1.5)]
print(Order(joe, banana_cart, bulk_item_promo))  

long_order = [LineItem(str(item_code), 1, 1.0) 
              for item_code in range(10)]
print(Order(joe, long_order, large_order_promo))
print(Order(joe, cart, large_order_promo))
예제 #9
0
def test_large_order_promo_with_discount(customer_fidelity_0) -> None:
    cart = [LineItem(str(item_code), 1, 1.0) for item_code in range(10)]
    order = Order(customer_fidelity_0, cart, LargeOrderPromo())
    assert order.total() == 10.0
    assert order.due() == 9.3
예제 #10
0
def test_large_order_promo_no_discount(customer_fidelity_0, cart_plain) -> None:
    order = Order(customer_fidelity_0, cart_plain, LargeOrderPromo())
    assert order.total() == 42.0
    assert order.due() == 42.0
예제 #11
0
def test_bulk_item_promo_with_discount(customer_fidelity_0) -> None:
    cart = [LineItem('banana', 30, 0.5), LineItem('apple', 10, 1.5)]
    order = Order(customer_fidelity_0, cart, BulkItemPromo())
    assert order.total() == 30.0
    assert order.due() == 28.5
예제 #12
0
def test_bulk_item_promo_no_discount(customer_fidelity_0, cart_plain) -> None:
    order = Order(customer_fidelity_0, cart_plain, BulkItemPromo())
    assert order.total() == 42.0
    assert order.due() == 42.0
예제 #13
0
def test_fidelity_promo_with_discount(customer_fidelity_1100, cart_plain) -> None:
    order = Order(customer_fidelity_1100, cart_plain, FidelityPromo())
    assert order.total() == 42.0
    assert order.due() == 39.9
예제 #14
0
def test_large_order_promo():
    long_order = [LineItem(str(item_code), 1, 1.0) for item_code in range(10)]
    assert repr(Order(joe, long_order,
                      LargeOrderPromo())) == '<Order total: 10.00 due: 9.30>'
예제 #15
0
def test_bulk_item_promo():
    banana_cart = [LineItem('banana', 30, .5), LineItem('apple', 10, 1.5)]
    assert repr(Order(joe, banana_cart,
                      BulkItemPromo())) == '<Order total: 30.00 due: 28.50>'
예제 #16
0
def test_single_item_order():
    cart = [LineItem('banana', 4, .5)]
    assert repr(Order(joe, cart,
                      FidelityPromo())) == '<Order total: 2.00 due: 2.00>'
예제 #17
0
from classic_strategy import LineItem, FidelityPromo, LargeOrderPromo, BulkItemPromo, Customer, Order, Promotion

joe = Customer('John Doe', 0)  # <1>
ann = Customer('Ann Smith', 1100)
cart = [
    LineItem('banana', 4, .5),  # <2>
    LineItem('apple', 10, 1.5),
    LineItem('watermellon', 5, 5.0)
]
print(Order(joe, cart, FidelityPromo()))
print(Order(ann, cart, FidelityPromo()))
banana_cart = [LineItem('banana', 30, .5), LineItem('apple', 10, 1.5)]
print(Order(joe, banana_cart, BulkItemPromo()))  # <6>

long_order = [LineItem(str(item_code), 1, 1.0) for item_code in range(10)]
print(Order(joe, long_order, LargeOrderPromo()))
print(Order(joe, cart, LargeOrderPromo()))