Testing the personal information form
=====================================

TODO: Testing the portait image upload

Viewing the  personal information
---------------------------------

This is about the 'personal-information' view.

    >>> view_name = '@@personal-information'

Viewing user data shouldn't be possible for anonymous users:

    >>> self.browser.open("http://nohost/plone/" + view_name)
    >>> 'Login Name' in self.browser.contents
    True

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

Now we should be able to access the user data panel:

    >>> self.browser.open("http://nohost/plone/" + view_name)
    >>> 'Login Name' in self.browser.contents
    False
    >>> self.browser.url.endswith(view_name)
    True

We have these controls in the form:

    >>> self.browser.getControl(name='form.fullname').value
    ''
    >>> self.browser.getControl(name='form.email').value
    ''
    >>> self.browser.getControl(name='form.home_page').value
    ''
    >>> self.browser.getControl(name='form.description').value
    ''
    >>> self.browser.getControl(name='form.portrait').value

    >>> self.browser.getControl(name='form.pdelete').value
    False


Trying to save without changes
------------------------------

Now can we save this form without changes?

    >>> self.browser.getControl(name="form.actions.save").click()
    >>> 'Login Name' in self.browser.contents
    False
    >>> self.browser.url.endswith(view_name)
    True
    >>> self.browser.getControl(name="form.actions.save").click()
    >>> 'Required input is missing.' in self.browser.contents
    True

As we have a required field "email", which hasn't been pre-filled in this test,
we will get an error message. (In the real world, users would have an e-mail
address filled in.)


Modifying user data
-------------------

If we do set an e-mail address, we should be able to save the form.

    >>> full_name = 'Plone user'
    >>> self.browser.getControl(name='form.fullname').value = full_name

    >>> home_page = 'http://www.plone.org/'
    >>> self.browser.getControl(name='form.home_page').value = home_page

    >>> description = 'Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.'
    >>> self.browser.getControl(name='form.description').value = description

    >>> email_address = 'person@example.com'
    >>> self.browser.getControl(name='form.email').value = email_address

    >>> location = 'Somewhere'
    >>> self.browser.getControl(name='form.location').value = location

    >>> ## find out how we can a image in portait variable
    >>> #from StringIO import StringIO
    >>> #portrait = StringIO('GIF89aFooBar')
    >>> #control = self.browser.getControl(name='form.portrait')
    >>> #fileControl = control.mech_control
    >>> #fileControl.add_file(portrait, filename='plone_good.png')

    >>> #portrait = 'person@example.com'
    >>> #self.browser.getControl(name='form.portrait').value = portrait

    >>> self.browser.getControl(name="form.actions.save").click()
    >>> 'Required input is missing.' in self.browser.contents
    False
    >>> 'No changes made.' in self.browser.contents
    False
    >>> 'Changes saved.' in self.browser.contents
    True



We should be able to check that value for email address now is the same as what
we put in.

    >>> member = self.membership.getMemberById('test_user_1_')
    >>> fullname_value = member.getProperty('fullname','')
    >>> fullname_value == full_name
    True

    >>> home_page_value = member.getProperty('home_page','')
    >>> home_page_value == home_page
    True

    >>> description_value = member.getProperty('description','')
    >>> description_value == description
    True

    >>> email_value = member.getProperty('email','')
    >>> email_value == email_address
    True

    >>> location_value = member.getProperty('location','')
    >>> location_value == location
    True

    # >>> portrait_value = self.membership.getPersonalPortrait()
    # >>> portrait_value == portrait
    # True


Clearing user data
------------------

If we empty all non-required inputs, the corresponding fields should
be cleared, instead of keeping their old value

    >>> self.browser.getControl(name='form.fullname').value = ''
    >>> self.browser.getControl(name='form.home_page').value = ''
    >>> self.browser.getControl(name='form.description').value = ''
    >>> self.browser.getControl(name='form.location').value = ''
    >>> self.browser.getControl(name="form.actions.save").click()
    >>> 'Required input is missing.' in self.browser.contents
    False
    >>> 'No changes made.' in self.browser.contents
    False
    >>> 'Changes saved.' in self.browser.contents
    True

Check the values

    >>> member = self.membership.getMemberById('test_user_1_')
    >>> marker = object()
    >>> member.getProperty('fullname', marker)
    ''
    >>> member.getProperty('home_page', marker)
    ''
    >>> member.getProperty('description', marker)
    ''
    >>> member.getProperty('email', marker) == email_address
    True
    >>> member.getProperty('location', marker)
    ''

Set the full name again:

    >>> full_name = 'Plone user'
    >>> self.browser.getControl(name='form.fullname').value = full_name
    >>> self.browser.getControl(name="form.actions.save").click()
    >>> member = self.membership.getMemberById('test_user_1_')
    >>> member.getProperty('fullname', marker) == full_name
    True


Modifying other users's data
----------------------------

When trying to access the personal-information of the admin user
we still get our own data

    >>> self.browser.open('http://nohost/plone/' + view_name + '?userid=admin')
    >>> self.browser.getControl(name='form.fullname').value == full_name
    True
