Archetypes edit forms
---------------------

Here we want to test the standard edit view for Archetypes objects.

Let's set up a test browser:

  >>> from plone.testing.z2 import Browser
  >>> portal = layer['portal']
  >>> browser = Browser(layer['app'])
  >>> browser.handleErrors = False
  >>> browser.open('%s/login' % portal.absolute_url())

First, we need to log in.

  >>> from plone.app.testing import TEST_USER_NAME
  >>> from plone.app.testing import TEST_USER_PASSWORD
  >>> browser.getControl('Login Name').value = TEST_USER_NAME
  >>> browser.getControl('Password').value = TEST_USER_PASSWORD
  >>> browser.getControl('Log in').click()

Field validation
----------------

Let's add a new document and verify that required fields are actually
required -- across schemata.

  >>> from plone.app.testing import TEST_USER_ID
  >>> folder = portal.portal_membership.getHomeFolder(TEST_USER_ID)
  >>> id = folder.invokeFactory(id='document', type_name='Document')
  >>> document = folder[id]
  >>> document.setTitle('Test document')
  
  >>> url = document.absolute_url()
  >>> from transaction import commit
  >>> commit()

We'll try and set the title (a required field) to the empty string:
  
  >>> document.Schema().getField('title').required
  1
  >>> browser.open(url)
  >>> browser.getLink('Edit').click()
  >>> browser.getControl('Title').value = ''
  >>> browser.getControl('Save').click()

We're not allowed to do so:
  
  >>> document.title_or_id()
  'Test document'

What if title was in a different schemata? This is interesting to examine
since the default edit view now includes fields from all schematas and
we want to make sure all of them are validated.

  >>> schema = document.__class__.schema
  >>> previous_schemata = schema['title'].schemata
  >>> schema['title'].schemata = 'categorization'

  >>> document.Schema().getField('title').schemata
  'categorization'
  >>> browser.open(url)
  >>> browser.getLink('Edit').click()
  >>> browser.getControl('Title').value = ''
  >>> browser.getControl('Save').click()
  >>> document.title_or_id()
  'Test document'

  >>> schema['title'].schemata = previous_schemata


Buttons name verification
----------------

Let's verify that the buttons have the correct name:
  
  >>> browser.open(url)
  >>> browser.getLink('Edit').click()
  >>> browser.getControl('Save').name
  'form.button.save'
  
  >>> browser.getControl('Cancel').name
  'form.button.cancel'
  
Now to see the previous and next buttons, we need to make the
document provide Products.Archetypes.interfaces.IMultiPageSchema
and change the schemata of one of its fields

  >>> from Products.Archetypes.interfaces import IMultiPageSchema
  >>> from Products.Five.utilities import marker
  >>> from zope import interface
  >>> IMultiPageSchema.providedBy(document)
  False
  >>> interface.alsoProvides(document, IMultiPageSchema)

  >>> schema = document.__class__.schema
  >>> previous_schemata = schema['text'].schemata
  >>> schema['text'].schemata = 'someschemata'

  >>> document.Schema().getField('text').schemata
  'someschemata'
  >>> commit()
  
  >>> browser.open(url)
  >>> browser.getLink('Edit').click()
  >>> browser.getControl('Next').name
  'form.button.next'
  
  >>> browser.getLink('someschemata').click()
  >>> browser.getControl('Previous').name
  'form.button.previous'

  >>> marker.erase(document, IMultiPageSchema)
  >>> IMultiPageSchema.providedBy(document)
  False
  >>> schema['text'].schemata = previous_schemata
