Beispiel #1
0
    def test_print_receipt_with_voided_discounts(self):
        add_on_discount = discounts.AddOnDiscount('apple', 3, 1)
        cart = carts.Cart(discounts=[add_on_discount])

        apple = items.QuantifiedItem('apple', 1.00, 1)
        orange = items.QuantifiedItem('orange', 2.00, 2)
        banana = items.WeightedItem('banana', 3.00, 5)
        for item in [apple, apple, apple, orange, banana]:
            cart.add(item)

        cart.remove(banana)
        cart.remove(apple)

        expected_receipt = ("1 apple $1.00: $1.00\n"
                            "1 apple $1.00: $1.00\n"
                            "1 apple $1.00: $1.00\n"
                            "1 DISCOUNT apple: $0.00\n"
                            "2 orange $2.00: $4.00\n"
                            "5 kg banana $3.00/kg: $15.00\n"
                            "5 VOIDED banana: $-15.00\n"
                            "1 VOIDED apple: $-1.00\n"
                            "1 VOIDED DISCOUNT apple: $-0.00\n"
                            "----------------------------\n"
                            "TOTAL: $6.00")

        tools.assert_equal(expected_receipt, cart.print_receipt())
Beispiel #2
0
    def test_remove_non_existent_item(self):
        cart = carts.Cart()
        apple = items.QuantifiedItem('apple', 1.00, 1)
        orange = items.QuantifiedItem('orange', 2.00, 1)
        cart.add(apple)
        cart.remove(orange)

        tools.assert_equal([apple], cart.get_items())
Beispiel #3
0
    def test_receipt_one_product_removed(self):
        cart = carts.Cart()
        apple = items.QuantifiedItem('apple', 1.00, 1)
        cart.add(apple)
        removed_apple = cart.remove(apple)

        tools.assert_equal(([apple, removed_apple], 0.00), cart.get_receipt())
Beispiel #4
0
    def test_remove_item(self):
        cart = carts.Cart()
        apple = items.QuantifiedItem('apple', 1.00, 1)
        cart.add(apple)
        removed_apple = cart.remove(apple)

        tools.assert_equal([apple, removed_apple], cart.get_items())
Beispiel #5
0
 def test_multiple_quantified_items(self):
     apples = items.QuantifiedItem('apple', 1.00, 2)
     tools.assert_equal(apples.name, 'apple')
     tools.assert_equal(apples.price, 1.00)
     tools.assert_equal(apples.quantity, 2)
     tools.assert_equal(apples.subtotal(), 2.00)
     tools.assert_equal(apples.__str__(), '2 apple $1.00: $2.00')
Beispiel #6
0
 def test_needs_voiding_only_considers_applicable_items(self):
     irrelevant_item = items.QuantifiedItem('orange', 1.00, 1)
     discount_item = self.discount.get_reward()
     cart_items = [
         self.apple, self.apple, self.apple, discount_item,
         self.apple.void(), irrelevant_item
     ]
     tools.assert_true(self.discount.needs_voiding(cart_items))
Beispiel #7
0
 def test_one_quantified_item(self):
     apple = items.QuantifiedItem('apple', 1.00, 1)
     tools.assert_equal(apple.name, 'apple')
     tools.assert_equal(apple.quantity, 1)
     tools.assert_equal(apple.price, 1.00)
     tools.assert_equal(apple.subtotal(), 1.00)
     tools.assert_equal(apple.__str__(), '1 apple $1.00: $1.00')
     tools.assert_true(isinstance(apple.void(), items.VoidedItem))
Beispiel #8
0
    def test_print_receipt_large_order_with_multiple_voided_discounts(self):
        reduced_rate_discount = discounts.ReducedRateDiscount(
            'banana', 5, -2.00)
        add_on_discount = discounts.AddOnDiscount('orange', 2, 1)
        cart = carts.Cart(discounts=[reduced_rate_discount, add_on_discount])

        apple = items.QuantifiedItem('apple', 1.00, 1)
        orange = items.QuantifiedItem('orange', 2.00, 1)
        banana = items.WeightedItem('banana', 3.00, 10)
        for item in [apple, orange, banana, orange]:
            cart.add(item)

        expected_receipt = ("1 apple $1.00: $1.00\n"
                            "1 orange $2.00: $2.00\n"
                            "10 kg banana $3.00/kg: $30.00\n"
                            "1 DISCOUNT banana: $-2.00\n"
                            "1 DISCOUNT banana: $-2.00\n"
                            "1 orange $2.00: $2.00\n"
                            "1 DISCOUNT orange: $0.00\n"
                            "----------------------------\n"
                            "TOTAL: $31.00")

        tools.assert_equal(expected_receipt, cart.print_receipt())

        for item in [apple, orange, banana, orange]:
            cart.remove(item)

        expected_receipt = ("1 apple $1.00: $1.00\n"
                            "1 orange $2.00: $2.00\n"
                            "10 kg banana $3.00/kg: $30.00\n"
                            "1 DISCOUNT banana: $-2.00\n"
                            "1 DISCOUNT banana: $-2.00\n"
                            "1 orange $2.00: $2.00\n"
                            "1 DISCOUNT orange: $0.00\n"
                            "1 VOIDED apple: $-1.00\n"
                            "1 VOIDED orange: $-2.00\n"
                            "1 VOIDED DISCOUNT orange: $-0.00\n"
                            "10 VOIDED banana: $-30.00\n"
                            "1 VOIDED DISCOUNT banana: $2.00\n"
                            "1 VOIDED DISCOUNT banana: $2.00\n"
                            "1 VOIDED orange: $-2.00\n"
                            "----------------------------\n"
                            "TOTAL: $0.00")

        tools.assert_equal(expected_receipt, cart.print_receipt())
Beispiel #9
0
    def test_receipt_multiple_products(self):
        cart = carts.Cart()
        apple = items.QuantifiedItem('apple', 1.00, 1)
        orange = items.QuantifiedItem('orange', 2.00, 2)
        banana = items.WeightedItem('banana', 3.00, 5)
        for item in [apple, orange, banana]:
            cart.add(item)

        tools.assert_equal(([apple, orange, banana], 20.00),
                           cart.get_receipt())

        removed_banana = cart.remove(banana)
        tools.assert_equal(([apple, orange, banana, removed_banana], 5.00),
                           cart.get_receipt())

        removed_apple = cart.remove(apple)
        tools.assert_equal(
            ([apple, orange, banana, removed_banana, removed_apple], 4.00),
            cart.get_receipt())
Beispiel #10
0
    def test_print_receipt(self):
        cart = carts.Cart()
        apple = items.QuantifiedItem('apple', 1.00, 1)
        orange = items.QuantifiedItem('orange', 2.00, 2)
        banana = items.WeightedItem('banana', 3.00, 5)
        for item in [apple, orange, banana]:
            cart.add(item)

        cart.remove(banana)
        cart.remove(apple)

        expected_receipt = ("1 apple $1.00: $1.00\n"
                            "2 orange $2.00: $4.00\n"
                            "5 kg banana $3.00/kg: $15.00\n"
                            "5 VOIDED banana: $-15.00\n"
                            "1 VOIDED apple: $-1.00\n"
                            "----------------------------\n"
                            "TOTAL: $4.00")

        tools.assert_equal(expected_receipt, cart.print_receipt())
Beispiel #11
0
    def test_add_item_adds_discount(self):
        add_on_discount = discounts.AddOnDiscount('apple', 3, 1)
        discount_apple = add_on_discount.get_reward()
        cart = carts.Cart(discounts=[add_on_discount])
        apple = items.QuantifiedItem('apple', 1.00, 1)
        for _ in xrange(6):
            cart.add(apple)

        tools.assert_equal(8, len(cart.get_items()))
        tools.assert_equal([apple, apple, apple], cart.get_items()[:3])
        tools.assert_equal(discount_apple.__str__(),
                           cart.get_items()[3].__str__())
        tools.assert_equal([apple, apple, apple], cart.get_items()[4:7])
        tools.assert_equal(discount_apple.__str__(),
                           cart.get_items()[7].__str__())
Beispiel #12
0
    def test_remove_item_voids_discount(self):
        add_on_discount = discounts.AddOnDiscount('apple', 3, 1)
        discount_apple = add_on_discount.get_reward()
        cart = carts.Cart(discounts=[add_on_discount])
        apple = items.QuantifiedItem('apple', 1.00, 1)
        for _ in xrange(3):
            cart.add(apple)

        removed_apple = cart.remove(apple)

        tools.assert_equal(6, len(cart.get_items()))
        tools.assert_equal([apple, apple, apple], cart.get_items()[:3])
        tools.assert_equal(discount_apple.__str__(),
                           cart.get_items()[3].__str__())
        tools.assert_equal(removed_apple, cart.get_items()[4])
        tools.assert_equal(discount_apple.void().__str__(),
                           cart.get_items()[5].__str__())
Beispiel #13
0
 def setUp(self):
     self.apple = items.QuantifiedItem('apple', 1.00, 1)
     self.discount = discounts.BuyMoreForLessDiscount('apple', 3, 0.00, 1)
Beispiel #14
0
 def setUp(self):
     self.apple = items.QuantifiedItem('apple', 1.00, 1)
     self.add_on_discount = discounts.AddOnDiscount('apple', 3, 1)
Beispiel #15
0
 def setUp(self):
     self.apple = items.QuantifiedItem('apple', 1.00, 1)
     self.reduced_rate_discount = discounts.ReducedRateDiscount(
         'apple', 3, -2.00)
Beispiel #16
0
 def test_is_applicable_only_considers_applicable_items(self):
     irrelevant_item = items.QuantifiedItem('orange', 1.00, 1)
     cart_items = [self.apple, self.apple, irrelevant_item]
     tools.assert_false(self.discount.is_applicable(cart_items))