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)
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)
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)
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)
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)
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)
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)
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, [])
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)
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")
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")
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")
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)
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