Log in as Manager::

    >>> browser.login(TEST_USER_NAME, TEST_USER_PASSWORD)

Create Shop::

    >>> browser.open('/++add++collective.cart.shopping.Shop')
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Shöp'
    >>> browser.getControl(name="form.buttons.save").click()

Add some Shipping Methods::

    >>> browser.open('/shop/shipping-method-container/createObject?type_name=ShippingMethod')
    >>> browser.getControl(name="title").value = 'ShippingMethöd1'
    >>> browser.getControl(name="description").value = 'Descriptiön of ShippingMethöd1'
    >>> browser.getControl(name="min_delivery_days").value = '3'
    >>> browser.getControl(name="max_delivery_days").value = '5'
    >>> browser.getControl(name="form.button.save").click()
    >>> 'Shipping fee for one kg' in browser.contents
    True
    >>> '1.0' in browser.contents
    True

    >>> shippingmethod1_uuid = portal['shop']['shipping-method-container']['shippingmethod1'].UID()

    >>> browser.open('/shop/shipping-method-container/createObject?type_name=ShippingMethod')
    >>> browser.getControl(name="title").value = 'ShippingMethöd2'
    >>> browser.getControl(name="description").value = 'Descriptiön of ShippingMethöd2'
    >>> browser.getControl(name="min_delivery_days").value = '5'
    >>> browser.getControl(name="max_delivery_days").value = '10'
    >>> browser.getControl(name="shipping_fee").value = 'def shipping_fee(weight):\n    return weight * 2\nreturn shipping_fee'
    >>> browser.getControl(name="form.button.save").click()
    >>> '2.0' in browser.contents
    True

    >>> shippingmethod2_uuid = portal['shop']['shipping-method-container']['shippingmethod2'].UID()

Add ArticleContainer::

    >>> browser.open('/shop/++add++collective.cart.shopping.ArticleContainer')
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Article Container'
    >>> browser.getControl(name="form.buttons.save").click()

Add Article::

    >>> browser.open('/shop/article-container/++add++collective.cart.core.Article')
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Ärticle1'
    >>> browser.getControl(name="form.widgets.IDublinCore.description").value = 'Description of Ärticle1'
    >>> browser.getControl(name="form.widgets.ISKU.sku").value = 'SKU1'
    >>> browser.getControl(name="form.widgets.IDiscount.price").value = '12.30'
    >>> browser.getControl(name="form.widgets.ISize.weight").value = '100'
    >>> browser.getControl(name="form.buttons.save").click()

    >>> article1_url = browser.url

Add Stock to Ärticle1::

    >>> browser.open('/shop/article-container/article1/++add++collective.cart.stock.Stock')
    >>> browser.getControl(name="form.widgets.IBasic.title").value = 'Stöck1'
    >>> browser.getControl(name="form.widgets.IBasic.description").value = 'Description of Stöck1'
    >>> browser.getControl(name="form.widgets.stock").value = '100'
    >>> browser.getControl( name="form.widgets.IStockPrice.price").value = '0.0'
    >>> browser.getControl(name="form.buttons.save").click()

    >>> stock1_url = browser.url

Should not be able to visit /@@billing-and-shipping::

    >>> browser.open('/shop/@@billing-and-shipping')
    >>> browser.url
    'http://nohost/plone/shop/@@cart'
    >>> print browser.bycss('#cart-is-empty')
    --- 1 ---
    <p id="cart-is-empty">
    Cart is empty.
    </p>

Should not be able to visit /@@order-confirmation::

    >>> browser.open('/shop/@@order-confirmation')
    >>> browser.url
    'http://nohost/plone/shop/@@cart'
    >>> print browser.bycss('#cart-is-empty')
    --- 1 ---
    <p id="cart-is-empty">
    Cart is empty.
    </p>

Add Ärticle1 to Cart::

    >>> browser.open(article1_url)
    >>> browser.getControl(name="form.buttons.AddToCart").click()
    >>> browser.open('/shop/@@cart')

    >>> print browser.bycss('#cart-is-empty')

Should not able to visit /@@billing-and-shipping::

    >>> browser.open('/shop/@@billing-and-shipping')
    >>> browser.url
    'http://nohost/plone/shop/@@billing-and-shipping'

Should not be able to visit /@@order-confirmation::

    >>> browser.open('/shop/@@order-confirmation')
    >>> browser.url
    'http://nohost/plone/shop/@@billing-and-shipping'

Fill billing info::

    >>> browser.getControl(name="billing_first_name").value = 'Billing First Näme'
    >>> browser.getControl(name="billing_last_name").value = 'Billing Last Näme'
    >>> browser.getControl(name="billing_organization").value = 'Billing Örganization'
    >>> browser.getControl(name="billing_vat").value = 'FI1234567890'
    >>> browser.getControl(name="billing_email").value = 'first.last@email.bil'
    >>> browser.getControl(name="billing_street").value = 'Billing Street Äddress'
    >>> browser.getControl(name="billing_post").value = 'Billing Pöst Cöde'
    >>> browser.getControl(name="billing_city").value = 'Billing €ity'
    >>> browser.getControl(name="billing_phone").value = 'Billing Phöne Number'
    >>> browser.getControl(name="form.buttons.CheckOut").click()
    >>> browser.url
    'http://nohost/plone/shop/@@order-confirmation'
    >>> 'ShippingMethöd1' in browser.contents
    True

Back to billing-and-shipping::

    >>> browser.getControl(name="form.buttons.Back").click()
    >>> browser.url
    'http://nohost/plone/shop/@@billing-and-shipping'

    >>> print browser.bycss('.shipping-methods')
    --- 1 ---
    <dl class="field shipping-methods"><dt>
    Shipping Method
    <span class="required" title="title_required"> </span>
    </dt>
    <dd>
    <label>
    <input name="shipping-method" type="radio" required="required" checked value="...">
    ShippingMeth&#246;d1  0.10 &#8364;
    </label>
    <p>Descripti&#246;n of ShippingMeth&#246;d1</p>
    </dd>
    <dd>
    <label>
    <input name="shipping-method" type="radio" required="required" value="...">
    ShippingMeth&#246;d2  0.20 &#8364;
    </label>
    <p>Descripti&#246;n of ShippingMeth&#246;d2</p>
    </dd>
    </dl>

Check the different shipping method::

    >>> browser.getControl(name="shipping-method").value = [shippingmethod2_uuid]
    >>> browser.getControl(name="form.buttons.CheckOut").click()

Back to billing-and-shipping::

    >>> browser.getControl(name="form.buttons.Back").click()
    >>> print browser.bycss('.shipping-methods')
    --- 1 ---
    <dl class="field shipping-methods"><dt>
    Shipping Method
    <span class="required" title="title_required"> </span>
    </dt>
    <dd>
    <label>
    <input name="shipping-method" type="radio" required="required" value="...">
    ShippingMeth&#246;d1  0.10 &#8364;
    </label>
    <p>Descripti&#246;n of ShippingMeth&#246;d1</p>
    </dd>
    <dd>
    <label>
    <input name="shipping-method" type="radio" required="required" checked value="...">
    ShippingMeth&#246;d2  0.20 &#8364;
    </label>
    <p>Descripti&#246;n of ShippingMeth&#246;d2</p>
    </dd>
    </dl>
