;-*-Doctest-*-
==============
Password Reset
==============

Allow self registration and disable setting the password.

    >>> from plone.app.controlpanel import security
    >>> sec = security.ISecuritySchema(portal)
    >>> sec.enable_self_reg = True
    >>> 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

Open a browser.

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

Register a new member.

    >>> browser.open(portal.absolute_url())
    >>> browser.getLink('Register').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()
    >>> print browser.contents
    <...
    <p>You have been registered as a member.</p>...

An email, and only one email, has been sent to the new member with a
reset link.

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

Visit the reset link and set the password.

    >>> import re
    >>> reset_link = re.search(r'(http://.*)', msg).group()

    >>> from Products.PloneTestCase import ptc
    >>> browser.open(reset_link)
    >>> browser.getControl(name="userid").value = 'foo'
    >>> browser.getControl(
    ...     'New password').value = ptc.default_password
    >>> browser.getControl(
    ...     name="password2").value = ptc.default_password
    >>> browser.getControl('Set my password').click()
    >>> print browser.contents
    <...
            Your password has been set successfully. You may now log in with your
            new password...

Log in using the new password.

    >>> browser.open(portal.absolute_url())
    >>> browser.getLink('Log in').click()
    >>> browser.getControl('Login Name').value = 'foo'
    >>> browser.getControl(
    ...     'Password').value = ptc.default_password
    >>> browser.getControl('Log in').click()
    >>> print browser.contents
    <...
    ...You are now logged in...

The password for a non-remember user can also be reset.

    >>> user = portal.acl_users.getUserById('non_remember_member')
    >>> user.setProperties(email='non_remember_member@nohost.com')

    >>> browser.getLink('Log out').click()
    >>> browser.getLink('Log in').click()
    >>> browser.getLink('we can send you a new one').click()
    >>> browser.getControl(name="userid").value = 'non_remember_member'
    >>> browser.getControl('Start password reset').click()

    >>> msg = portal.MailHost.pop().get_payload()
    >>> len(portal.MailHost)
    0
    >>> reset_link = re.search(r'(http://.*)', msg).group()

    >>> browser.open(reset_link)
    >>> browser.getControl(name="userid").value = 'non_remember_member'
    >>> browser.getControl(
    ...     'New password').value = ptc.default_password
    >>> browser.getControl(
    ...     name="password2").value = ptc.default_password
    >>> browser.getControl('Set my password').click()
    >>> print browser.contents
    <...
            Your password has been set successfully. You may now log in with your
            new password...

    >>> browser.open(portal.absolute_url())
    >>> browser.getLink('Log in').click()
    >>> browser.getControl('Login Name').value = 'non_remember_member'
    >>> browser.getControl(
    ...     'Password').value = ptc.default_password
    >>> browser.getControl('Log in').click()
    >>> print browser.contents
    <...
    ...You are now logged in...
