예제 #1
0
    def testAddItemsAndGetItems(self):
        """
        """
        self.logout()

        cm = ICartManagement(self.shop)
        cart = cm.createCart()
        
        im = IItemManagement(cart)
        
        im.addItem(self.product_1, properties=())
        self.assertEqual(len(im.getItems()), 1)

        im.addItem(self.product_1, properties=())
        self.assertEqual(len(im.getItems()), 1)

        im.addItem(self.product_1, properties=(), quantity=2)
        self.assertEqual(len(im.getItems()), 1)

        im.addItem(self.product_2, properties=(), quantity=3)
        self.assertEqual(len(im.getItems()), 2)

        i1, i2 = im.getItems()        

        i1.getId() == "0"
        i1.getProduct() == self.product_1
        i1.getAmount() == 4
        
        i1.getId() == "1"
        i1.getProduct() == self.product_2
        i1.getAmount() == 2
예제 #2
0
    def afterSetUp(self):
        """
        """
        super(TestCartItemProperties, self).afterSetUp()
        self.login("newmember")
        cm = ICartManagement(self.shop)
        cart = cm.createCart()

        im = IItemManagement(cart)

        properties = (
            {
                "id": "color",
                "selected_option": "Red"
            },  # -10.0
            {
                "id": "material",
                "selected_option": "Wood"
            },  # 0.0
            {
                "id": "quality",
                "selected_option": "High"
            },  # 1500.0
        )

        im.addItem(self.product_1, properties=properties, quantity=3)
        self.item1 = im.getItems()[0]
예제 #3
0
    def testDeleteItemByOrd(self):
        """
        """
        self.logout()

        cm = ICartManagement(self.shop)
        cart = cm.createCart()
        
        im = IItemManagement(cart)
        
        im.addItem(self.product_1, properties=())
        self.assertEqual(len(im.getItems()), 1)

        im.addItem(self.product_2, properties=(), quantity=3)
        self.assertEqual(len(im.getItems()), 2)

        # Try to delete non existing ord
        result = im.deleteItemByOrd(3)
        self.assertEqual(result, False)

        # Still 2 items in there
        self.assertEqual(len(im.getItems()), 2)
        
        # delete first item
        result = im.deleteItemByOrd(0)
        self.assertEqual(result, True)        
        self.assertEqual(len(im.getItems()), 1)

        # Once again, but now it should be another
        result = im.deleteItemByOrd(0)
        self.assertEqual(result, True)        
        self.assertEqual(len(im.getItems()), 0)
예제 #4
0
    def testDeleteItem(self):
        """
        """
        self.logout()

        cm = ICartManagement(self.shop)
        cart = cm.createCart()
        
        im = IItemManagement(cart)
        
        im.addItem(self.product_1, properties=())
        self.assertEqual(len(im.getItems()), 1)

        im.addItem(self.product_2, properties=(), quantity=3)
        self.assertEqual(len(im.getItems()), 2)
        
        # Try to delete non existing id
        result = im.deleteItem("3")
        self.assertEqual(result, False)

        # Still 2 items in there
        self.assertEqual(len(im.getItems()), 2)

        # delete first item
        result = im.deleteItem("0")
        self.assertEqual(result, True)        
        self.assertEqual(len(im.getItems()), 1)

        # delete second item
        result = im.deleteItem("1")
        self.assertEqual(result, True)        
        self.assertEqual(len(im.getItems()), 0)
예제 #5
0
 def testHasItemsAsAdmin(self):
     """
     """
     cm = ICartManagement(self.shop)
     cart = cm.createCart()
     
     # This caused an error as shasattr was not yet used within
     # CartManagement.getCart(). It returned an ATFolder.
     im = IItemManagement(cart)
예제 #6
0
    def testAddItemsFromCart(self):        
        """
        """
        cm = ICartManagement(self.shop)
        cart1 = cm.createCart()
        
        im1 = IItemManagement(cart1)
        
        im1.addItem(self.product_1, properties=())
        im1.addItem(self.product_2, properties=(), quantity=3)
        
        self.login("newmember")
        cart2 = cm.createCart()

        im2 = IItemManagement(cart2)
        im2.addItemsFromCart(cart1)
        
        self.assertEqual(len(im2.getItems()), 2)
예제 #7
0
 def afterSetUp(self):
     """
     """
     super(TestCartTaxes, self).afterSetUp()
     cm = ICartManagement(self.shop)
     self.cart = cm.createCart()
     
     im = IItemManagement(self.cart)
     im.addItem(self.product_1, properties=(), quantity=2)
     im.addItem(self.product_2, properties=(), quantity=3)
예제 #8
0
    def testAddItemFromCartItem(self):
        """
        """
        cm = ICartManagement(self.shop)
        cart = cm.createCart()

        properties = (
            {
                "id": "color",
                "selected_option": "Red"
            },  # -10.0
            {
                "id": "material",
                "selected_option": "Wood"
            },  # 0.0
            {
                "id": "quality",
                "selected_option": "High"
            },  # 1500.0
        )

        cim = IItemManagement(cart)
        cim.addItem(self.product_1, properties=properties, quantity=3)

        cart_item = IItemManagement(cart).getItems()[0]

        oim = IItemManagement(self.order)
        oim._addItemFromCartItem("0", cart_item)

        order_item = oim.getItems()[0]

        self.assertEqual(order_item.getProductQuantity(), 3)
        self.assertEqual("%.2f" % order_item.getProductPriceGross(), "22.00")
        self.assertEqual("%.2f" % order_item.getProductPriceNet(), "18.49")
        self.assertEqual("%.2f" % order_item.getProductTax(), "3.51")
        self.assertEqual("%.2f" % order_item.getPriceGross(), "4536.00")
        self.assertEqual("%.2f" % order_item.getPriceNet(), "3811.76")
        self.assertEqual(order_item.getTaxRate(), 19.0)
        self.assertEqual("%.2f" % order_item.getTax(), "724.24")
        self.assertEqual(order_item.getProduct(), self.product_1)

        properties = order_item.getProperties()

        self.assertEqual(properties[0]["title"], "Color")
        self.assertEqual(properties[0]["selected_option"], "Red")
        self.assertEqual(properties[0]["price"], "-10.0")

        self.assertEqual(properties[1]["title"], "Material")
        self.assertEqual(properties[1]["selected_option"], "Wood")
        self.assertEqual(properties[1]["price"], "0.0")

        self.assertEqual(properties[2]["title"], "Quality")
        self.assertEqual(properties[2]["selected_option"], "High")
        self.assertEqual(properties[2]["price"], "1500.0")
예제 #9
0
    def testHasItems(self):
        """
        """
        self.logout()

        cm = ICartManagement(self.shop)
        cart = cm.createCart()
        
        im = IItemManagement(cart)

        self.assertEqual(im.hasItems(), False)
        im.addItem(self.product_1, properties=[])                
        self.assertEqual(im.hasItems(), True)
예제 #10
0
 def afterSetUp(self):
     """
     """
     super(TestCartItems, self).afterSetUp()
     
     self.login("newmember")
     cm = ICartManagement(self.shop)
     cart = cm.createCart()
     
     im = IItemManagement(cart)
     im.addItem(self.product_1, properties=(), quantity=2)
     im.addItem(self.product_2, properties=(), quantity=3)
     
     self.item1, self.item2 = im.getItems()
예제 #11
0
    def afterSetUp(self):
        """
        """
        super(TestCartItems, self).afterSetUp()

        self.login("newmember")
        cm = ICartManagement(self.shop)
        cart = cm.createCart()

        im = IItemManagement(cart)
        im.addItem(self.product_1, properties=(), quantity=2)
        im.addItem(self.product_2, properties=(), quantity=3)

        self.item1, self.item2 = im.getItems()
예제 #12
0
    def testAddItemFromCartItem(self):
        """
        """
        cm = ICartManagement(self.shop)
        cart = cm.createCart()

        properties = (
            {"id" : "color"   , "selected_option" : "Red" },    # -10.0
            {"id" : "material", "selected_option" : "Wood"},    # 0.0
            {"id" : "quality" , "selected_option" : "High"},    # 1500.0
        )

        cim = IItemManagement(cart)
        cim.addItem(self.product_1, properties=properties, quantity=3)
                
        cart_item = IItemManagement(cart).getItems()[0]
        
        oim = IItemManagement(self.order)        
        oim._addItemFromCartItem("0", cart_item)
        
        order_item = oim.getItems()[0]
        
        self.assertEqual(order_item.getProductQuantity(), 3)
        self.assertEqual("%.2f" % order_item.getProductPriceGross(), "22.00")
        self.assertEqual("%.2f" % order_item.getProductPriceNet(), "18.49")
        self.assertEqual("%.2f" % order_item.getProductTax(), "3.51")
        self.assertEqual("%.2f" % order_item.getPriceGross(), "4536.00")
        self.assertEqual("%.2f" % order_item.getPriceNet(), "3811.76")
        self.assertEqual(order_item.getTaxRate(), 19.0)
        self.assertEqual("%.2f" % order_item.getTax(), "724.24")
        self.assertEqual(order_item.getProduct(), self.product_1)
        
        properties = order_item.getProperties()
            
        self.assertEqual(properties[0]["title"], "Color")
        self.assertEqual(properties[0]["selected_option"], "Red")
        self.assertEqual(properties[0]["price"], "-10.0")

        self.assertEqual(properties[1]["title"], "Material")
        self.assertEqual(properties[1]["selected_option"], "Wood")
        self.assertEqual(properties[1]["price"], "0.0")

        self.assertEqual(properties[2]["title"], "Quality")
        self.assertEqual(properties[2]["selected_option"], "High")
        self.assertEqual(properties[2]["price"], "1500.0")
예제 #13
0
    def afterSetUp(self):
        """
        """
        super(TestCartItemProperties, self).afterSetUp()
        self.login("newmember")
        cm = ICartManagement(self.shop)
        cart = cm.createCart()
        
        im = IItemManagement(cart)

        properties = (
            {"id" : "color"   , "selected_option" : "Red" },    # -10.0
            {"id" : "material", "selected_option" : "Wood"},    # 0.0
            {"id" : "quality" , "selected_option" : "High"},    # 1500.0
        )

        im.addItem(self.product_1, properties=properties, quantity=3)
        self.item1 = im.getItems()[0]
예제 #14
0
class TestCartManagement(EasyShopTestCase):
    """
    """
    def afterSetUp(self):
        """
        """
        super(TestCartManagement, self).afterSetUp()
        self.cm = ICartManagement(self.shop)

    def testCreateCart_1(self):
        """Create cart for anonymous.
        """
        self.logout()
        cart = self.cm.createCart()        
        
        self.assertEqual(cart.getId(), "123")
                
    def testCreateCart_2(self):
        """Create cart for member.
        """
        self.login("newmember")        
        cart = self.cm.createCart()        
        
        self.assertEqual(cart.getId(), "newmember")
                
    def testDeleteCart_1(self):
        """Without given id.
        """
        self.login("newmember")
        self.cm.createCart()        

        self.failUnless(self.shop.carts.get("newmember"))                
        self.cm.deleteCart()
        self.failIf(self.shop.carts.get("newmember"))
        
    def testDeleteCart_2(self):
        """With given id.
        """
        self.login("newmember")
        self.cm.createCart()

        self.failUnless(self.shop.carts.get("newmember"))                
        self.cm.deleteCart("newmember")
        self.failIf(self.shop.carts.get("newmember"))
        
    def testGetCart_1(self):
        """Cart for anonmyous. There is no cart yet.
        """
        self.logout()
        cart = self.cm.getCart()
        self.assertEqual(cart, None)
            
    def testGetCart_2(self):
        """Cart for anonymous. There is a cart
        """
        self.logout()
        self.cm.createCart()
        
        cart = self.cm.getCart()
        self.assertEqual(cart.getId(), "123")

    def testGetCart_3(self):
        """Cart for member. There is no anonymous cart. Carts are only created
        when items are added to it.
        """
        self.login("newmember")
        
        cart = self.cm.getCart()
        self.assertEqual(cart, None)

    def testGetCart_4(self):
        """Cart for member. There is an anonymous cart.
        """
        self.logout()
        
        # create cart for anonymous
        self.cm.createCart()
        
        cart = self.cm.getCart()
        self.assertEqual(cart.getId(), "123")

        self.login("newmember")

        # After login the anonymous cart should be moved to member cart
        cart = self.cm.getCart()
        self.assertEqual(cart.getId(), "newmember")
        
        # The cart for anonymous has to be deleted
        self.failIf(self.shop.carts.get("123"))
        
    def testGetCarts(self):
        """
        """
        # create cart for newmember
        self.login("newmember")            
        self.cm.createCart()

        self.setRoles(("Manager",))
        
        ids = [c.getId for c in self.cm.getCarts()]
        self.assertEqual(ids, ["newmember"])
        
    def testGetCartById(self):
        """
        """
        # create cart for newmember
        self.login("newmember")    
        self.cm.createCart()

        cart = self.cm.getCartById("newmember")
        self.assertEqual(cart.getId(), "newmember")
        
    def testGetCartByUID(self):
        """
        """
        # create cart for newmember
        self.login("newmember")    
        cart = self.cm.createCart()

        cart = self.cm.getCartByUID(cart.UID())
        
        self.assertEqual(cart.getId(), "newmember")

    def testHasCart(self):
        """
        """ 
        self.assertEqual(self.cm.hasCart(), False)

        self.login("newmember")    
        cart = self.cm.createCart()
        self.assertEqual(self.cm.hasCart(), True)
                    
    def test_getCartId(self):
        """
        """
        self.logout()
        cart_id = self.cm._getCartId()        
        self.assertEqual(cart_id, "123")
        
        self.login("newmember")
        cart_id = self.cm._getCartId()        
        self.assertEqual(cart_id, "newmember")
예제 #15
0
    def addToCart(self, redirect=True, add_accessories=True):
        """
        """
        shop = IShopManagement(self.context).getShop()
        cm = ICartManagement(shop)

        cart = cm.getCart()
        if cart is None:
            cart = cm.createCart()

        pvm = IProductVariantsManagement(self.context)
        if pvm.hasVariants():

            # Get the actual "product"
            product = pvm.getSelectedVariant() or pvm.getDefaultVariant()

            # Using here the selected product ensures that we save the right
            # properties. This is important when the selected variant doesn't
            # exist.
            properties = []
            for property in product.getForProperties():
                property_id, selected_option = property.split(":")
                properties.append({
                    "id": property_id,
                    "selected_option": selected_option,
                })
        else:

            # The product is the context
            product = self.context

            # Unlike above we take the properties out of the request, because
            # there is no object wich stores the different properties.
            properties = []
            for property in IPropertyManagement(product).getProperties():
                selected_option_id = self.request.get(
                    "property_%s_%s" % (product.UID(), property.getId()))

                # If nothing is selected we take the first option of the
                # property
                if (selected_option_id is None) or (selected_option_id
                                                    == "select"):
                    property = IPropertyManagement(product).getProperty(
                        property.getId())
                    property_options = property.getOptions()

                    if property_options:
                        selected_option = property.getOptions()[0]
                        selected_option_id = selected_option["id"]
                    else:
                        selected_option_id = ""

                properties.append({
                    "id": property.getId(),
                    "selected_option": selected_option_id
                })

        # get quantity
        quantity = int(
            self.context.request.get("%s_quantity" % self.context.UID(), 1))

        # returns true if the product was already within the cart
        result, item_id = IItemManagement(cart).addItem(
            product, tuple(properties), quantity)

        # Add product to session (for display on add to cart view)
        if self.request.SESSION.get("added-to-cart") is None:
            self.request.SESSION["added-to-cart"] = []
        self.request.SESSION["added-to-cart"].append(item_id)

        # Add the accessories
        if add_accessories == True:
            catalog = getToolByName(self.context, "portal_catalog")
            accessories = tuplize(self.request.get("accessories", []))
            for uid in accessories:
                try:
                    brain = catalog.searchResults(UID=uid)[0]
                except IndexError:
                    continue

                # We reuse the same view with an other context. The context are
                # the accessories
                product = brain.getObject()
                view = getMultiAdapter((product, self.request),
                                       name="addToCart")
                view.addToCart(redirect=False, add_accessories=False)

        if redirect == True:
            # Set portal message
            # putils = getToolByName(self.context, "plone_utils")
            # if result == True:
            #     putils.addPortalMessage(MESSAGES["CART_INCREASED_AMOUNT"])
            # else:
            #     putils.addPortalMessage(MESSAGES["CART_ADDED_PRODUCT"])

            url = "%s/added-to-cart" % shop.absolute_url()
            self.context.request.response.redirect(url)