예제 #1
0
    def test_change_details_of_product(self):
        user1 = User("amir", 1)
        user1.identifier = 0
        user1.username = "******"
        user1.password = "******"
        user1.state = State.STORE_OWNER
        user1.is_logged_in = True

        store1 = Store("mega", 1, "123123", None, None)
        store1.store_number = 1

        product1 = Product('chocholate', 'Food', ['Food', 'Sweet'], 10)
        product1.catalog_number = 1

        store1.owners = [0]
        store1.add_new_product(product1)

        Ecommerce.get_instance().subscribers = [user1]
        Ecommerce.get_instance().stores = [store1]

        self.assertTrue(
            user1.change_details_of_product(1, "name", "whiteChocholate").val,
            "need return True")
        self.assertFalse(
            user1.change_details_of_product(2, "name", "whiteChocholate").val,
            "need return False")
예제 #2
0
    def find_substitute(self):
        """
            This method is the client for the application
        """
        # Ask the user to choose a category
        menu_title = 'Choisissez une catégorie'
        answers_title = 'Sélectionnez une catégorie (numéro)'
        answers = API_CATEGORIES

        category = SelectionMenu(menu_title, answers_title, answers)

        # Ask user to choose a product to substitute
        to_substitute = None

        while not to_substitute:
            # Display available products in the chossen category
            available_products = self.database.select_products(
                category.selected, NUMBER_OF_PRODUCTS,
                DISCRIMINANT_NUTRISCORE_GRADE)
            available_products.append('Afficher d\'autres produits au hasard')
            menu_title = 'Choisissez un produit à subsituer'
            answers_title = 'Sélectionnez un produit (numéro)'
            answers = available_products

            product = SelectionMenu(menu_title, answers_title, answers)

            if product.selected != 'Afficher d\'autres produits au hasard':
                to_substitute = Product(
                    **self.database.select_product(product.selected))

        # Select in the database the potential substitutes for to the selected
        # product
        available_substitutes = self.database.select_substitutes(
            to_substitute, NUMBER_OF_SIMILAR_CATEGORIES, NUMBER_OF_SUBSTITUTES)

        if available_substitutes:
            # Ask the user to choose a substitute
            menu_title = 'Choisissez un substitut'
            answers_title = 'Sélectionner un substitut (numéro)'
            answers = available_substitutes

            substitute = SelectionMenu(menu_title, answers_title, answers)

            substituted = Product(
                **self.database.select_product(substitute.selected))
            substituted.display()
        else:
            print('Nous n\'avons pas de substitut à vous proposer.')
            substituted = None

        if substituted:
            # Ask the user if she·he wants to save the product
            menu_title = 'Souhaitez-vous sauvegarder le produit ?'
            answers_title = 'Sélectionnez une réponse (numéro)'
            answers = ['Oui', 'Non']

            save = SelectionMenu(menu_title, answers_title, answers)

            if save.selected == 'Oui':
                self.database.save_product(to_substitute, substituted)
def test_exercise():
    coffee_cup = Product("Coffee cup")
    car = Product.with_location("Car", "showroom")
    table = Product.with_weight("Table", 50)

    assert str(coffee_cup) == "Coffee cup (1 kg) can be found from the shelf"
    assert str(car) == "Car (1 kg) can be found from the showroom"
    assert str(table) == "Table (50 kg) can be found from the shelf"
예제 #4
0
 def test_search_product(self):  #ok
     store1 = Store("ramiLevi", 0, "123123", None, None)
     store1.store_number = 0
     product1 = Product('Apple', 'Fruits', ['Food', 'Fruit', 'Apple'], 5)
     product1.catalog_number = 0
     store1.add_new_product(product1)
     Ecommerce.get_instance().stores = [store1]
     self.assertEqual(len(User.search_product("name", "Apple").val), 1,
                      'bad')
예제 #5
0
 def setUp(self):
     self.store = Store('schnitzale', 23444, 4, None, None)
     self.store.store_number = 0
     self.productA = Product('france schnitzel', 'schnitzel',
                             ['hot', 'crispy'], 35)
     self.productB = Product('italian schnitzel', 'hotSchnitzel',
                             ['hot', 'sweet'], 35)
     self.productA.catalog_number = 0
     self.productB.catalog_number = 1
예제 #6
0
 def test_add_to_cart(self):  #ok
     user1 = User("amir", 12)
     product1 = Product('chocholate', 'Food', ['Food', 'Sweet'], 10)
     product1.catalog_number = 1
     store1 = Store("ramiLevi", 0, "123123", None, None)
     store1.add_new_product(product1)
     Ecommerce.get_instance().stores = [store1]
     store1.inc_product_amount(1, 5)
     self.assertTrue(user1.add_to_cart(1).val, "need return True")
     self.assertFalse(user1.add_to_cart(9).val, "need return False")
 def test_check_conditional_discount(self):
     discount = DiscountService()
     mango = Product('mango', 'fruit', ['yellow', 'sweet'], 7)
     pear = Product('pear', 'fruit', ['green', 'sweet'], 4)
     shopping_cart = ShoppingCart(Store('effect', 123, 123, None, None))
     shopping_cart.add_product(mango)
     self.assertFalse(
         discount.check_conditional_discount(('And', pear, mango),
                                             shopping_cart))
     shopping_cart.add_product(pear)
     self.assertTrue(
         discount.check_conditional_discount(('And', pear, mango),
                                             shopping_cart))
예제 #8
0
 def test_remove_from_cart(self):  #ok
     user1 = User("amir", 32)
     user1.identifier = 1
     user1.state = State.STORE_OWNER
     product1 = Product('chocholate', 'Food', ['Food', 'Sweet'], 10)
     product1.catalog_number = 1
     store1 = Store("ramiLevi", 0, "123123", None, None)
     store1.store_number = 0
     store1.supervisor = 1
     store1.add_new_product(product1)
     store1.owners = [user1.identifier]
     Ecommerce.get_instance().stores = [store1]
     self.assertTrue(user1.remove_product(0, 1).val, "need return True")
     self.assertFalse(user1.remove_product(0, 1).val, "need return False")
예제 #9
0
 def test_remove_product(self):  #ok
     user1 = User("amir", 12)
     user1.identifier = 0
     store1 = Store("mega", 0, "456456", None, None)
     store1.store_number = 1
     product1 = Product('chocholate', 'Food', ['Food', 'Sweet'], 10)
     product1.catalog_number = 1
     store1.add_new_product(product1)
     Ecommerce.get_instance().stores = [store1]
     user1.state = State.GUEST
     self.assertFalse(user1.remove_product(1, 1).val, "need return False")
     user1.state = State.STORE_OWNER
     self.assertTrue(user1.remove_product(1, 1), "need return True")
     self.assertFalse(user1.remove_product(1, 10).val, "need return False")
예제 #10
0
 def test_calculate_price(self):
     basket = ShoppingBasket()
     discount_service = DiscountService()
     buying_policy = BuyingPolicyService()
     store = Store('effect', 123, 123, discount_service, buying_policy)
     cart = ShoppingCart(store)
     product_a = Product('france schnitzel', 'schnitzel', ['hot', 'crispy'],
                         35)
     product_b = Product('israeli schnitzel', 'schnitzel',
                         ['hot', 'casher'], 15)
     cart.add_product(product_a)
     basket.shopping_carts.append(cart)
     self.assertEqual(basket.calculate_price(), 35)
     cart.add_product(product_b)
     self.assertEqual(basket.calculate_price(), 50)
 def test_has_conditional_product_discount(self):
     discount = DiscountService()
     apple = Product('apple', 'fruit', ['green', 'sweet'], 5)
     mango = Product('mango', 'fruit', ['yellow', 'sweet'], 7)
     pear = Product('pear', 'fruit', ['green', 'sweet'], 4)
     start_date = datetime.datetime(2016, 2, 1, 12, 12, 12, 12)
     end_date = datetime.datetime(2020, 2, 1, 12, 12, 12, 12)
     self.assertFalse(discount.has_conditional_product_discount(apple))
     discount.add_product_discount(apple,
                                   70,
                                   True,
                                   start_date,
                                   end_date,
                                   condition=('And', pear, mango))
     self.assertTrue(discount.has_conditional_product_discount(apple))
예제 #12
0
    def first_start(self):
        """
            This method initialise the database if its empty
        """
        print('')
        print('========== Première exécution de l\'application ===========')
        print('==> Téléchargement des données depuis l\'Open Food Facts')

        # Initialize the API
        api = Api(API_URL_BASE, TMP_DIR)

        # Download data with the API
        api.download_products(API_CATEGORIES, API_PAGE_SIZE, API_PAGES)
        print('')
        print('==> Téléchargement des données terminé !')

        # Read data downloaded and clean uncompleted products
        api.read_json_with_key('products')
        api.keep_required(API_DATA_FORMAT)
        api.format_data(API_DATA_FORMAT)

        # Define each product as an object with variables attributes
        for product_data in api.data:
            product = Product(**product_data)

        # Insert products in the database
        self.database.insert_products(product.products)

        # Delete temporary files
        api.delete_files()
예제 #13
0
 def parse(self) -> Product:
     """ Parse the URL and return Product object """
     self._soup = self._parser.parse(url=self._url)
     name: str = self._parse_name()
     asin: str = self._parse_asin()
     weight: float = self._parse_weight()
     return Product(name=name, asin=asin, weight=weight)
예제 #14
0
 def setUpClass(self):
     self.control = BangazonControl()
     self.order = Order()
     self.product = Product()
     self.payment_type = PaymentType()
     self.product_order = ProductOrder()
     self.control.set_active_customer(1)
 def test_add_product_discount(self):
     discount = DiscountService()
     apple = Product('apple', 'fruit', ['green', 'sweet'], 5)
     start_date = datetime.datetime(2016, 2, 1, 12, 12, 12, 12)
     end_date = datetime.datetime(2020, 2, 1, 12, 12, 12, 12)
     discount.add_product_discount(apple, 70, True, start_date, end_date)
     self.assertEqual(len(discount.product_discount_table), 1)
     self.assertTrue(
         discount.product_discount_table[apple.catalog_number]
         ['RegularDiscount'][discount.DISCOUNT_TYPE] == 'RegularDiscount')
     self.assertEqual(
         discount.product_discount_table[apple.catalog_number]
         ['RegularDiscount'][discount.DISCOUNT_PERCENTAGE], 70)
     self.assertTrue(discount.product_discount_table[apple.catalog_number]
                     ['RegularDiscount'][discount.DOUBLE_DEALS])
     discount.add_product_discount(apple,
                                   60,
                                   False,
                                   start_date,
                                   end_date,
                                   coupon_code=123)
     self.assertEqual(len(discount.product_discount_table), 1)
     self.assertTrue(
         discount.product_discount_table[apple.catalog_number]
         ['CouponDiscount'][discount.DISCOUNT_TYPE] == 'CouponDiscount')
     self.assertTrue(
         discount.product_discount_table[apple.catalog_number]
         ['CouponDiscount'][discount.DISCOUNT_PERCENTAGE], 60)
     self.assertFalse(discount.product_discount_table[apple.catalog_number]
                      ['CouponDiscount'][discount.DOUBLE_DEALS])
 def test_has_regular_product_discount(self):
     discount = DiscountService()
     apple = Product('apple', 'fruit', ['green', 'sweet'], 5)
     start_date = datetime.datetime(2016, 2, 1, 12, 12, 12, 12)
     end_date = datetime.datetime(2020, 2, 1, 12, 12, 12, 12)
     self.assertFalse(discount.has_regular_product_discount(apple))
     discount.add_product_discount(apple, 70, True, start_date, end_date)
     self.assertTrue(discount.has_regular_product_discount(apple))
예제 #17
0
    def test_add_product_to_cart(self):

        Ecommerce.get_instance().register("client1", "123456789", 24)
        Ecommerce.get_instance().register("admin", "123456789", 24)
        existing_product = Product('Mexican Schnitzel', 'Schnitzels', ['hot', 'crispy', 'spicy'], 45)
        non_existing_product = Product('African Schnitzel', 'Schnitzels', ['???'], 567)

        Ecommerce.get_instance().subscribers = [user]
        Ecommerce.get_instance().stores = [store]
        store.add_new_product(existing_product)
        store.inc_product_amount(existing_product.catalog_number, 5)

        self.assertTrue(Ecommerce.get_instance().add_to_cart(user.shopping_basket, existing_product.catalog_number).val)
        self.assertFalse((Ecommerce.get_instance().add_to_cart(user.shopping_basket,
                                                               non_existing_product.catalog_number)).val)
        self.assertTrue(user.shopping_basket.shopping_carts[0].products[existing_product.catalog_number]['product'] ==
                        existing_product)
예제 #18
0
 def test_inc_product_amount(self):  #ok
     user1 = User("amir", 13)
     user1.identifier = 0
     store1 = Store("ramiLevi", 0, "123123", None, None)
     store1.store_number = 0
     product1 = Product('Banana', 'Fruits', ['Food', 'Fruit', 'Apple'], 5)
     product1.catalog_number = 0
     store1.add_new_product(product1)
     Ecommerce.get_instance().stores = [store1]
     user1.state = State.GUEST
     self.assertFalse(
         user1.inc_product_amount(0, 0, 3).val, "need return False")
     user1.state = State.STORE_OWNER
     self.assertTrue(
         user1.inc_product_amount(0, 0, 3).val, "need return True")
     self.assertFalse(
         user1.inc_product_amount(100, 0, 3).val, "need return False")
     self.assertFalse(
         user1.inc_product_amount(0, 10, 3).val, "need return False")
예제 #19
0
    def test_remove_product_from_cart(self):
        user = User('Shlomo', 18)
        user.state = State.SUBSCRIBER

        store = Store("Fruit Store", 5, 123456, None, None)
        store.store_number = 0

        existing_product = Product('Mexican Schnitzel', 'Schnitzels', ['hot', 'crispy', 'spicy'], 45)
        non_existing_product = Product('African Schnitzel', 'Schnitzels', ['???'], 567)

        Ecommerce.get_instance().subscribers = [user]
        Ecommerce.get_instance().stores = [store]
        store.add_new_product(existing_product)
        store.inc_product_amount(existing_product.catalog_number, 5)
        Ecommerce.get_instance().add_to_cart(user.shopping_basket, existing_product.catalog_number)
        self.assertFalse((Ecommerce.get_instance().remove_from_cart(user.shopping_basket,
                                                                    non_existing_product.catalog_number)).val)
        self.assertTrue(user.shopping_basket.shopping_carts[store.store_number].products[existing_product.catalog_number]['product'] == existing_product)
        self.assertTrue(Ecommerce.get_instance().remove_from_cart(user.shopping_basket, existing_product.catalog_number))
        self.assertTrue(len(user.shopping_basket.shopping_carts[store.store_number].products) == 0)
예제 #20
0
 def test_add_product_to_cart(self):
     basket = ShoppingBasket()
     discount_service = DiscountService()
     buying_policy = BuyingPolicyService()
     store = Store('effect', 123, 123, discount_service, buying_policy)
     product_a = Product('france schnitzel', 'schnitzel', ['hot', 'crispy'],
                         35)
     self.assertFalse((basket.add_product_to_cart(product_a, store)).val)
     store.add_new_product(product_a)
     self.assertFalse((basket.add_product_to_cart(product_a, store)).val)
     store.inc_product_amount(product_a.catalog_number, 5)
     self.assertTrue((basket.add_product_to_cart(product_a, store)).val)
     self.assertEqual(len(basket.shopping_carts), 1)
     product_b = Product('israeli schnitzel', 'schnitzel',
                         ['hot', 'casher'], 15)
     store.add_new_product(product_b)
     store.inc_product_amount(product_b.catalog_number, 5)
     self.assertTrue((basket.add_product_to_cart(product_b, store)).val)
     self.assertEqual(len(basket.shopping_carts), 1)
     self.assertEqual(len(basket.shopping_carts[0].products), 2)
 def test_execute_transaction(self):
     discount_service = DiscountService()
     buying_policy = BuyingPolicyService()
     store = Store('effect', 123, 123, discount_service, buying_policy)
     cart = ShoppingCart(store)
     product_a = Product('france schnitzel', 'schnitzel', ['hot', 'krispy'],
                         35)
     cart.add_product(product_a)
     delivery_address = DeliveryAddress(123, 'Israel')
     store.add_new_product(product_a)
     store.inc_product_amount(product_a.catalog_number, 5)
     trans = (self.transaction_management.execute_transaction(
         123, cart, 'paypal',
         ['ofek', '4580160114431651', '7', '20', '458'], delivery_address,
         123)).val
     self.assertEqual(trans.total_price, 35)
     self.assertEqual(trans.buyer_identifier, 123)
     self.assertEqual(trans.products[product_a.catalog_number]['product'],
                      product_a)
     self.assertEqual(trans.store_number, store.store_number)
     self.assertEqual(trans.store_account, store.account_number)
     self.assertEqual(len(self.transaction_management.get_transactions()),
                      1)
     product_b = Product('israeli schnitzel', 'schnitzel',
                         ['hot', 'casher'], 15)
     store.add_new_product(product_b)
     store.inc_product_amount(product_b.catalog_number, 5)
     cart.add_product(product_b)
     trans = (self.transaction_management.execute_transaction(
         12, cart, 'paypal', ['ofek', '4580160114431651', '7', '20', '458'],
         delivery_address, 123)).val
     self.assertEqual(trans.total_price, 50)
     self.assertEqual(trans.buyer_identifier, 12)
     self.assertEqual(trans.products[product_a.catalog_number]['product'],
                      product_a)
     self.assertEqual(trans.products[product_b.catalog_number]['product'],
                      product_b)
     self.assertEqual(trans.store_number, store.store_number)
     self.assertEqual(trans.store_account, store.account_number)
     self.assertEqual(len(self.transaction_management.get_transactions()),
                      2)
예제 #22
0
 def test_contains_product(self):
     store = Store('schnitzale', 23444, 4, None, None)
     cart = ShoppingCart(store)
     product = Product('france schnitzel', 'schnitzel', ['hot', 'crispy'],
                       35)
     self.assertFalse(cart.contains_product(product))
     store.add_new_product(product)
     store.inc_product_amount(product.catalog_number, 5)
     cart.products[product.catalog_number] = {
         'product': product,
         'amount': 1
     }
     self.assertTrue(cart.contains_product(product))
예제 #23
0
 def test_remove_product_from_cart(self):
     basket = ShoppingBasket()
     discount_service = DiscountService()
     buying_policy = BuyingPolicyService()
     store = Store('effect', 123, 123, discount_service, buying_policy)
     product = Product('france schnitzel', 'schnitzel', ['hot', 'crispy'],
                       35)
     cart = ShoppingCart(store)
     self.assertFalse((basket.remove_product_from_cart(product, cart)).val)
     basket.shopping_carts.append(cart)
     self.assertFalse((basket.remove_product_from_cart(product, cart)).val)
     cart.add_product(product)
     self.assertTrue((basket.remove_product_from_cart(product, cart)).val)
예제 #24
0
    def find_saved(self):
        """
            This method display the products already saved by the user
        """
        # Get all products saved in the database
        saved_products = self.database.select_saved_products()

        if saved_products:
            # Ask the user which product she·he wants to read
            menu_title = 'Quel substitut souhaitez-vous consulter ?'
            answers_title = 'Sélectionnez le substitut (numéro)'
            answers = saved_products

            substituted = SelectionMenu(menu_title, answers_title, answers)
        else:
            print('Aucun substitut n\'a était sauvegardé pour l\'instant')
            substituted = None

        if substituted:
            # Display the selected subsitute
            product = Product(
                **self.database.select_product(substituted.selected))
            product.display()
예제 #25
0
 def test_calculate_price(self):
     discount_service = DiscountService()
     buying_policy = BuyingPolicyService()
     store = Store('schnitzale', 23444, 4, discount_service, buying_policy)
     cart = ShoppingCart(store)
     product_a = Product('france schnitzel', 'schnitzel', ['hot', 'crispy'],
                         35)
     product_b = Product('israeli schnitzel', 'schnitzel',
                         ['hot', 'casher'], 15)
     store.add_new_product(product_a)
     store.inc_product_amount(product_a.catalog_number, 5)
     store.add_new_product(product_b)
     store.inc_product_amount(product_b.catalog_number, 5)
     cart.products[product_a.catalog_number] = {
         'product': product_a,
         'amount': 2
     }
     self.assertEqual(cart.calculate_price(), 70)
     cart.products[product_b.catalog_number] = {
         'product': product_b,
         'amount': 1
     }
     self.assertEqual(cart.calculate_price(), 85)
예제 #26
0
    def products_from(data_path: Path) -> list:
        """
        Extracts products found from the data directory.

        Parameters:
            data_path (Path): data directory.

        Returns:
            list: products.
        """
        products = []
        for product_dir in os.listdir(data_path):
            product = Product(os.path.join(data_path, product_dir))
            products.append(product)
        return products
 def test_calculate_individual_discount(self):
     discount = DiscountService()
     apple = Product('apple', 'fruit', ['green', 'sweet'], 5)
     shopping_cart = ShoppingCart(Store('effect', 123, 123, None, None))
     start_date = datetime.datetime(2016, 2, 1, 12, 12, 12, 12)
     end_date = datetime.datetime(2020, 2, 1, 12, 12, 12, 12)
     discount.add_product_discount(apple,
                                   20,
                                   True,
                                   start_date,
                                   end_date,
                                   coupon_code=123)
     x = discount.calculate_individual_discount(
         discount.product_discount_table[apple.catalog_number]
         ['CouponDiscount'], shopping_cart)
     self.assertEqual(x[0], 20)
     self.assertEqual(x[1], 'CouponDiscount')
예제 #28
0
 def test_remove_product(self):
     store = Store('schnitzale', 23444, 4, None, None)
     cart = ShoppingCart(store)
     product = Product('france schnitzel', 'schnitzel', ['hot', 'crispy'],
                       35)
     store.add_new_product(product)
     store.inc_product_amount(product.catalog_number, 5)
     cart.products[product.catalog_number] = {
         'product': product,
         'amount': 2
     }
     cart.remove_product(product)
     self.assertEqual(cart.products[product.catalog_number], {
         'product': product,
         'amount': 1
     })
     cart.remove_product(product)
     self.assertEqual(len(cart.products), 0)
예제 #29
0
class ProductTest(unittest.TestCase):

    def setUp(self):
        self.p1 = Product('france schnitzel', 'schnitzel', ['hot', 'crispy'], 35)
        self.p1.catalog_number = 1

    def test_change_detail(self):
        self.assertFalse(self.p1.change_detail('unknown attribute', 'bla bla'))  # SHOULD FAIL

        self.p1.change_detail('name', 'new schnitzel')
        self.assertEqual(self.p1.name, 'new schnitzel')

        self.p1.change_detail('category', 'new category')
        self.assertEqual(self.p1.category, 'new category')

        self.p1.change_detail('key words', ['key words'])
        self.assertEqual(self.p1.key_words, ['key words'])
 def test_get_transactions_by_identifier(self):
     discount_service = DiscountService()
     buying_policy = BuyingPolicyService()
     store = Store('effect', 123, 123, discount_service, buying_policy)
     cart = ShoppingCart(store)
     product_a = Product('france schnitzel', 'schnitzel', ['hot', 'krispy'],
                         35)
     store.add_new_product(product_a)
     store.inc_product_amount(product_a.catalog_number, 5)
     cart.add_product(product_a)
     delivery_address = DeliveryAddress(123, 'Israel')
     trans = (self.transaction_management.execute_transaction(
         123, cart, 'paypal',
         ['ofek', '4580160114431651', '7', '20', '458'], delivery_address,
         123)).val
     self.assertEqual(
         self.transaction_management.get_transactions_by_identifier(123),
         [trans])
     self.assertEqual(
         self.transaction_management.get_transactions_by_store(12), [])