示例#1
0
 def test_add_single_item(self):
     """
     Basket.add() a single item is successful.
     """
     basket = Basket()
     basket.add("pasta")
     self.assertEqual(len(basket), 1)
示例#2
0
 def test_add_two_items(self):
     """
     Adding more than one item increases basket length.
     """
     basket = Basket()
     basket.add("pasta")
     basket.add("twix")
     self.assertEqual(len(basket), 2)
示例#3
0
 def test_get_total_with_one_offer(self):
     """
     Basket get_total returns correct value with a bogof offer applied.
     """
     product_store = self._create_product_store()
     bogof_blueberries = MultiBuyOffer("blueberries", 1, 1)
     basket = Basket(product_store)
     basket.add("blueberries", 2)
     basket.add("fish")
     self.assertEqual(basket.get_total(offers=[bogof_blueberries]), Decimal('5.20'))
示例#4
0
 def test_get_total_with_dependent_discount_offer(self):
     """
     Basket get_total returns correct value with dependent discount offer applied.
     """
     product_store = self._create_product_store()
     twix_pasta_20_discount = DependentDiscountOffer("twix", "pasta", Decimal("0.2"))
     basket = Basket(product_store)
     basket.add("twix", 2)
     basket.add("pasta")
     self.assertEqual(basket.get_total(offers=[twix_pasta_20_discount]), Decimal('2.94'))
示例#5
0
 def test_one_with_one_dependent(self):
     """
     One target product in the presence of one dependent product triggers discount.
     """
     product_store = self._create_product_store()
     twix_20_discount = DependentDiscountOffer("twix", "pasta", Decimal("0.2"))
     basket = Basket(product_store)
     twix_basketitem = basket.add("twix")
     basket.add("pasta")
     self.assertEqual(twix_20_discount.calculate_line_total(twix_basketitem, product_store, basket), Decimal("0.64"))
示例#6
0
class BasketTest(unittest.TestCase):
    def setUp(self):

        ps = ProductStore.load_from_config_file()
        os = OfferStore.load_from_config_file()
        self.basket = Basket(ps, os)

    def _get_total_price(self, response):
        total_price = 0
        for item in response:
            total_price = total_price + item['price_after_discount']
        return total_price

    def test_empty_basket_view(self):
        self.assertEqual([], self.basket.status())

    def test_no_offers(self):
        self.basket.add('AP1')
        self.basket.add('CH1')
        response = self.basket.status()
        price = self._get_total_price(response)
        self.assertEqual(price, 9.11)

    def test_multi_offers(self):

        self.basket.add('AP1')
        self.basket.add('AP1')
        self.basket.add('AP1')
        self.basket.add('CH1')
        self.basket.add('MK1')
        response = self.basket.status()
        price = self._get_total_price(response)
        self.assertEqual(price, 16.61)
示例#7
0
def handle_file(message):
    try:
        if message.photo:
            file_id = message.photo[-1].file_id
            file_info = bot.get_file(file_id)
            file = requests.get(
                'https://api.telegram.org/file/bot{0}/{1}'.format(
                    TOKEN, file_info.file_path))

            with open(
                    dir_path + '\imgs\%s_%s.png' % (file_id, message.chat.id),
                    'wb') as f:

                f.write(file.content)
                decoded_barcode = decode(
                    Image.open(dir_path + '\imgs\%s_%s.png' %
                               (file_id, message.chat.id)))
                bot.send_message(message.chat.id, u"Оберіть Опцію")

                if not decoded_barcode:
                    bot.send_message(
                        message.chat.id,
                        u'Штрих код не знайдено, спробуйте ще раз')
                else:
                    res = tmp_geting_data(str(int(decoded_barcode[0].data)))
                    for basket in basket_list:
                        if basket.chat_id == message.chat.id:
                            basket.counter += 1
                            basket.add(res)
                            basket.add_barcode_to_list(
                                str(int(decoded_barcode[0].data)))

                    tmp_list = [item.chat_id for item in basket_list]
                    if message.chat.id not in tmp_list:
                        tmp_basket = Basket(message.chat.id)
                        tmp_basket.counter += 1
                        tmp_basket.add(res)
                        tmp_basket.add_barcode_to_list(
                            str(int(decoded_barcode[0].data)))
                        basket_list.append(tmp_basket)
                    # time.sleep(5)

                    # print(basket_list)
                    mp.track(message.chat.id, 'Handle file')
                    # bot.send_message(message.chat.id, u"Оберіть Опцію")
            os.remove(dir_path + '/imgs/%s_%s.png' %
                      (file_id, message.chat.id))
    except Exception as err:
        logger.write_logs(handle_file.__name__, err)
示例#8
0
class TestBasket(TestCase):
    def setUp(self):
        catalogue = create_catalogue()
        offers = create_offers()
        self.basket = Basket(catalogue, offers)

    def test_add(self):
        self.basket.add("sardines")
        self.assertEqual(self.basket._items[0].name, "Sardines")

    def test_remove(self):
        self.basket.add("sardines")
        self.basket.add("biscuits")
        self.basket.remove("biscuits")
        self.assertEqual(len(self.basket._items), 1)
        self.assertEqual(self.basket._items[0].name, "Sardines")

    def test_remove_quantity(self):
        self.basket.add("sardines", quantity=2)
        self.basket.add("biscuits", quantity=3)
        self.basket.remove("biscuits", 2)
        self.assertEqual(len(self.basket._items), 2)
        self.assertEqual(self.basket._items[0].name, "Sardines")
        self.assertEqual(self.basket._items[1].name, "Biscuits")
        self.assertEqual(self.basket._items[1].quantity, 1)

    def test_subtotal(self):
        self.basket.add("baked beans")
        self.basket.add("biscuits")
        self.assertEqual(self.basket.subtotal, 2.19)

    def test_buy_two_get_one_free_discounts(self):
        self.basket.add("baked beans", quantity=4)
        self.basket.add("biscuits")

        self.assertEqual(self.basket.subtotal, 5.16)
        self.assertEqual(self.basket.discount, 0.99)
        self.assertEqual(self.basket.total, 4.17)

    def test_percentage_off_discount(self):
        self.basket.add("sardines", quantity=3)
        self.basket.add("biscuits")

        self.assertEqual(self.basket.subtotal, 6.87)
        self.assertEqual(self.basket.discount, 1.42)
        self.assertEqual(self.basket.total, 5.45)

    def test_cheapest_free_discount(self):
        self.basket.add("shampoo (large)", quantity=3)
        self.basket.add("shampoo (medium)")
        self.basket.add("shampoo (small)", quantity=2)

        self.assertEqual(self.basket.subtotal, 17.00)
        self.assertEqual(self.basket.discount, 5.50)
        self.assertEqual(self.basket.total, 11.50)

    def test_mixed_discount(self):
        self.basket.add("baked beans", 2)
        self.basket.add("biscuits")
        self.basket.add("sardines", 2)

        self.assertEqual(self.basket.subtotal, 6.96)
        self.assertEqual(self.basket.discount, 0.95)
        self.assertEqual(self.basket.total, 6.01)

    def test_empty_basket(self):
        self.assertEqual(self.basket.subtotal, 0)
        self.assertEqual(self.basket.discount, 0)
        self.assertEqual(self.basket.total, 0)
class TestBasket(unittest.TestCase):
    def setUp(self):
        self.basket = Basket()
        self.beans = Item("Beans", 0.22)
        self.milk = Item("Milk", 0.60)

    def test_basket_starts_empty(self):
        self.assertEqual(0, self.basket.number_of_items())

    def test_can_add_item_to_basket(self):
        self.basket.add(self.beans)
        self.assertEqual(1, self.basket.number_of_items())

    def test_can_remove_item_from_basket(self):
        self.basket.add(self.beans)
        self.basket.add(self.milk)
        self.basket.remove(self.beans)
        self.assertEqual(1, self.basket.number_of_items())

    def test_can_empty_basket(self):
        self.basket.add(self.beans)
        self.basket.add(self.milk)
        self.basket.empty()
        self.assertEqual(0, self.basket.number_of_items())

    def test_can_get_total_cost_of_items_in_basket(self):
        self.basket.add(self.beans)
        self.basket.add(self.milk)
        self.assertEqual(0.82, self.basket.get_total())
示例#10
0
class TestItem(unittest.TestCase):
    def setUp(self):
        self.beans = Item("Beans", 0.20)
        self.milk = Item("Milk", 0.75)
        self.basket = Basket()
        self.discount = Discount()

    def test_bogof_list_starts_empty(self):
        self.assertEqual(0, len(self.discount.bogof_items))

    def test_can_add_item_to_bogof_list(self):
        self.discount.add_to_bogof(self.beans)
        self.assertEqual(1, len(self.discount.bogof_items))

    def test_bogof_2_beans_is_20_pence(self):
        self.basket.add(self.beans)
        self.basket.add(self.beans)
        bogof_discount = self.discount.bogof_for_item(self.basket, self.beans)
        self.assertEqual(0.20, bogof_discount)

    def test_bogof_1_beans_is_0_pence(self):
        self.basket.add(self.beans)
        bogof_discount = self.discount.bogof_for_item(self.basket, self.beans)
        self.assertEqual(0.0, bogof_discount)

    def test_bogof_3_beans_is_20_pence(self):
        self.basket.add(self.beans)
        self.basket.add(self.beans)
        self.basket.add(self.beans)
        bogof_discount = self.discount.bogof_for_item(self.basket, self.beans)
        self.assertEqual(0.20, bogof_discount)

    def test_bogof_4_beans_is_40_pence(self):
        self.basket.add(self.beans)
        self.basket.add(self.beans)
        self.basket.add(self.beans)
        self.basket.add(self.beans)
        bogof_discount = self.discount.bogof_for_item(self.basket, self.beans)
        self.assertEqual(0.40, bogof_discount)

    def test_bogof_discount_basket_95_pence(self):
        self.basket.add(self.beans)
        self.basket.add(self.beans)
        self.basket.add(self.milk)
        self.basket.add(self.milk)
        self.discount.add_to_bogof(self.beans)
        self.discount.add_to_bogof(self.milk)
        bogof_discount = self.discount.bogof_discount(self.basket)
        self.assertEqual(0.95, bogof_discount)

    def test_10_percent_discount_on_total_over_20_pounds(self):
        dvd = Item("DVD", 20.00)
        self.basket.add(self.beans)
        self.basket.add(self.beans)
        self.basket.add(dvd)
        basket_total = self.discount.extra_10_per_cent(self.basket)
        self.assertEqual(18.36, basket_total)

    def test_extra_2_per_cent_discount__cust_has_loyalty_card(self):
        customer = Customer("Jack")
        customer.has_loyalty_card = True
        dvd = Item("DVD", 20.00)
        self.basket.add(dvd)
        basket_total = self.discount.extra_2_percent_for_loyal_cust(
            self.basket, customer)
        self.assertEqual(19.60, basket_total)

    def test_extra_2_per_cent_discount__cust_does_not_have_loyalty_card(self):
        customer = Customer("Jack")
        dvd = Item("DVD", 20.00)
        self.basket.add(dvd)
        basket_total = self.discount.extra_2_percent_for_loyal_cust(
            self.basket, customer)
        self.assertEqual(20.00, basket_total)
示例#11
0
class TestBasket(unittest.TestCase):
    def setUp(self):
        self.basket = Basket()
    def tearDown(self):
        self.basket = None
    def testBasketAppear(self):
        assert self.basket, "Basket must be defined."
    def testBasketCanAddProduct(self):
        self.basket.add(Product())

    def testBsketRemoveProduct(self):
        product = Product()
        self.basket.add(product)
        self.basket.remove(product)
        assert len(self.basket.products) == 0, "Basket must be empty on all products deleted"
        self.basket.add(product)
        self.basket.add(product)
        self.basket.add(product)
        self.basket.remove(product)
        assert self.basket.quantity_for(product) == 2, "Basket mst actually remove product from"
    def testBasketStoresQuantity(self):
        product = Product(1)
        product2 = Product(2)
        self.basket.add(product,5)
        self.basket.add(product2,3)
        assert self.basket.quantity_for(product2) == 3
        assert self.basket.quantity_for(product) == 5