Admin modifies personal preferences thru 'Users and groups'
---------------------------------------------------------------------

    >>> empty_marker = '--NOVALUE--'
    >>> def isEmptyMarker(v):
    ...     if len(v) != 1: return False
    ...     return v[0] == empty_marker

An admin can modify user preferences thru the @@user-preferences form in
Users and Groups config page.


So let's login as Plone admin:
    >>> self.browser.open('http://nohost/plone/')
    >>> self.browser.getLink('Log in').click()
    >>> self.browser.getControl('Login Name').value = 'admin'
    >>> self.browser.getControl('Password').value = 'secret'
    >>> self.browser.getControl('Log in').click()

Let's see if we can navigate to the user information form in Users and groups
    >>> self.browser.getLink('Site Setup').click()
    >>> self.browser.getLink('Users and Groups').click()
    >>> self.browser.getLink('(test_user_1_)').click()
    >>> self.browser.getLink('Personal Preferences').click()
    >>> self.browser.url
    'http://nohost/plone/@@user-preferences?userid=test_user_1_'

We have these controls in the form:

    >>> isEmptyMarker(self.browser.getControl('Wysiwyg editor').value)
    True
    >>> self.browser.getControl('Enable external editing').selected
    False
    >>> isEmptyMarker(self.browser.getControl('Language', index=0).value)
    True

The form should be using CSRF protection:

    >>> self.browser.getControl(name='_authenticator')
    <Control name='_authenticator' type='hidden'>


Modifying values
----------------

    >>> self.browser.getControl('Wysiwyg editor').value = ['TinyMCE']
    >>> self.browser.getControl('Enable external editing').selected = True
    >>> self.browser.getControl('Language', index=0).value = ['en']
    >>> self.browser.getControl('Save').click()
    >>> 'Changes saved' in self.browser.contents
    True

Verify that the settings have actually been
changed:

    >>> member = self.membership.getMemberById('test_user_1_')
    >>> marker = object()
    >>> member.getProperty('wysiwyg_editor', marker)
    'TinyMCE'
    >>> member.getProperty('ext_editor', marker)
    True
    >>> member.getProperty('language', marker)
    'en'

And that the form still has the according values:

    >>> self.browser.open("http://nohost/plone/@@user-preferences?userid=test_user_1_")
    >>> isEmptyMarker(self.browser.getControl('Wysiwyg editor').value)
    False
    >>> self.browser.getControl('Wysiwyg editor').value
    ['TinyMCE']
    >>> self.browser.getControl('Enable external editing').selected
    True
    >>> self.browser.getControl('Language', index=0).value
    ['en']


Clearing values
---------------

Check that empty or False values do get stored.

    >>> self.browser.getControl('Wysiwyg editor').value = [empty_marker]
    >>> self.browser.getControl('Enable external editing').selected = False
    >>> self.browser.getControl('Language', index=0).value = [empty_marker]
    >>> self.browser.getControl('Save').click()
    >>> 'Changes saved' in self.browser.contents
    True

Verify that the settings have actually been
changed:

    >>> member = self.membership.getMemberById('test_user_1_')
    >>> member.getProperty('wysiwyg_editor', marker)
    ''
    >>> member.getProperty('ext_editor', marker)
    False
    >>> member.getProperty('language', marker)
    ''

And that the form still has the according values:

    >>> self.browser.open("http://nohost/plone/@@user-preferences?userid=test_user_1_")
    >>> isEmptyMarker(self.browser.getControl('Wysiwyg editor').value)
    True
    >>> self.browser.getControl('Enable external editing').selected
    False
    >>> isEmptyMarker(self.browser.getControl('Language', index=0).value)
    True

Finally let's see if Cancel button still leaves us on selected user Preferences
form::

    >>> self.browser.getControl('Cancel').click()
    >>> 'Changes canceled.' in self.browser.contents
    True
    >>> '?userid=test_user_1_' in self.browser.url
    True
