Log in as Manager::

    >>> browser.login(TEST_USER_NAME, TEST_USER_PASSWORD)

Change the display to folder_listing to make '/' context portal::

    >>> browser.open('/selectViewTemplate?templateId=folder_listing')

Make Shopping Site::

    >>> 'Make Shopping Site' in browser.contents
    True
    >>> 'Unmake Shopping Site' in browser.contents
    False

    >>> portal['cart-container']
    Traceback (most recent call last):
    ...
    KeyError: 'cart-container'

    >>> browser.getLink('Make Shopping Site').click()

    >>> 'Make Shopping Site' in browser.contents
    False
    >>> 'Unmake Shopping Site' in browser.contents
    True

    >>> portal['cart-container']
    <Container at /plone/cart-container>

    >>> browser.open('/cart-container')
    >>> print browser.bycss('#next-cart-id')
    --- 1 ---
    <div class="documentDescription" id="next-cart-id">The next cart ID: 1</div>

    >>> print browser.bycss('#no-orders')
    --- 1 ---
    <p id="no-orders">There are no orders.</p>

    >>> print browser.bycss('#cart-list')

Unmake Shopping Site::

    >>> browser.open('/')
    >>> browser.getLink('Unmake Shopping Site').click()

    >>> 'Make Shopping Site' in browser.contents
    True
    >>> 'Unmake Shopping Site' in browser.contents
    False

    >>> portal['cart-container']
    <Container at /plone/cart-container>

Make Shopping Site once again::

    >>> browser.getLink('Make Shopping Site').click()

    >>> 'Make Shopping Site' in browser.contents
    False
    >>> 'Unmake Shopping Site' in browser.contents
    True

There should only be one Cart Container::

    >>> portal['cart-container']
    <Container at /plone/cart-container>
    >>> portal['cart-container-1']
    Traceback (most recent call last):
    ...
    KeyError: 'cart-container-1'

Deleting Cart Container Unmake Shopping Site::

    >>> browser.open('/cart-container/delete_confirmation')
    >>> browser.getControl('Delete').click()

    >>> portal['cart-container']
    Traceback (most recent call last):
    ...
    KeyError: 'cart-container'

    >>> 'Make Shopping Site' in browser.contents
    True
    >>> 'Unmake Shopping Site' in browser.contents
    False

    >>> 'This container is no longer a shopping site.' in browser.contents
    True

Make Shopping Site once again::

    >>> browser.getLink('Make Shopping Site').click()

    >>> 'Make Shopping Site' in browser.contents
    False
    >>> 'Unmake Shopping Site' in browser.contents
    True

Add Article::

    >>> browser.open('/++add++collective.cart.core.Article')
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Article01'
    >>> browser.getControl(name="form.widgets.IDublinCore.description").value = 'Description of Article01'
    >>> browser.getControl(name="form.buttons.save").click()

Publish the Article::

    >>> browser.getLink('Publish').click()

    >>> 'Add To Cart' in browser.contents
    True

Make not salable::

    >>> browser.open('/article01/edit')
    >>> browser.getControl(name="form.widgets.ISalable.salable:list").value = False
    >>> browser.getControl(name="form.buttons.save").click()

    >>> 'Add To Cart' in browser.contents
    False

Make salable and Unmake Shopping Site:

    >>> browser.open('/article01/edit')
    >>> browser.getControl(name="form.widgets.ISalable.salable:list").value = True
    >>> browser.getControl(name="form.buttons.save").click()
    >>> browser.open('/')
    >>> browser.getLink('Unmake Shopping Site').click()
    >>> browser.open('/article01')

    >>> 'Add To Cart' in browser.contents
    False

Make Shopping Site once again::

    >>> browser.open('/')
    >>> browser.getLink('Make Shopping Site').click()


Cart should be empty::

    >>> browser.open('/@@cart')
    >>> 'Cart is empty' in browser.contents
    True

Add Article01 To Cart::

    >>> browser.open('/article01')
    >>> 'Add To Cart' in browser.contents
    True
    >>> browser.getControl(name="form.addtocart").click()

    # >>> portal['cart-container']['1']
    # <Container at /plone/cart-container/1>

Check cart::

    >>> browser.open('/@@cart')
    >>> print browser.bycss('.name')
    --- 1 ---
    <td class="name">
    <a href="http://nohost/plone/article01">Article01</a>
    </td>

Go to Cart Container and save next cart ID with existing cart ID::

    >>> browser.open('/cart-container/edit')

    >>> 'The cart ID is already in use.' in browser.contents
    False

    >>> browser.getControl(name="form.widgets.next_cart_id").value = '1'
    >>> browser.getControl(name="form.buttons.save").click()

    # >>> 'The cart ID is already in use.' in browser.contents
    # True

# Save with non-existing cart ID:

#     >>> browser.getControl(name="form.widgets.next_cart_id").value = '2'
#     >>> browser.getControl(name="form.buttons.save").click()

    # >>> 'The cart ID is already in use.' in browser.contents
    # False

Log out::

    >>> browser.getLink('Log out').click()

Log in as editor::

    >>> browser.login(editor, editor)

Go to portal::

    >>> browser.open('/')

    >>> 'Make Shopping Site' in browser.contents
    False
    >>> 'Unmake Shopping Site' in browser.contents
    False

Log out::

    >>> browser.getLink('Log out').click()

Log in as member1::

    >>> browser.login(member1, member1)

Go to Article::

    >>> browser.open('/article01')

Add To Cart::

    >>> browser.getControl(name="form.addtocart").click()

Log out::

    >>> browser.getLink('Log out').click()

# Log in as admin::

#     >>> browser.login(TEST_USER_NAME, TEST_USER_PASSWORD)

# Go to see Cart Container::

#     >>> browser.open('/cart-container/edit')
#     >>> 'value="3"' in browser.contents
#     True

#     >>> portal['cart-container']['2']
#     <Container at /plone/cart-container/2>

# Log out and log in as member1 again::

#     >>> browser.getLink('Log out').click()
#     >>> browser.login(member1, member1)

# Go to Article and add it again::

#     >>> browser.open('/article01')
#     >>> browser.getControl(name="form.addtocart").click()

#     >>> portal['cart-container']['3']
#     Traceback (most recent call last):
#     ...
#     KeyError: '3'

#     >>> portal['cart-container']['2']['1']
#     <Container at /plone/cart-container/2/1>

#     >>> portal['cart-container']['2']['2']
#     Traceback (most recent call last):
#     ...
#     KeyError: '2'

# Log out and log in as member2::

#     >>> browser.getLink('Log out').click()
#     >>> browser.login(member2, member2)

# Cart should be empty::

#     >>> browser.open('/@@cart')
#     >>> 'Cart is empty' in browser.contents
#     True

# Go to Article and add it::

#     >>> browser.open('/article01')
#     >>> browser.getControl(name="form.addtocart").click()

#     >>> portal['cart-container']['3']
#     <Container at /plone/cart-container/3>

# Log out and log in as member1 again::

#     >>> browser.getLink('Log out').click()
#     >>> browser.login(member1, member1)

# Go to Article and add it again::

#     >>> browser.open('/article01')
#     >>> browser.getControl(name="form.addtocart").click()

#     >>> portal['cart-container']['4']
#     Traceback (most recent call last):
#     ...
#     KeyError: '4'

# Log out, log in as adming and add Article01::

#     >>> browser.getLink('Log out').click()
#     >>> browser.login(TEST_USER_NAME, TEST_USER_PASSWORD)
#     >>> browser.open('/++add++collective.cart.core.Article')
#     >>> browser.getControl(name="form.widgets.IDublinCore.title").value = 'Article02'
#     >>> browser.getControl(name="form.widgets.IDublinCore.description").value = 'Description of Article02'
#     >>> browser.getControl(name="form.buttons.save").click()

# Publish the Article::

#     >>> browser.getLink('Publish').click()

# Log out, log in as member1 and add Article02 to Cart::

#     >>> browser.getLink('Log out').click()
#     >>> browser.login(member1, member1)
#     >>> browser.open('/article02')
#     >>> browser.getControl(name="form.addtocart").click()

# Check cart::

#     >>> browser.open('/@@cart')
#     >>> print browser.bycss('.name')
#     --- 1 ---
#     <td class="name">
#     <a href="http://nohost/plone/article01">Article01</a>
#     </td>
#     --- 2 ---
#     <td class="name">
#     <a href="http://nohost/plone/article02">Article02</a>
#     </td>

# Log out, log in as admin, remove Article02::

#     >>> browser.getLink('Log out').click()
#     >>> browser.login(TEST_USER_NAME, TEST_USER_PASSWORD)
#     >>> browser.open('/article02/delete_confirmation')
#     >>> browser.getControl('Delete').click()

#     >>> 'Article02 has been deleted.' in browser.contents
#     True

# Log out, log in as member1 and go to cart::

#     >>> browser.getLink('Log out').click()
#     >>> browser.login(member1, member1)
#     >>> browser.open('/@@cart')
#     >>> print browser.bycss('.name')
#     --- 1 ---
#     <td class="name">
#     <a href="http://nohost/plone/article01">Article01</a>
#     </td>
#     --- 2 ---
#     <td class="name">
#     Article02
#     </td>

#     >>> print browser.bycss('.remove')
#     --- 1 ---
#     <td class="remove">
#     <button class="standalone" name="form.delete.article" type="submit" value="1">Delete</button>
#     </td>
#     --- 2 ---
#     <td class="remove">
#     <button class="standalone" name="form.delete.article" type="submit" value="2">Delete</button>
#     </td>

# Delete Article02::

#     >>> browser.getControl(name="form.delete.article", index=1).click()
#     >>> print browser.bycss('.name')
#     --- 1 ---
#     <td class="name">
#     <a href="http://nohost/plone/article01">Article01</a>
#     </td>

# Delete Article01::

#     >>> browser.getControl(name="form.delete.article").click()

#     >>> print browser.bycss('.name')

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

#     >>> 'Cart is empty' in browser.contents
#     True

# Check Cart Container::

#     >>> browser.getLink('Log out').click()
#     >>> browser.login(TEST_USER_NAME, TEST_USER_PASSWORD)

#     >>> browser.open('/cart-container')
#     >>> print browser.bycss('#next-cart-id')
#     --- 1 ---
#     <div class="documentDescription" id="next-cart-id">The next cart ID: 4</div>

#     >>> print browser.bycss('#no-orders')
