Log in as Manager::

    >>> browser.login(TEST_USER_NAME, TEST_USER_PASSWORD)

Add Shop::

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

Add Article Container::

    >>> browser.open('/shop/++add++collective.cart.shopping.ArticleContainer')
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Ärticle Cöntäiner'
    >>> browser.getControl(name="form.widgets.IDublinCore.description").value = 'Descriptiön of Äarticle Cöntäiner.'
    >>> browser.getControl(name="form.buttons.save").click()

Add Article1::

    >>> 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 = 'Descriptiön of Ärticle1'
    >>> browser.getControl(name="form.widgets.ISKU.sku").value = 'SKÖ1'
    >>> browser.getControl(name="form.widgets.IDiscount.price").value = '24.60'
    >>> browser.getControl(name="form.widgets.ISize.weight").value = '100.0'
    >>> browser.getControl(name="form.buttons.save").click()

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 = 'Descriptiön of Stöck1'
    >>> browser.getControl(name="form.widgets.stock").value = '100'
    >>> browser.getControl( name="form.widgets.IStockPrice.price").value = '4.00'
    >>> browser.getControl(name="form.buttons.save").click()

Add no integer number to cart::

    >>> browser.open('/shop/article-container/article1')
    >>> browser.getControl(name="quantity").value = '1.0'
    >>> browser.getControl(name="form.buttons.AddToCart").click()
    >>> print browser.bycss('.warn')
    --- 1 ---
    <dl class="portalMessage warn"><dt>Warn</dt>
    <dd>Input integer value to add to cart.</dd>
    </dl>
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 100 pcs</section>

Cart should be empty::

    >>> browser.open('/shop/@@cart')
    >>> print browser.bycss('#cart-is-empty')
    --- 1 ---
    <p id="cart-is-empty">Cart is empty.</p>
    >>> print browser.bycss('#cart-articles')

Add one item to cart::

    >>> browser.open('/shop/article-container/article1')
    >>> browser.getControl(name="form.buttons.AddToCart").click()

There should be one article in cart::

    >>> browser.open('/shop/@@cart')
    >>> print browser.bycss('#cart-is-empty')
    >>> print browser.bycss('#cart-articles')
    --- 1 ---
    <section id="cart-articles"><table><tbody><tr><td class="image">
    <a href="http://nohost/plone/shop/article-container/article1" title="&#196;rticle1">
    <img src="http://nohost/plone/fallback.png"></a>
    </td>
    <td class="name">
    <h3>
    <a href="http://nohost/plone/shop/article-container/article1">&#196;rticle1</a>
    </h3>
    <p>Descripti&#246;n of &#196;rticle1</p>
    </td>
    <td class="price-and-quantity">
    <form method="post" action="http://nohost/plone/shop/@@cart">
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="1">
    &#160;&#215;&#160;
    <span class="gross">24.60 &#8364;</span>
    <br><span class="vat">Including VAT: 23.00 %</span>
    <section class="buttons"><button class="shopping-button update" name="form.update.article" type="submit" value="...">Update</button>
    <button class="shopping-button remove" name="form.delete.article" type="submit" value="...">Delete</button>
    </section></form>
    </td>
    </tr></tbody></table></section>
    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">24.60 &#8364;</span>
    </section>

Back to Article1 and add more articles::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 99 pcs</section>

    >>> browser.getControl(name="quantity").value = '100'
    >>> browser.getControl(name="form.buttons.AddToCart").click()
    >>> print browser.bycss('.sold-out')

Go to cart::

    >>> browser.open('/shop/@@cart')
    >>> print browser.bycss('#cart-is-empty')
    >>> print browser.bycss('#cart-articles')
    --- 1 ---
    <section id="cart-articles"><table><tbody><tr><td class="image">
    <a href="http://nohost/plone/shop/article-container/article1" title="&#196;rticle1">
    <img src="http://nohost/plone/fallback.png"></a>
    </td>
    <td class="name">
    <h3>
    <a href="http://nohost/plone/shop/article-container/article1">&#196;rticle1</a>
    </h3>
    <p>Descripti&#246;n of &#196;rticle1</p>
    </td>
    <td class="price-and-quantity">
    <form method="post" action="http://nohost/plone/shop/@@cart">
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="100">
    &#160;&#215;&#160;
    <span class="gross">24.60 &#8364;</span>
    <br><span class="vat">Including VAT: 23.00 %</span>
    <section class="buttons"><button class="shopping-button update" name="form.update.article" type="submit" value="...">Update</button>
    <button class="shopping-button remove" name="form.delete.article" type="submit" value="...">Delete</button>
    </section></form>
    </td>
    </tr></tbody></table></section>

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">2,460.00 &#8364;</span>
    </section>

Edit Ärtilce1 and enable discount::

    >>> browser.open('/shop/article-container/article1/edit')
    >>> browser.getControl(name="form.widgets.IDiscount.discount_enabled:list").value = True
    >>> browser.getControl(name="form.widgets.IDiscount.discount_price").value = '12.30'
    >>> browser.getControl(name="form.widgets.IDiscount.discount_end-day").value = str(today.day)
    >>> browser.getControl(name="form.widgets.IDiscount.discount_end-month").value = [str(today.month)]
    >>> browser.getControl(name="form.widgets.IDiscount.discount_end-year").value = str(today.year)
    >>> browser.getControl(name="form.buttons.save").click()

Add Stock to Ärticle1::

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

Adding more articles uses price which is already in cart::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 0 pcs</section>

Change reducible quantity for Ärticle1::

    >>> browser.open('/shop/article-container/article1/edit')
    >>> browser.getControl(name="form.widgets.IStock.reducible_quantity").value = '150'
    >>> browser.getControl(name="form.buttons.save").click()
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 50 pcs</section>

    >>> browser.getControl(name="quantity").value = '10'
    >>> browser.getControl(name="form.buttons.AddToCart").click()
    >>> print browser.bycss('.sold-out')
    >>> browser.open('/shop/@@cart')
    >>> print browser.bycss('#cart-is-empty')
    >>> print browser.bycss('#cart-articles')
    --- 1 ---
    <section id="cart-articles"><table><tbody><tr><td class="image">
    <a href="http://nohost/plone/shop/article-container/article1" title="&#196;rticle1">
    <img src="http://nohost/plone/fallback.png"></a>
    </td>
    <td class="name">
    <h3>
    <a href="http://nohost/plone/shop/article-container/article1">&#196;rticle1</a>
    </h3>
    <p>Descripti&#246;n of &#196;rticle1</p>
    </td>
    <td class="price-and-quantity">
    <form method="post" action="http://nohost/plone/shop/@@cart">
    <input id="quantity" min="0" name="quantity" type="number" max="150" maxlength="3" size="3" value="110">
    &#160;&#215;&#160;
    <span class="gross">24.60 &#8364;</span>
    <br><span class="vat">Including VAT: 23.00 %</span>
    <section class="buttons"><button class="shopping-button update" name="form.update.article" type="submit" value="...">Update</button>
    <button class="shopping-button remove" name="form.delete.article" type="submit" value="...">Delete</button>
    </section></form>
    </td>
    </tr></tbody></table></section>
    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">2,706.00 &#8364;</span>
    </section>

Update quantity which is not integer::

    >>> browser.getControl(name="quantity").value = 'AAA'
    >>> browser.getControl(name="form.update.article").click()
    >>> print browser.bycss('.warn')
    --- 1 ---
    <dl class="portalMessage warn"><dt>Warn</dt>
    <dd>Invalid quantity.</dd>
    </dl>
    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="150" maxlength="3" size="3" value="110">
    &#160;&#215;&#160;

Update quantity with integer::

    >>> browser.getControl(name="quantity").value = '90'
    >>> browser.getControl(name="form.update.article").click()
    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="150" maxlength="3" size="3" value="90">
    &#160;&#215;&#160;
    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">2,214.00 &#8364;</span>
    </section>

Go to Article1 and check stock::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 60 pcs</section>

Add 20 Article1::

    >>> browser.getControl(name="quantity").value = '20'
    >>> browser.getControl(name="form.buttons.AddToCart").click()

Add Ärticle11 under Ärticle1::

    >>> browser.open('/shop/article-container/article1/++add++collective.cart.core.Article')
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Ärticle11'
    >>> browser.getControl(name="form.widgets.IDublinCore.description").value = 'Descriptiön of Ärticle11.'
    >>> browser.getControl(name="form.widgets.ISKU.sku").value = 'SKÖ11'
    >>> browser.getControl(name="form.widgets.IDiscount.price").value = '10.00'
    >>> browser.getControl(name="form.widgets.ISize.weight").value = '200.0'
    >>> browser.getControl(name="form.buttons.save").click()

Add Stöck1 to Ärticle11::

    >>> browser.open('/shop/article-container/article1/article11/++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()

Go to Article1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 100 pcs</section>

    >>> browser.getControl(name="quantity").value = '10'
    >>> browser.getControl(name="form.buttons.AddToCart").click()

Go to cart::

    >>> browser.open('/shop/@@cart')
    >>> print browser.bycss('#cart-is-empty')
    >>> print browser.bycss('#cart-articles')
    --- 1 ---
    <section id="cart-articles"><table><tbody><tr><td class="image">
    <a href="http://nohost/plone/shop/article-container/article1" title="&#196;rticle1">
    <img src="http://nohost/plone/fallback.png"></a>
    </td>
    <td class="name">
    <h3>
    <a href="http://nohost/plone/shop/article-container/article1">&#196;rticle1</a>
    </h3>
    <p>Descripti&#246;n of &#196;rticle1</p>
    </td>
    <td class="price-and-quantity">
    <form method="post" action="http://nohost/plone/shop/@@cart">
    <input id="quantity" min="0" name="quantity" type="number" max="150" maxlength="3" size="3" value="110">
    &#160;&#215;&#160;
    <span class="gross">24.60 &#8364;</span>
    <br><span class="vat">Including VAT: 23.00 %</span>
    <section class="buttons"><button class="shopping-button update" name="form.update.article" type="submit" value="...">Update</button>
    <button class="shopping-button remove" name="form.delete.article" type="submit" value="...">Delete</button>
    </section></form>
    </td>
    </tr><tr><td class="image">
    <a href="http://nohost/plone/shop/article-container/article1/article11" title="&#196;rticle1 &#196;rticle11">
    <img src="http://nohost/plone/fallback.png"></a>
    </td>
    <td class="name">
    <h3>
    <a href="http://nohost/plone/shop/article-container/article1/article11">&#196;rticle1 &#196;rticle11</a>
    </h3>
    <p>Descripti&#246;n of &#196;rticle11.</p>
    </td>
    <td class="price-and-quantity">
    <form method="post" action="http://nohost/plone/shop/@@cart">
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="10">
    &#160;&#215;&#160;
    <span class="gross">10.00 &#8364;</span>
    <br><span class="vat">Including VAT: 23.00 %</span>
    <section class="buttons"><button class="shopping-button update" name="form.update.article" type="submit" value="...">Update</button>
    <button class="shopping-button remove" name="form.delete.article" type="submit" value="...">Delete</button>
    </section></form>
    </td>
    </tr></tbody></table></section>

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">2,806.00 &#8364;</span>
    </section>

Go to Article1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 90 pcs</section>

    >>> browser.getControl(name="quantity").value = '20'
    >>> browser.getControl(name="form.buttons.AddToCart").click()

Go to Article11::

    >>> browser.open('/shop/article-container/article1/article11')
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 70 pcs</section>

Go to cart::

    >>> browser.open('/shop/@@cart')
    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="150" maxlength="3" size="3" value="110">
    &#160;&#215;&#160;
    --- 2 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="30">
    &#160;&#215;&#160;

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">3,006.00 &#8364;</span>
    </section>

Edit Ärticle1 to use subarticle::

    >>> browser.open('/shop/article-container/article1/edit')
    >>> browser.getControl(name="form.widgets.use_subarticle:list").value = ['on']
    >>> browser.getControl(name="form.buttons.save").click()

Add to cart::

    >>> browser.getControl(name="quantity").value = '10'
    >>> browser.getControl(name="form.buttons.AddToCart").click()

Go to cart::

    >>> browser.open('/shop/@@cart')
    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="150" maxlength="3" size="3" value="110">
    &#160;&#215;&#160;
    --- 2 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="40">
    &#160;&#215;&#160;

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">3,106.00 &#8364;</span>
    </section>

Go to Article11::

    >>> browser.open('/shop/article-container/article1/article11')
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 60 pcs</section>

Edit Ärticle1 not to use subarticle::

    >>> browser.open('/shop/article-container/article1/edit')
    >>> browser.getControl(name="form.widgets.use_subarticle:list").value = []
    >>> browser.getControl(name="form.buttons.save").click()

Edit Ärticle11 not to use subarticle::

    >>> browser.open('/shop/article-container/article1/article11/edit')
    >>> browser.getControl(name="form.widgets.use_subarticle:list").value = ['on']
    >>> browser.getControl(name="form.buttons.save").click()

Add Ärticle111 to Ärticle11::

    >>> browser.open('/shop/article-container/article1/article11/++add++collective.cart.core.Article')
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Ärticle111'
    >>> browser.getControl(name="form.widgets.IDublinCore.description").value = 'Descriptiön of Ärticle111.'
    >>> browser.getControl(name="form.widgets.ISKU.sku").value = 'SKÖ111'
    >>> browser.getControl(name="form.widgets.IDiscount.price").value = '36.90'
    >>> browser.getControl(name="form.widgets.ISize.weight").value = '100.0'
    >>> browser.getControl(name="form.buttons.save").click()

Add Stock to Ärticle111::

    >>> browser.open('/shop/article-container/article1/article11/article111/++add++collective.cart.stock.Stock')
    >>> browser.getControl(name="form.widgets.IBasic.title").value = 'Stöck111'
    >>> browser.getControl(name="form.widgets.IBasic.description").value = 'Description of Stöck111'
    >>> 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()

Go to Article1::

    >>> browser.open('/shop/article-container/article1')

Add to cart::

    >>> browser.getControl(name="quantity").value = '10'
    >>> browser.getControl(name="form.buttons.AddToCart").click()

Go to cart::

    >>> browser.open('/shop/@@cart')
    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="150" maxlength="3" size="3" value="110">
    &#160;&#215;&#160;
    --- 2 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="40">
    &#160;&#215;&#160;
    --- 3 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="10">
    &#160;&#215;&#160;

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">3,475.00 &#8364;</span>
    </section>

Delete Article1::

    >>> browser.getControl(name="form.delete.article", index=0).click()

    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="40">
    &#160;&#215;&#160;
    --- 2 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="10">
    &#160;&#215;&#160;

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">769.00 &#8364;</span>
    </section>

Update Article111 over the stock::

    >>> browser.getControl(name="quantity", index=1).value = '200'
    >>> browser.getControl(name="form.update.article", index=1).click()
    >>> print browser.bycss('.info')
    --- 1 ---
    ...
    --- 2 ---
    <dl class="portalMessage info"><dt>Info</dt>
    <dd>No more than 100 can be added to cart for &#196;rticle1 &#196;rticle11 &#196;rticle111</dd>
    </dl>

    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="40">
    &#160;&#215;&#160;
    --- 2 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="100">
    &#160;&#215;&#160;

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">4,090.00 &#8364;</span>
    </section>

Update Article111 with minus quantity::

    >>> browser.getControl(name="quantity", index=1).value = '-10'
    >>> browser.getControl(name="form.update.article", index=1).click()
    >>> print browser.bycss('.warn')
    --- 1 ---
    <dl class="portalMessage warn"><dt>Warn</dt>
    <dd>Invalid quantity.</dd>
    </dl>

Update Article111 with appropriate quantity::

    >>> browser.getControl(name="quantity", index=1).value = '20'
    >>> browser.getControl(name="form.update.article", index=1).click()

    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="40">
    &#160;&#215;&#160;
    --- 2 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="20">
    &#160;&#215;&#160;

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">1,138.00 &#8364;</span>
    </section>

Go to Article111::

    >>> browser.open('/shop/article-container/article1/article11/article111')
    >>> print browser.bycss('#stock')
    --- 1 ---
    <section id="stock">Stock: 80 pcs</section>

Go to cart::

    >>> browser.open('/shop/@@cart')

Update Article111 to zero should remove the article::

    >>> browser.getControl(name="quantity", index=1).value = '0'
    >>> browser.getControl(name="form.update.article", index=1).click()

    >>> print browser.bycss('#quantity')
    --- 1 ---
    <input id="quantity" min="0" name="quantity" type="number" max="100" maxlength="3" size="3" value="40">
    &#160;&#215;&#160;

    >>> print browser.bycss('#cart-total')
    --- 1 ---
    <section id="cart-total"><span>Total</span>&#160;&#160;
    <span id="total">400.00 &#8364;</span>
    </section>

Add Article11 to cart::

    >>> browser.open('/shop/article-container/article1/article11/article111')
    >>> browser.getControl(name="quantity").value = '10'
    >>> browser.getControl(name="form.buttons.AddToCart").click()

Go to cart and clear::

    >>> browser.open('/shop/@@cart')
    >>> browser.getControl(name="form.clear.cart").click()
    >>> print browser.bycss('#cart-is-empty')
    --- 1 ---
    <p id="cart-is-empty">Cart is empty.</p>
