Exemplo n.º 1
0
 def test_calculate_checkout(self):
     rules = {
             "A": (50, 3, 130),
             "B": (30, 2, 45),
             "C": (20, None),
             "D": (15, None)
         }
     cashier = Checkout(rules)
     try:
         cashier.scan('A')
         cashier.scan('D')
         cashier.scan('A')
         cashier.scan('a')
         cashier.scan('B')
         cashier.scan('b')
         cashier.scan('d')
         cashier.scan('A')
         cashier.scan('b')
         cashier.scan('C')
         cashier.scan('A')
         cashier.scan('C')
         # expected total = 375
         self.assertEqual(cashier.calculate_checkout(), 375)
     except InvalidProductException as e:
         print(e.message)
         self.fail("No exception should have been raised here")
Exemplo n.º 2
0
 def test_percentage_discount_multiple_exact(self):
     checkout = Checkout((STUB_ITEM_PERCENT_DISCOUNT, ))
     discounted_item_id = STUB_ITEM_PERCENT_DISCOUNT.id
     eq_(
         72,
         checkout.total((discounted_item_id, discounted_item_id,
                         discounted_item_id, discounted_item_id)))
Exemplo n.º 3
0
 def testCheckOutEx4(self):
     ps1 = PricingStrategies()
     co = Checkout(ps1)
     exbucket = ["mbp", "mbp", "vga", "vga"]
     for item in exbucket:
         co.scan(item)
     self.assertEqual(co.total(), 2799.98)
Exemplo n.º 4
0
 def testCheckOutEx2(self):
     ps1 = PricingStrategies()
     co = Checkout(ps1)
     exbucket = ["atv", "ipd", "ipd", "atv", "ipd", "ipd", "ipd"]
     for item in exbucket:
         co.scan(item)
     self.assertEqual(co.total(), 2718.95)
Exemplo n.º 5
0
 def test_three_b(self):
     checkout = Checkout()
     checkout.scan("B")
     checkout.scan("B")
     checkout.scan("B")
     checkout.scan("B")
     self.assertEqual(90, checkout.total)
Exemplo n.º 6
0
 def test_three_strawberries_one_fruit_tea(self):
     co = Checkout(PricingRules().list())
     co.scan("SR1")
     co.scan("SR1")
     co.scan("FR1")
     co.scan("SR1")
     assert co.calculate() == 16.61
Exemplo n.º 7
0
 def test_a_offer(self):
     checkout = Checkout()
     checkout.scan("A")
     checkout.scan("A")
     checkout.scan("A")
     print(checkout.receipt.get_text())
     self.assertEqual(checkout.total, 130)
Exemplo n.º 8
0
 def test_threshold_save_above_threshold(self):
     threshold_discount = ThresholdDiscount(10, 10)
     checkout = Checkout((STUB_ITEM_NO_DISCOUNT, ), threshold_discount)
     eq_(
         18,
         checkout.total(
             (STUB_ITEM_NO_DISCOUNT.id, STUB_ITEM_NO_DISCOUNT.id)))
Exemplo n.º 9
0
 def test_percentage_discount_additional(self):
     checkout = Checkout((STUB_ITEM_PERCENT_DISCOUNT, ))
     discounted_item_id = STUB_ITEM_PERCENT_DISCOUNT.id
     eq_(
         56,
         checkout.total(
             (discounted_item_id, discounted_item_id, discounted_item_id)))
Exemplo n.º 10
0
 def test_one_of_each(self):
     checkout = Checkout()
     checkout.scan("A")
     checkout.scan("B")
     checkout.scan("C")
     checkout.scan("D")
     self.assertEqual(checkout.receipt_text(),
                      "A: 50\nB: 30\nC: 20\nD: 15\nTotal: 115")
Exemplo n.º 11
0
 def test_three_a(self):
     checkout = Checkout()
     checkout.scan("A")
     checkout.scan("A")
     checkout.scan("A")
     checkout.scan("A")
     checkout.scan("A")
     checkout.scan("A")
     self.assertEqual(260, checkout.total)
Exemplo n.º 12
0
 def test_add_invalid_product(self):
     rules = {
             "A": (50, 3, 130),
             "D": (15, None)
         }
     cashier = Checkout(rules)
     with self.assertRaises(InvalidProductException):
         cashier.scan('A')
         cashier.scan('B')
Exemplo n.º 13
0
    def _addCheckout(self,idCheckout,totalCheckout):

        width = (self._size[0]-totalCheckout*SPACE_BETWEEN_CHECKOUTS)/(totalCheckout)
        x = width * idCheckout + idCheckout * SPACE_BETWEEN_CHECKOUTS + CHECKOUT_OFFSET
        y = self._size[1] - 50
        height = 50
        maxClients = MAX_CLIENT_PER_CHECKOUT

        self._checkouts.append(Checkout(x,y,width,height,maxClients))
Exemplo n.º 14
0
    def init_pricingrules(self):
        '''
        This function initialises PricingRules, Checkout objects from real files
        TODO: turn it into decorator.
        '''

        self.pricing_rules = PricingRules(
            '/code/tests/config/catalog.yaml',
            '/code/tests/config/pricingrules.yaml')
        self.checkout = Checkout(self.pricing_rules)
Exemplo n.º 15
0
 def test_rules_with_only_items_add_item_values_in_the_cart(self):
     my_rules = {Item('VOUCHER', 'Gift Card', 5.0),
                 Item('TSHIRT', 'Summer T-Shirt', 20.0),
                 Item('PANTS', 'Summer Pants', 7.5)}
     sut = Checkout(my_rules)
     sut.add_item('VOUCHER')
     sut.add_item('TSHIRT')
     sut.add_item('PANTS')
     expected_total = 32.5
     self.assertEqual(expected_total, sut.get_total())
Exemplo n.º 16
0
 def test_validate_payment_invalid_return(self):
     checkout = Checkout()
     assert not checkout.validate_payment_return(
         mac=
         "2657BA96CC7879C79192547EB6C9D4082EA39CA52FE1DAD09CB1C632ECFDAE68",
         version="0001",
         order_number="1388998411",
         order_reference="474738238",
         payment="1221238575",
         status="3",
         algorithm="3")
Exemplo n.º 17
0
def details(request, step):
    if not request.cart:
        return redirect('cart:index')
    checkout = Checkout(request)
    if not step:
        return redirect(checkout.get_next_step())
    try:
        step = checkout[step]
    except KeyError:
        raise Http404()
    response = step.process()
    return response or redirect(checkout.get_next_step())
Exemplo n.º 18
0
    def setUp(self):
        self.o = Checkout()
        self.item1 = Item(4206, 'Green Onion', 0.89)
        self.item2 = Item(4131, 'Fuji Apple', 1.99)
        self.item3 = Item(4011, 'Banana', 0.79)

        self.purchaseitem1 = PurchaseItem(self.item1, 2)
        self.purchaseitem2 = PurchaseItem(self.item2, 4)
        self.purchaseitem3 = PurchaseItem(self.item3, 3)

        self.o.addPurchaseItems(self.purchaseitem1)
        self.o.addPurchaseItems(self.purchaseitem2)
        self.o.addPurchaseItems(self.purchaseitem3)
Exemplo n.º 19
0
    def display_tickets():
        a = Checkout()

        digital = a.TicketBooking()
        a.display.append(digital)
        print(a.display)
        result = a.addtolist()
        if result == "a":
            display_tickets()
        else:
            # print('\n')
            print("Total Price:${}".format(sum(a.display)))
            a.cal_ticket()
Exemplo n.º 20
0
 def test_incremental(self):
     co = Checkout(items)
     self.assertEqual(0, co.total())
     co.scan("A")
     self.assertEqual(50, co.total())
     co.scan("B")
     self.assertEqual(80, co.total())
     co.scan("A")
     self.assertEqual(130, co.total())
     co.scan("A")
     self.assertEqual(160, co.total())
     co.scan("B")
     self.assertEqual(175, co.total())
Exemplo n.º 21
0
 def test_address_save_without_address(self, mock_save):
     self.request.POST = NEW_ADDRESS_POST
     self.request.POST['method'] = 0
     group = MagicMock()
     group.address = None
     checkout = Checkout(self.request)
     group.get_delivery_methods.return_value = [DummyShipping(group)]
     step = ShippingStep(checkout, self.request, group)
     self.assertTrue(step.forms_are_valid(), 'Forms don\'t validate.')
     step.save()
     self.assertEqual(mock_save.call_count, 0)
     grup_storage = checkout.get_group(str(step))
     self.assertEqual(type(grup_storage['address']), Address,
                      'Address instance expected')
Exemplo n.º 22
0
    def test_simple(self):
        checkout = Checkout()

        checkout.scan("A")
        self.assertEqual(50, checkout.total)

        checkout.scan("B")
        self.assertEqual(80, checkout.total)

        checkout.scan("C")
        self.assertEqual(100, checkout.total)

        checkout.scan("D")
        self.assertEqual(115, checkout.total)
Exemplo n.º 23
0
def test_offers(self):
    checkout = Checkout()
    checkout.scan("A")
    checkout.scan("A")
    checkout.scan("B")
    checkout.scan("A")
    checkout.scan("C")
    checkout.scan("D")
    checkout.scan("B")
    self.assertEqual(checkout.total, 2)
    self.assertEqual(
        checkout.receipt_text(),
        "A: 50\nA: 50\nB: 30\nA: 50 - 20 (3 for 130)\nC: 20\nD: 15\nB: 30 - 15 (2 for 45)\nTotal: 210"
    )
Exemplo n.º 24
0
    def test_apply_2x1_n_3_item_discounts_in_cart(self):
        voucher_desc = Item('VOUCHER', 'Gift Card', 5.0)
        tshirt_desc = Item('TSHIRT', 'Summer T-Shirt', 20.0)
        pants_desc = Item('PANTS', 'Summer Pants', 7.5)

        my_rules = {voucher_desc, tshirt_desc, pants_desc,
                    TwoForOneItem(voucher_desc),
                    ReducedPriceIfNOrMoreItems(tshirt_desc, 3, 19.0)}

        sut = Checkout(my_rules)
        for it in ['VOUCHER', 'TSHIRT', 'VOUCHER', 'VOUCHER', 'PANTS', 'TSHIRT', 'TSHIRT']:
            sut.add_item(it)

        expected_total = 74.50

        self.assertEqual(expected_total, sut.get_total())
Exemplo n.º 25
0
    def test_two_for_one_discount_is_applied(self):
        voucher_desc = Item('VOUCHER', 'Gift Card', 5.0)
        tshirt_desc = Item('TSHIRT', 'Summer T-Shirt', 20.0)
        pants_desc = Item('PANTS', 'Summer Pants', 7.5)

        my_rules = {voucher_desc, tshirt_desc, pants_desc,
                    TwoForOneItem(voucher_desc),
                    ReducedPriceIfNOrMoreItems(tshirt_desc, 3, 19.0)}

        sut = Checkout(my_rules)
        sut.add_item('VOUCHER')
        sut.add_item('TSHIRT')
        sut.add_item('VOUCHER')
        expected_total = 25.0

        self.assertEqual(expected_total, sut.get_total())
Exemplo n.º 26
0
    def test_total_remains_unaltered_when_discounts_do_not_apply(self):
        voucher_desc = Item('VOUCHER', 'Gift Card', 5.0)
        tshirt_desc = Item('TSHIRT', 'Summer T-Shirt', 20.0)
        pants_desc = Item('PANTS', 'Summer Pants', 7.5)

        my_rules = {voucher_desc, tshirt_desc, pants_desc,
                    TwoForOneItem(voucher_desc),
                    ReducedPriceIfNOrMoreItems(tshirt_desc, 3, 19.0)}

        sut = Checkout(my_rules)
        sut.add_item('VOUCHER')
        sut.add_item('TSHIRT')
        sut.add_item('PANTS')
        expected_total = 32.5

        self.assertEqual(expected_total, sut.get_total())
Exemplo n.º 27
0
    def test_incremental(self):
        checkout = Checkout(RULES)

        def assert_total(expected):
            self.assertEqual(expected, checkout.total())

        assert_total(0)
        checkout.scan('A')
        assert_total(50)
        checkout.scan('B')
        assert_total(80)
        checkout.scan('A')
        assert_total(130)
        checkout.scan('A')
        assert_total(160)
        checkout.scan('B')
        assert_total(175)
Exemplo n.º 28
0
def start(path):
    # initializing data
    cars = {}
    rentals = []

    data = DataFromDB(path)
    cars = data.cars

    for rental in data.rentals.values():
        try:
            checkout = Checkout(cars[rental.car_id], rental)
        except:
            # Values entered for checkout are incorrect -> we don't deal with this checkout
            pass
        else:
            rentals.append(checkout.format_for_export())

    with open('data/output.json', 'w', encoding='utf-8') as file:
        to_dump = {"rentals": rentals}
        json.dump(to_dump, file, ensure_ascii=False, indent=2)
    def test_incremental(self):
        checkout = Checkout()

        checkout.scan("A")
        self.assertEqual(50, checkout.total)

        checkout.scan("B")
        self.assertEqual(80, checkout.total)

        checkout.scan("A")
        self.assertEqual(130, checkout.total)

        checkout.scan("A")
        self.assertEqual(160, checkout.total)

        checkout.scan("B")
        self.assertEqual(175, checkout.total)

        checkout.scan("C")
        self.assertEqual(195, checkout.total)

        checkout.scan("B")
        self.assertEqual(225, checkout.total)

        checkout.scan("C")
        self.assertEqual(245, checkout.total)

        checkout.scan("D")
        self.assertEqual(260, checkout.total)

        checkout.scan("D")
        self.assertEqual(275, checkout.total)

        checkout.scan("D")
        self.assertEqual(290, checkout.total)

        checkout.scan("C")
        self.assertEqual(310, checkout.total)
Exemplo n.º 30
0
def checkout():
    checkout = Checkout()
    checkout.addItemPrice("a", 1)
    return checkout