def testWeight(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addWeightCriteria("c")
        v = IValidity(self.shop.c)

        self.assertEqual(v.isValid(), False)
        
        view = getMultiAdapter((
            self.shop.products.product_1, 
            self.shop.products.product_1.REQUEST), name="addToCart")

        view.addToCart()

        view = getMultiAdapter((
            self.shop.products.product_2, 
            self.shop.products.product_2.REQUEST), name="addToCart")

        view.addToCart()
        
        self.assertEqual(v.isValid(), True)

        self.shop.c.setWeight(29.0)
        self.assertEqual(v.isValid(), True)

        self.shop.c.setWeight(30.0)
        self.assertEqual(v.isValid(), False)
 def testIsValid_2(self):
     """With one invalid criterion.
     """
     self.default_tax.invokeFactory("DateCriteria", id="date_criterion")
     start = end = DateTime() + 1
     self.default_tax.date_criterion.setStart(start)
     self.default_tax.date_criterion.setEnd(end)
     
     v = IValidity(self.default_tax)
     self.assertEqual(v.isValid(self.product_1), False)
    def testIsValid_3(self):
        """With one valid criterion.
        """
        # Note product_1 costs 22.00
        # price criterion is true if cart price > criterion price
        self.shipping_price.invokeFactory("PriceCriteria", id="price_criterion")
        self.shipping_price.price_criterion.setPrice(21.0)

        view = getMultiAdapter((self.shop.products.product_1, self.shop.products.product_1.REQUEST), name="addToCart")
        view.addToCart()
        
        v = IValidity(self.shop.shippingprices.shipping_price)
        self.assertEqual(v.isValid(), True)
 def testIsValid_4(self):
     """With one invalid and one valid criterion.
     """
     # invalid
     self.default_tax.invokeFactory("DateCriteria", id="date_criterion")    
     start = end = DateTime() + 1
     self.default_tax.date_criterion.setStart(start)
     self.default_tax.date_criterion.setEnd(end)
     
     # valid (product_1 is in group_1; see utils.createTestEnvironment)
     self.default_tax.invokeFactory("GroupCriteria", id="group_criterion")
     self.default_tax.group_criterion.setGroups(["group_1"])        
     v = IValidity(self.default_tax)
     self.assertEqual(v.isValid(self.product_1), False)
Example #5
0
    def testPrice(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addPriceCriteria("c")
        v = IValidity(self.shop.c)

        self.login("newmember")

        self.assertEqual(v.isValid(), False)

        view = getMultiAdapter((self.shop.products.product_1,
                                self.shop.products.product_1.REQUEST),
                               name="addToCart")

        view.addToCart()
        self.assertEqual(v.isValid(), True)

        self.shop.c.setPrice(21.00)
        self.assertEqual(v.isValid(), True)

        self.shop.c.setPrice(22.00)
        self.assertEqual(v.isValid(), False)

        view = getMultiAdapter((self.shop.products.product_2,
                                self.shop.products.product_2.REQUEST),
                               name="addToCart")

        view.addToCart()

        self.shop.c.setPrice(40.00)
        self.assertEqual(v.isValid(), True)

        self.shop.c.setPrice(41.00)
        self.assertEqual(v.isValid(), False)
Example #6
0
    def testProduct(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addProductCriteria("c")
        v = IValidity(self.shop.c)

        self.assertEqual(v.isValid(self.product_1), False)

        self.shop.c.setProducts(("product_1", ))
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), False)

        self.shop.c.setProducts(("product_1", "product_2"))
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)
    def testProduct(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addProductCriteria("c")
        v = IValidity(self.shop.c)

        self.assertEqual(v.isValid(self.product_1), False)
        
        self.shop.c.setProducts(("product_1",))
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), False)

        self.shop.c.setProducts(("product_1", "product_2"))
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)
Example #8
0
    def getSelectedPaymentMethod(self, check_validity=False):
        """
        """
        # First try to get the payment method on customer level. If it isn't
        # found, get it from shop level. (If it isn't found there, which
        # should never happen returns the default method; see shop/payment
        # for more information.)

        try:
            selected_method = getattr(self.context,
                                      self.context.getSelectedPaymentMethod())

        except AttributeError:
            shop = self.context.getShop()
            pm = IPaymentManagement(shop)
            selected_method = pm.getSelectedPaymentMethod()

        # if selected payment method is not valid return default
        # Todo: Make default manageable
        if check_validity == False:
            return selected_method
        else:
            if IValidity(selected_method).isValid() == False:
                shop = self.context.getShop()
                pm = IPaymentManagement(shop)
                return pm.getSelectedPaymentMethod(check_validity)
            else:
                return selected_method
Example #9
0
    def testIsValid_3(self):
        """With one valid criterion.
        """
        # Note product_1 costs 22.00
        # price criterion is true if cart price > criterion price
        self.shipping_price.invokeFactory("PriceCriteria",
                                          id="price_criterion")
        self.shipping_price.price_criterion.setPrice(21.0)

        view = getMultiAdapter((self.shop.products.product_1,
                                self.shop.products.product_1.REQUEST),
                               name="addToCart")
        view.addToCart()

        v = IValidity(self.shop.shippingprices.shipping_price)
        self.assertEqual(v.isValid(), True)
    def testDate(self):
        """
        """
        self.folder.manage_addProduct["EasyShop"].addDateCriteria("c")
        v = IValidity(self.folder.c)
        
        self.folder.c.setStart(DateTime()-2)
        self.folder.c.setEnd(DateTime()-1)            
        self.assertEqual(v.isValid(), False)

        self.folder.c.setStart(DateTime()-2)
        self.folder.c.setEnd(DateTime()+1)            
        self.assertEqual(v.isValid(), True)

        self.folder.c.setStart(DateTime()+1)
        self.folder.c.setEnd(DateTime()+2)            
        self.assertEqual(v.isValid(), False)
Example #11
0
    def testDate(self):
        """
        """
        self.folder.manage_addProduct["EasyShop"].addDateCriteria("c")
        v = IValidity(self.folder.c)

        self.folder.c.setStart(DateTime() - 2)
        self.folder.c.setEnd(DateTime() - 1)
        self.assertEqual(v.isValid(), False)

        self.folder.c.setStart(DateTime() - 2)
        self.folder.c.setEnd(DateTime() + 1)
        self.assertEqual(v.isValid(), True)

        self.folder.c.setStart(DateTime() + 1)
        self.folder.c.setEnd(DateTime() + 2)
        self.assertEqual(v.isValid(), False)
    def testCustomer(self):
        """
        """
        # customer criteria needs context
        self.folder.manage_addProduct["EasyShop"].addCustomerCriteria("c")
        v = IValidity(self.folder.c)        

        self.assertEqual(v.isValid(), False)

        self.folder.c.setCustomers(("newmember",))
        self.assertEqual(v.isValid(), False)            
        
        self.login("newmember")
        self.assertEqual(v.isValid(), True)        
                
        self.folder.c.setCustomers(("newmember", "anothermember"))        
        self.assertEqual(v.isValid(), True)    
    def testPrice(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addPriceCriteria("c")
        v = IValidity(self.shop.c)
        
        self.login("newmember")        

        self.assertEqual(v.isValid(), False)
        
        view = getMultiAdapter((
            self.shop.products.product_1, 
            self.shop.products.product_1.REQUEST), name="addToCart")
            
        view.addToCart()
        self.assertEqual(v.isValid(), True)

        self.shop.c.setPrice(21.00)
        self.assertEqual(v.isValid(), True)
        
        self.shop.c.setPrice(22.00)
        self.assertEqual(v.isValid(), False)

        view = getMultiAdapter((
            self.shop.products.product_2, 
            self.shop.products.product_2.REQUEST), name="addToCart")
            
        view.addToCart()

        self.shop.c.setPrice(40.00)
        self.assertEqual(v.isValid(), True)

        self.shop.c.setPrice(41.00)
        self.assertEqual(v.isValid(), False)
Example #14
0
    def testPaymentMethod(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addPaymentMethodCriteria("c")
        v = IValidity(self.shop.c)

        self.login("newmember")

        cm = ICustomerManagement(self.shop)
        customer = cm.getAuthenticatedCustomer()

        customer.setSelectedPaymentMethod("cash-on-delivery")
        self.assertEqual(v.isValid(), False)

        customer.setSelectedPaymentMethod("prepayment")
        self.assertEqual(v.isValid(), False)

        self.shop.c.setPaymentMethods(["directdebit"])
        self.assertEqual(v.isValid(), False)

        self.shop.c.setPaymentMethods(["prepayment"])
        self.assertEqual(v.isValid(), True)

        self.shop.c.setPaymentMethods(["prepayment", "directdebit"])
        self.assertEqual(v.isValid(), True)
    def testCountry(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addCountryCriteria("c")
        self.shop.c.setCountries(("USA",))
        v = IValidity(self.shop.c)
        
        self.login("newmember")

        cm = ICustomerManagement(self.shop)
        customer = cm.getAuthenticatedCustomer()        
        customer.invokeFactory("Address", "address_1")

        customer.address_1.setCountry("USA")
        self.assertEqual(v.isValid(), True)

        customer.address_1.setCountry("Germany")
        self.assertEqual(v.isValid(), False)
Example #16
0
    def testCountry(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addCountryCriteria("c")
        self.shop.c.setCountries(("USA", ))
        v = IValidity(self.shop.c)

        self.login("newmember")

        cm = ICustomerManagement(self.shop)
        customer = cm.getAuthenticatedCustomer()
        customer.invokeFactory("Address", "address_1")

        customer.address_1.setCountry("USA")
        self.assertEqual(v.isValid(), True)

        customer.address_1.setCountry("Germany")
        self.assertEqual(v.isValid(), False)
 def testIsValid_4(self):
     """With one invalid and one valid criterion.
     """
     # Note product_1 costs 22.00
     # price criterion is true if cart price > criterion price
     
     # valid
     self.shipping_price.invokeFactory("PriceCriteria", id="price_criterion")
     self.shipping_price.price_criterion.setPrice(23.0)
     view = getMultiAdapter((self.shop.products.product_1, self.shop.products.product_1.REQUEST), name="addToCart")
     view.addToCart()
     
     # invalid
     self.shipping_price.invokeFactory("DateCriteria", id="date_criterion")
     start = end = DateTime() + 1
     self.shipping_price.date_criterion.setStart(start)
     self.shipping_price.date_criterion.setStart(end)
             
     v = IValidity(self.shop.shippingprices.shipping_price)
     self.assertEqual(v.isValid(), False)
    def testGroup(self):
        """
        """
        self.folder.manage_addProduct["EasyShop"].addGroupCriteria("c")
        v = IValidity(self.folder.c)

        self.assertEqual(v.isValid(self.product_1), False)
        self.assertEqual(v.isValid(self.product_2), False)
                
        self.folder.c.setGroups(("group_1"),)
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)
        
        self.folder.c.setGroups(("group_2"),)        
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), False)
        
        self.folder.c.setGroups(("group_1", "group_2"),)        
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)
    def testPaymentMethod(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addPaymentMethodCriteria("c")
        v = IValidity(self.shop.c)
        
        self.login("newmember")

        cm = ICustomerManagement(self.shop)
        customer = cm.getAuthenticatedCustomer()

        customer.setSelectedPaymentMethod("cash-on-delivery")
        self.assertEqual(v.isValid(), False)

        customer.setSelectedPaymentMethod("prepayment")
        self.assertEqual(v.isValid(), False)

        self.shop.c.setPaymentMethods(["directdebit"])
        self.assertEqual(v.isValid(), False)        

        self.shop.c.setPaymentMethods(["prepayment"])
        self.assertEqual(v.isValid(), True)

        self.shop.c.setPaymentMethods(["prepayment", "directdebit"])
        self.assertEqual(v.isValid(), True)
Example #20
0
    def testWeight(self):
        """
        """
        self.shop.manage_addProduct["EasyShop"].addWeightCriteria("c")
        v = IValidity(self.shop.c)

        self.assertEqual(v.isValid(), False)

        view = getMultiAdapter((self.shop.products.product_1,
                                self.shop.products.product_1.REQUEST),
                               name="addToCart")

        view.addToCart()

        view = getMultiAdapter((self.shop.products.product_2,
                                self.shop.products.product_2.REQUEST),
                               name="addToCart")

        view.addToCart()

        self.assertEqual(v.isValid(), True)

        self.shop.c.setWeight(29.0)
        self.assertEqual(v.isValid(), True)

        self.shop.c.setWeight(30.0)
        self.assertEqual(v.isValid(), False)
Example #21
0
    def testIsValid_4(self):
        """With one invalid and one valid criterion.
        """
        # Note product_1 costs 22.00
        # price criterion is true if cart price > criterion price

        # valid
        self.shipping_price.invokeFactory("PriceCriteria",
                                          id="price_criterion")
        self.shipping_price.price_criterion.setPrice(23.0)
        view = getMultiAdapter((self.shop.products.product_1,
                                self.shop.products.product_1.REQUEST),
                               name="addToCart")
        view.addToCart()

        # invalid
        self.shipping_price.invokeFactory("DateCriteria", id="date_criterion")
        start = end = DateTime() + 1
        self.shipping_price.date_criterion.setStart(start)
        self.shipping_price.date_criterion.setStart(end)

        v = IValidity(self.shop.shippingprices.shipping_price)
        self.assertEqual(v.isValid(), False)
Example #22
0
    def testCategory(self):
        """
        """
        # Criteria has one catogory, products have this too
        self.folder.manage_addProduct["EasyShop"].addCategoryCriteria("c")
        self.folder.c.setCategories(("category_11", ))
        v = IValidity(self.folder.c)

        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)

        # Criteria has one catogory, products haven't this
        self.folder.c.setCategories(("category_2", ))
        v = IValidity(self.folder.c)
        self.assertEqual(v.isValid(self.product_1), False)
        self.assertEqual(v.isValid(self.product_2), False)

        # Criteria has two catogories; products have just one of these
        self.folder.c.setCategories(("category_11", "category_1"))
        v = IValidity(self.folder.c)
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)
Example #23
0
    def isValid(self, product=None):
        """Returns true if all contained criteria are true.
        """
        # To be true all criteria must be true (AND)
        for criteria in self.context.objectValues():
            # First try "isValid" on the criterion. This maybe makes it easier
            # to write own 3rd party criteria without the need to write an
            # adapter.
            try:
                if criteria.isValid(product) == False:
                    return False
            except AttributeError:
                # Then take the adapter. This makes it OTOH easier to overwrite the
                # default behaviour of the default criterias
                if IValidity(criteria).isValid(product) == False:
                    return False

        return True
Example #24
0
    def isValid(self, product=None):
        """Returns true if the corresponding payment validator is not False and
        all contained criteria are True.
        """
        # First we check the general validity. For that we try to get the
        # corresponding payment validator.
        type = IType(self.context).getType()
        pm = IPaymentManagement(IShopManagement(self.context).getShop())
        method = pm.getPaymentMethod(type)

        # Only if we find one, we check validity. If we didn't find one, we
        # consider the general validity as fulfilled.
        if method and IValidity(method).isValid() == False:
            return False

        # If the non-validity isn't proved we check the criteria of context
        # (a customer payment method)
        return super(CustomerPaymentValidityManagement, self).isValid(product)
Example #25
0
    def getPaymentMethods(self, interface=None, check_validity=False):
        """Returns the payment methods of a customer. 
        """
        # Todo: This can be optimized with Plone 3.0 because there will be an
        # interface index (IIRC).

        if interface is None:
            interface = IPaymentMethodContent

        result = []
        for object in self.context.objectValues():

            if interface.providedBy(object) == False:
                continue

            if check_validity == True and\
               IValidity(object).isValid(object) == False:
                continue

            result.append(object)

        return result
Example #26
0
    def testCustomer(self):
        """
        """
        # customer criteria needs context
        self.folder.manage_addProduct["EasyShop"].addCustomerCriteria("c")
        v = IValidity(self.folder.c)

        self.assertEqual(v.isValid(), False)

        self.folder.c.setCustomers(("newmember", ))
        self.assertEqual(v.isValid(), False)

        self.login("newmember")
        self.assertEqual(v.isValid(), True)

        self.folder.c.setCustomers(("newmember", "anothermember"))
        self.assertEqual(v.isValid(), True)
    def testAdapters(self):
        """
        """
        adapter = IValidity(self.folder.cpm)
        self.assertEqual(str(adapter.__class__), "<class 'Products.EasyShop.adapters.generic.validity.CustomerPaymentValidityManagement'>")

        adapter = IValidity(self.folder.spm)
        self.assertEqual(str(adapter.__class__), "<class 'Products.EasyShop.adapters.generic.validity.ValidityManagement'>")

        adapter = IValidity(self.folder.pmv)
        self.assertEqual(str(adapter.__class__), "<class 'Products.EasyShop.adapters.generic.validity.ValidityManagement'>")

        adapter = IValidity(self.folder.pp)
        self.assertEqual(str(adapter.__class__), "<class 'Products.EasyShop.adapters.generic.validity.ValidityManagement'>")

        adapter = IValidity(self.folder.ct)
        self.assertEqual(str(adapter.__class__), "<class 'Products.EasyShop.adapters.generic.validity.ValidityManagement'>")

        adapter = IValidity(self.folder.dt)
        self.assertEqual(str(adapter.__class__), "<class 'Products.EasyShop.adapters.generic.validity.ValidityManagement'>")
        
        adapter = IValidity(self.folder.sp)
        self.assertEqual(str(adapter.__class__), "<class 'Products.EasyShop.adapters.generic.validity.ValidityManagement'>")
Example #28
0
    def testGroup(self):
        """
        """
        self.folder.manage_addProduct["EasyShop"].addGroupCriteria("c")
        v = IValidity(self.folder.c)

        self.assertEqual(v.isValid(self.product_1), False)
        self.assertEqual(v.isValid(self.product_2), False)

        self.folder.c.setGroups(("group_1"), )
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)

        self.folder.c.setGroups(("group_2"), )
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), False)

        self.folder.c.setGroups(("group_1", "group_2"), )
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)
    def testCategory(self):
        """
        """
        # Criteria has one catogory, products have this too
        self.folder.manage_addProduct["EasyShop"].addCategoryCriteria("c")
        self.folder.c.setCategories(("category_11",))
        v = IValidity(self.folder.c)
        
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)

        # Criteria has one catogory, products haven't this         
        self.folder.c.setCategories(("category_2",))
        v = IValidity(self.folder.c)
        self.assertEqual(v.isValid(self.product_1), False)
        self.assertEqual(v.isValid(self.product_2), False)

        # Criteria has two catogories; products have just one of these
        self.folder.c.setCategories(("category_11", "category_1"))
        v = IValidity(self.folder.c)
        self.assertEqual(v.isValid(self.product_1), True)
        self.assertEqual(v.isValid(self.product_2), True)
 def testIsValid_1(self):
     """Without criteria
     """
     v = IValidity(self.shipping_price)
     self.assertEqual(v.isValid(), True)
Example #31
0
 def testIsValid_1(self):
     """Without criteria
     """
     v = IValidity(self.shipping_price)
     self.assertEqual(v.isValid(), True)
 def testIsValid_1(self):
     """Without criteria
     """
     v = IValidity(self.default_tax)
     self.assertEqual(v.isValid(self.product_1), True)