Imports and Defines
====
    >>> from mock import Mock
    >>> from zope.component import getMultiAdapter, getUtility, provideAdapter, provideUtility
    >>> from zope.interface import alsoProvides, implements

IShippingMethodAdapter
====
    >>> from collective.cart.shipping.interfaces import IShippingMethodAnnotations
    >>> smethod = Mock()
    >>> alsoProvides(smethod, IShippingMethodAnnotations)
    >>> from collective.cart.shipping.interfaces import IShippingMethodAdapter
    >>> from collective.cart.shipping.adapter.shipping import ShippingMethodAdapter
    >>> provideAdapter(ShippingMethodAdapter)
    >>> sma = IShippingMethodAdapter(smethod)
    >>> sma
    <collective.cart.shipping.adapter.shipping.ShippingMethodAdapter object at ...>
    >>> smethod.base_charge = 0.0
    >>> smethod.weight_charge = 0.0
    >>> smethod.fuel_rate = 0.0
    >>> smethod.insurance_base = 0.0
    >>> smethod.insurance_rate = 0.0
    >>> smethod.risk_rate = 0.0
    >>> sma.shipping_cost(0, 0)
    0.0
    >>> smethod.base_charge = 5.0
    >>> sma.shipping_cost(0, 0)
    5.0
    >>> sma.shipping_cost(10, 0)
    5.0
    >>> smethod.weight_charge = 0.1
    >>> sma.shipping_cost(10, 0)
    6.0
    >>> smethod.fuel_rate = 50.0
    >>> sma.shipping_cost(10, 0)
    9.0
    >>> smethod.risk_rate = 100.0
    >>> sma.shipping_cost(10, 0)
    18.0
    >>> smethod.insurance_base = 2.0
    >>> sma.shipping_cost(10, 0)
    20.0
    >>> smethod.insurance_rate = 25.0
    >>> sma.shipping_cost(10, 0)
    20.0
    >>> sma.shipping_cost(10, 10)
    22.5
    >>> sma.shipping_cost(0, 10)
    19.5


IAvailableShippingMethods
=========================
    >>> from collective.cart.core.interfaces import IAvailableShippingMethods
    >>> from collective.cart.shipping.adapter.portal import AvailableShippingMethods
    >>> provideAdapter(AvailableShippingMethods)


ICartProductAdapter
==========================
    >>> from collective.cart.core.interfaces import ICartProduct, ICartProductAdapter
    >>> from collective.cart.core.content.cart import CartProduct
    >>> from collective.cart.shipping.adapter.product import CartProductAdapter
    >>> provideAdapter(CartProductAdapter)

    >>> from Products.Archetypes.Schema.factory import instanceSchemaFactory
    >>> provideAdapter(instanceSchemaFactory)

    >>> context = CartProduct('cproduct')
    >>> context.height = 0.0
    >>> context.width = 0.0
    >>> context.depth = 0.0

#    >>> alsoProvides(context, ICartProduct)

    >>> paa = ICartProductAdapter(context)
    >>> paa.dimension
    >>> context.height = 100.0
    >>> paa.dimension
    >>> context.width = 100.0
    >>> paa.dimension
    >>> context.depth = 100.0
    >>> paa.dimension
    1.0
    >>> context.height = 200.0
    >>> paa.dimension
    2.0
    >>> context.weight = 1000.0
    >>> paa.weight_in_kg()
    1000.0
    >>> context.weight_unit = 'g'
    >>> paa.weight_in_kg()
    1.0
    >>> method = Mock()
    >>> method.dimension_weight_ratio = 0
    >>> paa.weight_in_kg(method)
    1.0
    >>> method.dimension_weight_ratio = 1
    >>> paa.weight_in_kg(method)
    2.0
    >>> method.dimension_weight_ratio = 0.5
    >>> paa.weight_in_kg(method)
    1.0
