;-*-Doctest-*-
==============
Control Panels
==============

Install another remember member type.

    >>> from Products.remember.tests.base import load_zcml_of_testing_profile
    >>> load_zcml_of_testing_profile()
    >>> self.addProfile('Products.remember:test')

Log in as a Manager::

    >>> from Testing.testbrowser import Browser
    >>> browser = Browser()
    >>> browser.handleErrors = False

    >>> from Products.remember.tests.base import mem_password
    >>> browser.open('http://nohost/plone/login_form')
    >>> browser.getControl('Login Name').value = 'admin_member'
    >>> browser.getControl('Password').value = mem_password
    >>> browser.getControl('Log in').click()
    >>> print browser.contents
    <!DOCTYPE html...
    <h1...>You are now logged in</h1>
    ...</html>

Open the users control panel::
  
    >>> browser.open('http://nohost/plone')
    >>> browser.getLink('Site Setup').click()
    >>> browser.getLink('Users and Groups').click()
    >>> users_url = browser.url

and click "Show all" users::

    >>> browser.getControl('Show all').click()
    >>> browser.getLink('blank_member')
    <Link text='...' url='http://nohost/plone/portal_memberdata/blank_member'>
    >>> browser.getLink('admin_member', index=1)
    <Link text='...' url='http://nohost/plone/portal_memberdata/admin_member'>
    >>> browser.getLink('portal_member')
    <Link text='...' url='http://nohost/plone/portal_memberdata/portal_member'>
    >>> browser.getLink('non_remember_member')
    <Link text='...' url='http://nohost/plone/@@user-information?userid=non_remember_member'>
    >>> browser.getLink('test_user_1_')
    <Link text='...' url='http://nohost/plone/portal_memberdata/test_user_1_'>

The links for remember and non-remember members work.

    >>> browser.getLink('portal_member').click()
    >>> print browser.contents
    <...
                Portal Member
    ...
                  <div class="field ArchetypesField-StringField"
                       id="archetypes-fieldname-id...

    >>> browser.open(users_url)
    >>> browser.getControl('Show all').click()
    >>> browser.getLink('non_remember_member').click()
    >>> 'Change personal information for non_remember_member' in browser.contents
    True

Searching for text in a member's full name will list only the matching
members.

    >>> browser.open(users_url)
    >>> browser.getControl(name="searchstring").value = 'Portal'
    >>> browser.getControl(name="form.button.Search").click()
    >>> browser.getLink('blank_member')
    Traceback (most recent call last):
    LinkNotFoundError
    >>> browser.getLink('admin_member', index=1)
    Traceback (most recent call last):
    LinkNotFoundError
    >>> browser.getLink('portal_member')
    <Link text='...' url='http://nohost/plone/portal_memberdata/portal_member'>
    >>> browser.getLink('non_remember_member')
    Traceback (most recent call last):
    LinkNotFoundError
    >>> browser.getLink('test_user_1_')
    Traceback (most recent call last):
    LinkNotFoundError

Non-remember users can be successfully deleted using the control panel.

    >>> browser.open(users_url)
    >>> browser.getControl('Show all').click()
    >>> browser.getControl(name="delete:list").getControl(
    ...     value='non_remember_member').selected = True
    >>> browser.getControl('Apply Changes').click()
    >>> print browser.contents
    <...
                <dd>Changes applied.</dd>
    ...
    >>> browser.getControl('Show all').click()
    >>> browser.getLink('non_remember_member')
    Traceback (most recent call last):
    LinkNotFoundError
    >>> portal.acl_users.getUserById('non_remember_member')

Disable setting the password.

    >>> from plone.app.controlpanel import security
    >>> sec = security.ISecuritySchema(portal)
    >>> sec.enable_user_pwd_choice = False

Clear the registration message sent out for the test member.

    >>> msg = self.portal.MailHost.pop()
    >>> len(self.portal.MailHost)
    0

The control panel supports adding multiple member types via a pulldown
menu.

    >>> browser.open(users_url)
    >>> browser.getControl(name='type_name').controls
    [<ItemControl name='type_name' type='select' optionValue='Member'
    selected=True>,
    <ItemControl name='type_name' type='select'
    optionValue='AlternateMember' selected=False>]
    >>> browser.getControl('Alternate Member').selected = True

A member can be added using the control panel and an email will be sent.

    >>> browser.getControl('Add New User').click()
    >>> try:
    ...     browser.getControl("User Name").value = 'foo'
    ... except LookupError: # BBB Plone 3
    ...     browser.getControl(name="id").value = 'foo'
    >>> try:
    ...     browser.getControl('Full Name').value = 'Foo Full Name'
    ... except LookupError: # BBB Plone 3
    ...     browser.getControl('Full name').value = 'Foo Full Name'
    >>> browser.getControl('E-mail').value = 'foo@foo.com'
    >>> browser.getControl('Register').click()
    >>> portal.portal_memberdata.foo.getPortalTypeName()
    'AlternateMember'

    >>> msg = portal.MailHost.pop().get_payload()
    >>> len(portal.MailHost)
    0
    >>> print msg
        Welcome Foo Full Name,
        Your ... account has been created.  Please activate it by visiting
        http://nohost/plone/passwordreset/...?userid=foo
        You must activate your account within ...

A member can also be added directly to the portal_memberdata folder
using portal_factory.  An email will be sent.

    >>> browser.open(portal.portal_memberdata.absolute_url())
    >>> browser.getLink(url='createObject?type_name=Member').click()
    >>> browser.url
    'http://nohost/plone/portal_memberdata/portal_factory/Member/.../edit'
    >>> try:
    ...     browser.getControl("User Name").value = 'bar'
    ... except LookupError: # BBB Plone 3
    ...     browser.getControl(name="id").value = 'bar'
    >>> try:
    ...     browser.getControl('Full Name').value = 'Bar Full Name'
    ... except LookupError: # BBB Plone 3
    ...     browser.getControl('Full name').value = 'Bar Full Name'
    >>> browser.getControl('E-mail').value = 'bar@bar.com'
    >>> browser.getControl('Save').click()
    >>> print browser.contents
    <...
                <dd>Changes saved.</dd>
    ...
    >>> portal.portal_workflow.getInfoFor(
    ...     portal.portal_memberdata.bar, 'review_state')
    'public'

    >>> msg = portal.MailHost.pop().get_payload()
    >>> len(portal.MailHost)
    0
    >>> print msg
        Welcome Bar Full Name,
        Your ... account has been created.  Please activate it by visiting
        http://nohost/plone/passwordreset/...?userid=bar
        You must activate your account within 168
        hours, so before ...
