Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
  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()
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 8
0
  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."})
Ejemplo n.º 9
0
  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'))