def test_macbook_pro_discount(self): test_cart = ShoppingCart() test_cart.service = ShoppingCartService(test_cart) test_cart.service.scan(self.macbook_pro) test_cart.service.scan(self.ipad) test_cart.service.scan(self.vga_adapter) assert test_cart.service.checkout() == 1949.98
def test_apple_tv_discount(self): test_cart = ShoppingCart() test_cart.service = ShoppingCartService(test_cart) test_cart.service.scan(self.apple_tv) test_cart.service.scan(self.apple_tv) test_cart.service.scan(self.apple_tv) test_cart.service.scan(self.vga_adapter) assert test_cart.service.checkout() == 249.00
def test_ipad_discount(self): test_cart = ShoppingCart() test_cart.service = ShoppingCartService(test_cart) test_cart.service.scan(self.apple_tv) test_cart.service.scan(self.ipad) test_cart.service.scan(self.ipad) test_cart.service.scan(self.apple_tv) test_cart.service.scan(self.ipad) test_cart.service.scan(self.ipad) test_cart.service.scan(self.ipad) assert test_cart.service.checkout() == 2718.95
def post(self): email = get_user_email() if not email: self.redirect(users.create_login_url('/account')) # query ndb to get the current user beerUser = BeerUser.get_user_profile(email) if not beerUser.cart: beerUser.cart = ShoppingCart() beerUser.cart.price = "0.00" beerUser.cart.contents = {} data = json.loads(self.request.body) beer_id = int(data["beerID"]) quantity = int(data["quant"]) price = float(Beer.query(Beer.beerid == beer_id).fetch(1)[0].price) * quantity # check negative quantity if quantity < 0: return beerUser.cart.contents[beer_id] = quantity beerUser.cart.price = str(float(beerUser.cart.price) + price) beerUser.put()
def test_discount_price_when_purchase_more_than_4_ipads(self): test_cart = ShoppingCart() test_cart_service = ShoppingCartService(test_cart) for i in range(5): test_cart_service.scan(self.ipad) assert test_cart_service.checkout() == self.discount_ipad_price * 5
def test_apple_tv_3_for_2_discount(self): test_cart = ShoppingCart() test_cart_service = ShoppingCartService(test_cart) test_cart_service.scan(self.apple_tv) test_cart_service.scan(self.apple_tv) test_cart_service.scan(self.apple_tv) assert test_cart_service.checkout() == self.apple_tv_price * 2
def test_free_vga_with_each_macbook_pro_purchase(self): test_cart = ShoppingCart() test_cart_service = ShoppingCartService(test_cart) test_cart_service.scan(self.macbook_pro) test_cart_service.scan(self.macbook_pro) test_cart_service.scan(self.vga_adapter) assert test_cart_service.checkout() == self.macbook_pro_price * 2
def post(self): email = get_user_email() if not email: self.redirect(users.create_login_url('/account')) # query ndb to get the current user beerUser = BeerUser.get_user_profile(email) cart = beerUser.cart.contents address = self.request.get("addressTxt") beers_in_cart = [] if not address: render_template(self, "ordercomplete.html", {"msg":"Invalid delivery address!"}) return if len(cart) != 0: order_string = "" totalcost=0 # Build the order object and save it to the ndb new_order = BeerOrder() for beer in cart: ndb_beer = Beer.query(Beer.beerid == int(beer)).fetch(1)[0] totalcost += int(cart[beer]) * float(ndb_beer.price) quantity = cart[str(ndb_beer.beerid)] if quantity > 0: order_string += "{!s}x {!s}\n".format(quantity,ndb_beer.product) if totalcost > beerUser.balance: render_template(self, "ordercomplete.html", {"msg":"Insufficient funds."}) return new_order.items = order_string new_order.priceSum = totalcost new_order.address = address new_order.status = "Verifying" new_order.orderedBy = email new_order.put() # save the address for the user beerUser.address = address beerUser.balance = beerUser.balance - new_order.priceSum #clear their shopping cart beerUser.cart = ShoppingCart() beerUser.cart.price = "0.00" beerUser.cart.contents = {} beerUser.put() mail.send_mail('*****@*****.**', email, 'Order Verifying', 'You have successfully placed a beer order! Your order will be verified shortly and completed! Thanks!') render_template(self, "ordercomplete.html", {"msg":"Your order has been placed."}) else: render_template(self, "ordercomplete.html",{"msg":"Shopping cart is empty."})
def get(self): email = get_user_email() user_is_admin = is_user_admin() totalcost = 0.0 if email: beerUser = BeerUser.get_user_profile(email) if not beerUser.cart: beerUser.cart = ShoppingCart() beerUser.cart.price = "0.00" beerUser.cart.contents = {} beerUser.put() cart = beerUser.cart.contents beers_in_cart = [] if len(cart) != 0: for beer in cart: ndb_beer = Beer.query(Beer.beerid == int(beer)).fetch(1)[0] totalcost += int(cart[beer]) * float(ndb_beer.price) beers_in_cart.append({ "beerid":beer, "brewery":ndb_beer.brewery, "product":ndb_beer.product, "price":ndb_beer.price, "quantity":cart[beer] }) #beers_in_cart.append(Beer.query(Beer.beerid == int(beer)).fetch(1)[0]) #quantities.append(cart[beer]) template_params={ 'balance': "${:.2f}".format(beerUser.balance), 'user_email': email, 'login_url': users.create_login_url('/home'), 'logout_url': users.create_logout_url('/home'), 'user_is_admin': user_is_admin, "savedAddress":beerUser.address, "beers":beers_in_cart, "total":'${:.2f}'.format(totalcost) } render_template(self, 'order.html', template_params) else: self.redirect(users.create_login_url('/order'))