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")
Beispiel #2
0
    def handle_buy_action(self, action, data):
        """Buys a cart.
        """
        putils = getToolByName(self.context, "plone_utils")
                
        # add order
        om = IOrderManagement(self.context)
        new_order = om.addOrder()

        # Set message to shop owner
        new_order.setMessage(self.context.request.get("form.message", ""))
        
        # process payment
        result = IPaymentProcessing(new_order).process()

        # Need error for payment methods for which the customer has to pay at 
        # any case The order process should not go on if the customer is not 
        # able to pay.
        if result.code == ERROR:
            om.deleteOrder(new_order.id)
            putils.addPortalMessage(result.message, type=u"error")
            ICheckoutManagement(self.context).redirectToNextURL("ERROR_PAYMENT")
            return ""
        else:
            cm = ICartManagement(self.context)

            # Decrease stock
            IStockManagement(self.context).removeCart(cm.getCart())
            
            # Delete cart
            cm.deleteCart()

            # Set order to pending (Mails will be sent)
            wftool = getToolByName(self.context, "portal_workflow")
            wftool.doActionFor(new_order, "submit")
            
            putils.addPortalMessage(MESSAGES["ORDER_RECEIVED"])
                        
        if result.code == PAYED:

            # Set order to payed (Mails will be sent)
            wftool = getToolByName(self.context, "portal_workflow")

            # We need a new security manager here, because this transaction 
            # should usually just be allowed by a Manager except here.
            old_sm = getSecurityManager()
            tmp_user = UnrestrictedUser(
                old_sm.getUser().getId(),
                '', ['Manager'], 
                ''
            )

            portal = getToolByName(self.context, 'portal_url').getPortalObject()
            tmp_user = tmp_user.__of__(portal.acl_users)
            newSecurityManager(None, tmp_user)

            wftool.doActionFor(new_order, "pay_not_sent")
            
            ## Reset security manager
            setSecurityManager(old_sm)
            
        # Redirect
        customer = \
            ICustomerManagement(self.context).getAuthenticatedCustomer()
        selected_payment_method = \
            IPaymentInformationManagement(customer).getSelectedPaymentMethod()
        
        if not IAsynchronPaymentMethod.providedBy(selected_payment_method):
            ICheckoutManagement(self.context).redirectToNextURL("BUYED_ORDER")
Beispiel #3
0
    def handle_buy_action(self, action, data):
        """Buys a cart.
        """
        putils = getToolByName(self.context, "plone_utils")

        # add order
        om = IOrderManagement(self.context)
        new_order = om.addOrder()

        # Set message to shop owner
        new_order.setMessage(self.context.request.get("form.message", ""))

        # process payment
        result = IPaymentProcessing(new_order).process()

        # Need error for payment methods for which the customer has to pay at
        # any case The order process should not go on if the customer is not
        # able to pay.
        if result.code == ERROR:
            om.deleteOrder(new_order.id)
            putils.addPortalMessage(result.message, type=u"error")
            ICheckoutManagement(
                self.context).redirectToNextURL("ERROR_PAYMENT")
            return ""
        else:
            cm = ICartManagement(self.context)

            # Decrease stock
            IStockManagement(self.context).removeCart(cm.getCart())

            # Delete cart
            cm.deleteCart()

            # Set order to pending (Mails will be sent)
            wftool = getToolByName(self.context, "portal_workflow")
            wftool.doActionFor(new_order, "submit")

            putils.addPortalMessage(MESSAGES["ORDER_RECEIVED"])

        if result.code == PAYED:

            # Set order to payed (Mails will be sent)
            wftool = getToolByName(self.context, "portal_workflow")

            # We need a new security manager here, because this transaction
            # should usually just be allowed by a Manager except here.
            old_sm = getSecurityManager()
            tmp_user = UnrestrictedUser(old_sm.getUser().getId(), '',
                                        ['Manager'], '')

            portal = getToolByName(self.context,
                                   'portal_url').getPortalObject()
            tmp_user = tmp_user.__of__(portal.acl_users)
            newSecurityManager(None, tmp_user)

            wftool.doActionFor(new_order, "pay_not_sent")

            ## Reset security manager
            setSecurityManager(old_sm)

        # Redirect
        customer = \
            ICustomerManagement(self.context).getAuthenticatedCustomer()
        selected_payment_method = \
            IPaymentInformationManagement(customer).getSelectedPaymentMethod()

        if not IAsynchronPaymentMethod.providedBy(selected_payment_method):
            ICheckoutManagement(self.context).redirectToNextURL("BUYED_ORDER")