Пример #1
0
    def test_create_a_promotion_associated_with_new_product(self):
        """ Create a promotion which is associated with a product thats not in our db yet"""
        promotions = Promotion.all()
        products = Product.all()
        self.assertEqual(promotions, [])
        self.assertEqual(products, [])

        promotion = Promotion(
            title="test_create",
            promo_type=PromoType.DISCOUNT,
            amount=10,
            start_date=datetime(2020, 10, 17),
            end_date=datetime(2020, 10, 18),
            is_site_wide=True,
        )
        product = Product(id=123)
        promotion.products.append(product)
        self.assertTrue(product is not None)
        promotion.create()
        # Assert that it was assigned an id and shows up in the database
        self.assertEqual(promotion.id, 1)
        self.assertEqual(product.id, 123)
        products = Product.all()
        promotions = Promotion.all()
        self.assertEqual(len(products), 1)
        self.assertEqual(len(promotions), 1)
Пример #2
0
 def test_create_a_product(self):
     products = Product.all()
     self.assertEqual(products, [])
     product = Product(id=123)
     self.assertTrue(product is not None)
     product.create()
     self.assertEqual(product.id, 123)
     products = Product.all()
     self.assertEqual(len(products), 1)
Пример #3
0
 def test_delete_a_product(self):
     """ Delete a Product """
     product = Product(name="iPhone X",
                       description="Black iPhone",
                       category="Technology",
                       price=999.99)
     product.create()
     self.assertEqual(len(Product.all()), 1)
     # delete the product and make sure it isn't in the database
     product.delete()
     self.assertEqual(len(Product.all()), 0)
Пример #4
0
 def test_delete_a_product_commit_error(self):
     """ Delete a Product """
     product = Product(name="iPhone X",
                       description="Black iPhone",
                       category="Technology",
                       price=999.99)
     product.create()
     self.assertEqual(len(Product.all()), 1)
     # delete the product and make sure it isn't in the database
     with patch('service.models.db.session.commit') as commit:
         commit.side_effect = InvalidRequestError
         product.delete()
         self.assertEqual(len(Product.all()), 1)
Пример #5
0
 def test_add_a_product(self):
     """ Create a product and add it to the database """
     products = Product.all()
     self.assertEqual(products, [])
     product = Product(name="Cake",
                       description="Chocolate Cake",
                       category="Food",
                       price=10.50)
     self.assertTrue(product is not None)
     self.assertEqual(product.id, None)
     product.create()
     # Assert that it was assigned an id and shows up in the database
     self.assertEqual(product.id, 1)
     products = Product.all()
     self.assertEqual(len(products), 1)
Пример #6
0
 def test_add_a_product(self):
     """ Create a product and add it to the database """
     products = Product.all()
     self.assertEqual(products, [])
     product = Product(name="Test Product",
                       sku="00000000",
                       price=1.01,
                       stock=10,
                       size="N/A",
                       color="N/A",
                       category="Misc",
                       description="This is a test product",
                       available=True)
     self.assertTrue(product != None)
     self.assertEqual(product.id, None)
     product.create()
     # Assert that it was assigned an id and shows up in the database
     self.assertEqual(product.id, 1)
     products = Product.all()
     self.assertEqual(len(products), 1)
Пример #7
0
    def test_restock_a_product(self):
        """ Restock a Product """
        products = ProductFactory.create_batch(1)
        for product in products:
            product.create()

        products[0].available = False
        products[0].stock = 0
        product.save()
        products = Product.all()
        self.assertEqual(len(products), 1)
        self.assertEqual(products[0].id, 1)
        self.assertEqual(products[0].stock, 0)
        self.assertEqual(products[0].available, False)
        product.restock(100)
        product.save()
        products = Product.all()
        self.assertEqual(len(products), 1)
        self.assertEqual(products[0].id, 1)
        self.assertEqual(products[0].stock, 100)
        self.assertEqual(products[0].available, True)
Пример #8
0
 def test_add_a_product_commit_error(self, commit):
     """ Create a product and raises an InvalidRequestError """
     commit.side_effect = InvalidRequestError
     products = Product.all()
     self.assertEqual(products, [])
     product = Product(name="Cake",
                       description="Chocolate Cake",
                       category="Food",
                       price=10.50)
     self.assertTrue(product is not None)
     self.assertEqual(product.id, None)
     product.create()
     self.assertEqual(products, [])
Пример #9
0
def list_products():
    """ Returns all of the Products """
    app.logger.info("Request for Product list")
    products = []
    category = request.args.get("category")
    name = request.args.get("name")
    if category:
        products = Product.find_by_category(category)
    elif name:
        products = Product.find_by_name(name)
    else:
        products = Product.all()

    results = [product.serialize() for product in products]
    return make_response(jsonify(results), status.HTTP_200_OK)
Пример #10
0
 def test_update_a_product_commit_error(self):
     """ Update a product and raises an InvalidRequestError """
     product = Product(name="iPhone X",
                       description="Black iPhone",
                       category="Technology",
                       price=999.99)
     product.create()
     self.assertEqual(product.id, 1)
     # Change it and update it
     product.price = 9999.99
     product.description = "White iPhone"
     with patch('service.models.db.session.commit') as commit:
         commit.side_effect = InvalidRequestError
         product.update()
         products = Product.all()
         self.assertEqual(len(products), 1)
         self.assertEqual(products[0].price, 999.99)
         self.assertEqual(products[0].description, "Black iPhone")
Пример #11
0
 def test_update_a_product(self):
     """ Update a Product """
     product = Product()
     logging.debug(product)
     product.create()
     logging.debug(product)
     self.assertEqual(product.id, 1)
     # Change it and save it
     product.category = "Shoes"
     original_id = product.id
     product.save()
     self.assertEqual(product.id, original_id)
     self.assertEqual(product.category, "Shoes")
     # Fetch it back and make sure the id hasn't changed
     # but the data did change
     products = Product.all()
     self.assertEqual(len(products), 1)
     self.assertEqual(products[0].id, 1)
     self.assertEqual(products[0].category, "Shoes")
Пример #12
0
 def test_update_a_product(self):
     """ Update a Product """
     product = Product(name="iPhone X",
                       description="Black iPhone",
                       category="Technology",
                       price=999.99)
     product.create()
     self.assertEqual(product.id, 1)
     # Change it and update it
     product.price = 9999.99
     product.description = "White iPhone"
     product.update()
     self.assertEqual(product.id, 1)
     # Fetch it back and make sure the id hasn't changed
     # but the data did change
     products = Product.all()
     self.assertEqual(len(products), 1)
     self.assertEqual(products[0].price, 9999.99)
     self.assertEqual(products[0].description, "White iPhone")
Пример #13
0
 def test_find_product(self):
     """ Find a Product by ID """
     products = ProductFactory.create_batch(3)
     for product in products:
         product.create()
     logging.debug(products)
     # make sure they got saved
     self.assertEqual(len(Product.all()), 3)
     # find the 2nd product in the list
     test_product = Product.find(products[1].id)
     self.assertIsNot(test_product, None)
     self.assertEqual(test_product.id, products[1].id)
     self.assertEqual(test_product.name, products[1].name)
     self.assertEqual(test_product.available, products[1].available)
     self.assertEqual(test_product.sku, products[1].sku)
     self.assertEqual(test_product.price, products[1].price)
     self.assertEqual(test_product.stock, products[1].stock)
     self.assertEqual(test_product.size, products[1].size)
     self.assertEqual(test_product.color, products[1].color)
     self.assertEqual(test_product.category, products[1].category)
Пример #14
0
    def get(self):
        """ Returns all of the queried Products """
        app.logger.info("Request for product list")
        products = []
        args = product_args.parse_args()
        category = args.get('category')
        name = args.get('name')
        description = args.get('description')
        minimum = args.get('minimum')
        maximum = args.get('maximum')

        if minimum and maximum:
            if name and category and description:
                products = Product.find_by_name_category_description_price(
                    name, category, description, minimum, maximum)
            elif name and category:
                products = Product.find_by_name_category_price(
                    name, category, minimum, maximum)
            elif name and description:
                products = Product.find_by_name_description_price(
                    name, description, minimum, maximum)
            elif name:
                products = Product.find_by_name_price(name, minimum, maximum)
            elif category and description:
                products = Product.find_by_category_description_price(
                    category, description, minimum, maximum)
            elif category:
                products = Product.find_by_category_price(
                    category, minimum, maximum)
            elif description:
                products = Product.find_by_description_price(
                    description, minimum, maximum)
            else:
                products = Product.query_by_price(minimum, maximum)
        elif minimum is None and maximum is None:
            if name and category and description:
                products = Product.find_by_name_category_description(
                    name, category, description)
            elif name and category:
                products = Product.find_by_name_category(name, category)
            elif name and description:
                products = Product.find_by_name_description(name, description)
            elif name:
                products = Product.find_by_name(name)
            elif category and description:
                products = Product.find_by_category_description(
                    category, description)
            elif category:
                products = Product.find_by_category(category)
            elif description:
                products = Product.find_by_description(description)
            else:
                products = Product.all()
        else:
            app.logger.info("Minimum and Maximum cannot be empty.")
            return api.abort(status.HTTP_400_BAD_REQUEST,
                             "Minimum and Maximum cannot be empty.")

        results = [product.serialize() for product in products]
        app.logger.info("Returning %d products.", len(results))
        return results, status.HTTP_200_OK