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 = 'Description of Shöp.'
    >>> browser.getControl(name="form.buttons.save").click()

    >>> print browser.bycss('.documentFirstHeading')
    --- 1 ---
    <h1 class="documentFirstHeading">Sh&#246;p</h1>

    >>> print browser.bycss('.documentDescription')
    --- 1 ---
    <div class="documentDescription description">Description of Sh&#246;p.</div>

Add Article Container::

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

    >>> print browser.bycss('.documentFirstHeading')
    --- 1 ---
    <h1 class="documentFirstHeading">&#196;rticle Container</h1>

    >>> print browser.bycss('.documentDescription')
    --- 1 ---
    <div class="documentDescription description">Description of &#196;rticle Container</div>

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 = 'Description of Ärticle1'
    >>> browser.getControl(name="form.widgets.text").value = '<p>Text of Ärticle1</p>'
    >>> browser.getControl(name="form.widgets.ISKU.sku").value = 'SKÖ1'
    >>> browser.getControl(name="form.widgets.IDiscount.price").value = '24.80'
    >>> browser.getControl(name="form.widgets.ISize.weight").value = '100.0'
    >>> browser.getControl(name="form.buttons.save").click()

    >>> print browser.bycss('.documentFirstHeading')
    --- 1 ---
    <h1 class="documentFirstHeading">&#196;rticle1</h1>

    >>> print browser.bycss('.documentDescription')
    --- 1 ---
    <div class="documentDescription">Description of &#196;rticle1</div>

    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><p class="sold-out">
    Sold Out
    </p>
    </section>

    >>> print browser.bycss('#article-body-text')
    --- 1 ---
    <section id="article-body-text"><p>Text of &#196;rticle1</p>
    </section>

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 = '4.00'
    >>> browser.getControl(name="form.buttons.save").click()

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><section id="money"><section id="price" class="gross">24.80 &#8364;</section><section id="vat-rate">
    Including VAT: 24%
    </section></section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="100" size="3" name="..." maxlength="3"><span id="pcs">pcs</span>
    </section><section id="stock">
    Stock: 100 pcs
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </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.40'
    >>> 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()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><section id="money"><section id="price" class="gross">12.40 &#8364;</section><section id="vat-rate">
    Including VAT: 24%
    </section></section><section id="discount"><p id="discount-message">
    (Discount valid till ...)
    </p>
    <p id="normal-price">
    Normal Price: 24.80 &#8364;
    </p>
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="100" size="3" name="..." maxlength="3"><span id="pcs">pcs</span>
    </section><section id="stock">
    Stock: 100 pcs
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </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()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><p class="sold-out">
    Sold Out
    </p>
    </section>

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 = '24.80'
    >>> browser.getControl(name="form.widgets.ISize.weight").value = '200.0'
    >>> browser.getControl(name="form.buttons.save").click()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><p class="sold-out">
    Sold Out
    </p>
    </section>

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><p class="sold-out">
    Sold Out
    </p>
    </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()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><p class="sold-out">
    Sold Out
    </p>
    </section>

Add Stöck11 to Ärticle11::

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

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><input id="quantity" min="1" required="required" value="1" type="number" max="100" size="3" name="..." maxlength="3">
    &#160;&#215;&#160;
    <span class="gross">24.80 &#8364;</span>
    <section id="vat-rate">
    Including VAT: 24%
    </section><section id="stock">
    Stock: 100 pcs
    </section><section class="buttons"><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section></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()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/@@select-subarticle"><option value="...">
    &#196;rticle11
    24.80 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="100" size="3" name="..." maxlength="3"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Go to Ärticle11 and enable discount::

    >>> browser.open('/shop/article-container/article1/article11/edit')
    >>> browser.getControl(name="form.widgets.IDiscount.discount_enabled:list").value = True
    >>> browser.getControl(name="form.widgets.IDiscount.discount_price").value = '6.15'
    >>> 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()

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/@@select-subarticle"><option value="...">
    &#196;rticle11
    6.15 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="100" size="3" name="..." maxlength="3"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </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()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><input id="quantity" min="1" required="required" value="1" type="number" max="100" size="3" name="..." maxlength="3">
    &#160;&#215;&#160;
    <span class="gross">6.15 &#8364;</span>
    <section id="vat-rate">
    Including VAT: 24%
    </section><section id="discount"><p id="discount-message">
    (Discount valid till ...)
    </p>
    <p id="normal-price">
    Normal Price: 24.80 &#8364;
    </p>
    </section><section id="stock">
    Stock: 100 pcs
    </section><section class="buttons"><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section></section>

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 = 'Description 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()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><p class="sold-out">
    Sold Out
    </p>
    </section>

Go to Ärticle11::

    >>> browser.open('/shop/article-container/article1/article11')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article111"><p class="sold-out">
    Sold Out
    </p>
    </section>

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><input id="quantity" min="1" required="required" value="1" type="number" max="100" size="3" name="..." maxlength="3">
    &#160;&#215;&#160;
    <span class="gross">6.15 &#8364;</span>
    <section id="vat-rate">
    Including VAT: 24%
    </section><section id="discount"><p id="discount-message">
    (Discount valid till ...)
    </p>
    <p id="normal-price">
    Normal Price: 24.80 &#8364;
    </p>
    </section><section id="stock">
    Stock: 100 pcs
    </section><section class="buttons"><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section></section>

Edit Ärticle11 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()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><p class="sold-out">
    Sold Out
    </p>
    </section>

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><p class="sold-out">
    Sold Out
    </p>
    </section>

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 = '50'
    >>> browser.getControl( name="form.widgets.IStockPrice.price").value = '0.0'
    >>> browser.getControl(name="form.buttons.save").click()

Go to Ärticle11::

    >>> browser.open('/shop/article-container/article1/article11')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/article11/@@select-subarticle"><option value="...">
    &#196;rticle111
    36.90 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/@@select-subarticle"><option value="...">
    &#196;rticle111
    36.90 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart"  type="submit" value="...">Add To Cart</button>
    </section>

Edit Ärticle11 not to use subarticle::

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

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><input id="quantity" min="1" required="required" value="1" type="number" max="100" size="3" name="..." maxlength="3">
    &#160;&#215;&#160;
    <span class="gross">6.15 &#8364;</span>
    <section id="vat-rate">
    Including VAT: 24%
    </section><section id="discount"><p id="discount-message">
    (Discount valid till ...)
    </p>
    <p id="normal-price">
    Normal Price: 24.80 &#8364;
    </p>
    </section><section id="stock">
    Stock: 100 pcs
    </section><section class="buttons"><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section></section>

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()

Go to Ärticle111 and enable discount::

    >>> browser.open('/shop/article-container/article1/article11/article111/edit')
    >>> browser.getControl(name="form.widgets.IDiscount.discount_enabled:list").value = True
    >>> browser.getControl(name="form.widgets.IDiscount.discount_price").value = '5.00'
    >>> 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()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><section id="money"><section id="price" class="gross">5.00 &#8364;</section><section id="vat-rate">
    Including VAT: 24%
    </section></section><section id="discount"><p id="discount-message">
    (Discount valid till ...)
    </p>
    <p id="normal-price">
    Normal Price: 36.90 &#8364;
    </p>
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><section id="stock">
    Stock: 50 pcs
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Go to Ärticle11::

    >>> browser.open('/shop/article-container/article1/article11')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/article11/@@select-subarticle"><option value="...">
    &#196;rticle111
    5.00 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/@@select-subarticle"><option value="...">
    &#196;rticle111
    5.00 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>


Go to Ärticle111 and make not salable::

    >>> browser.open('/shop/article-container/article1/article11/article111/edit')
    >>> browser.getControl(name="form.widgets.ISalable.salable:list").value = False
    >>> browser.getControl(name="form.buttons.save").click()
    >>> print browser.bycss('.add-to-cart')

Go to Ärticle11::

    >>> browser.open('/shop/article-container/article1/article11')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><p class="sold-out">
    Sold Out
    </p>
    </section>

Make Ärticle11 not salable::

    >>> browser.open('/shop/article-container/article1/article11/article11/edit')
    >>> browser.getControl(name="form.widgets.ISalable.salable:list").value = False
    >>> browser.getControl(name="form.buttons.save").click()
    >>> print browser.bycss('.add-to-cart')

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><p class="sold-out">
    Sold Out
    </p>
    </section>

Make Ärticle1 not salable::

    >>> browser.open('/shop/article-container/article1/edit')
    >>> browser.getControl(name="form.widgets.ISalable.salable:list").value = False
    >>> browser.getControl(name="form.buttons.save").click()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><p class="sold-out">
    Sold Out
    </p>
    </section>

Go to Ärticle111 and make salable::

    >>> browser.open('/shop/article-container/article1/article11/article111/edit')
    >>> browser.getControl(name="form.widgets.ISalable.salable:list").value = True
    >>> browser.getControl(name="form.buttons.save").click()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><section id="money"><section id="price" class="gross">5.00 &#8364;</section><section id="vat-rate">
    Including VAT: 24%
    </section></section><section id="discount"><p id="discount-message">
    (Discount valid till ...)
    </p>
    <p id="normal-price">
    Normal Price: 36.90 &#8364;
    </p>
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><section id="stock">
    Stock: 50 pcs
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Got to Ärticle11::

    >>> browser.open('/shop/article-container/article1/article11')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/article11/@@select-subarticle"><option value="...">
    &#196;rticle111
    5.00 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/@@select-subarticle"><option value="...">
    &#196;rticle111
    5.00 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Make Ärticle11 salable::

    >>> browser.open('/shop/article-container/article1/article11/edit')
    >>> browser.getControl(name="form.widgets.ISalable.salable:list").value = True
    >>> browser.getControl(name="form.buttons.save").click()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/article11/@@select-subarticle"><option value="...">
    &#196;rticle111
    5.00 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><label>Quantity</label>
    <input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Go to Ärticle1::

    >>> browser.open('/shop/article-container/article1')
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/@@select-subarticle"><option value="...">
    &#196;rticle111
    5.00 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Make Ärticle1 salable::

    >>> browser.open('/shop/article-container/article1/edit')
    >>> browser.getControl(name="form.widgets.ISalable.salable:list").value = True
    >>> browser.getControl(name="form.buttons.save").click()
    >>> print browser.bycss('.add-to-cart')
    --- 1 ---
    <section class="add-to-cart article11"><select class="subarticle" name="subarticle" data-ajax-target="http://nohost/plone/shop/article-container/article1/@@select-subarticle"><option value="...">
    &#196;rticle111
    5.00 &#8364;
    </option></select><section id="vat-rate">
    Including VAT: 24%
    </section><section id="quantity"><input min="1" required="required" type="number" value="1" max="50" size="2" name="..." maxlength="2"><span id="pcs">pcs</span>
    </section><button class="shopping-button update" name="form.buttons.AddToCart" type="submit" value="...">Add To Cart</button>
    </section>

Add Article12 with existing SKU::

    >>> browser.open('/shop/article-container/++add++collective.cart.core.Article')
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Ärticle2'
    >>> browser.getControl(name="form.widgets.IDublinCore.description").value = 'Description of Ärticle2'
    >>> browser.getControl(name="form.widgets.text").value = '<p>Text of Ärticle2</p>'
    >>> browser.getControl(name="form.widgets.ISKU.sku").value = 'SKÖ1'
    >>> browser.getControl(name="form.widgets.IDiscount.price").value = '24.80'
    >>> browser.getControl(name="form.widgets.ISize.weight").value = '100.0'
    >>> browser.getControl(name="form.buttons.save").click()
    >>> browser.url
    'http://nohost/plone/shop/article-container/++add++collective.cart.core.Article'
    >>> 'The SKU is already in use.' in browser.contents
    True

Giving different SKU should be alright::

    >>> browser.getControl(name="form.widgets.ISKU.sku").value = 'SKÖ2'
    >>> browser.getControl(name="form.buttons.save").click()
    >>> 'The SKU is already in use.' in browser.contents
    False

Giving existing SKU should be rejected::

    >>> browser.open('/shop/article-container/article2/edit')
    >>> browser.getControl(name="form.widgets.ISKU.sku").value = 'SKÖ1'
    >>> browser.getControl(name="form.buttons.save").click()
    >>> browser.url
    'http://nohost/plone/shop/article-container/article2/@@edit'
    >>> 'The SKU is already in use.' in browser.contents
    True
