============
Adding tests
============

ObjectManagerNameChooser
------------------------

First we need to import and setup some prerequisites:

  >>> from zope.app.container.interfaces import INameChooser
  >>> from Products.Five.tests.products.FiveTest.helpers import \
  ...     manage_addFiveTraversableFolder

  >>> manage_addFiveTraversableFolder(self.folder, 'testoid', 'Testoid')
  >>> chooser = INameChooser(self.folder)

Now we can start.  ``INameChooser`` defines a ``checkName()`` method
that checks whether a given name is valid in the container or not.
Under the hood, ``ObjectManagerNameChooser`` calls ``_checkId()`` of
the object manager.  Valid names/ids are those that aren't in use yet
and don't contain invalid characters.

  >>> chooser.checkName('abc', object())

  >>> chooser.checkName('testoid', object())
  Traceback (most recent call last):
  ...
  UserError: The id "testoid" is invalid - it is already in use.

  >>> chooser.checkName('slash/slash', object())
  Traceback (most recent call last):
  ...
  UserError: The id "slash/slash" contains characters illegal in URLs.

``INameChooser`` also promises us a ``chooseName()`` method that
chooses a name for us in case we don't have one or that chooses a
different name in case the one we chose was invalid.

  >>> chooser.chooseName('', self.folder.testoid)
  'FiveTraversableFolder'

  >>> chooser.chooseName('abc', self.folder.testoid)
  'abc'

  >>> chooser.chooseName('testoid', self.folder.testoid)
  'testoid-1'

Of course, if we start out with something bad, it isn't going to
become good automagically:

  >>> chooser.chooseName('slash/slash', object())
  Traceback (most recent call last):
  ...
  UserError: The id "slash/slash" contains characters illegal in URLs.
