Tests now depend on the collective.chimpdrill layer.

Fixes the following error:

  Set up collective.salesforce.fundraising.testing.CollectiveSalesforceFundraisingLayer
Traceback (most recent call last):
  File "/opt/src/eggs/zope.testing-3.9.7-py2.7.egg/zope/testing/testrunner/runner.py",
line 366, in run_layer
    setup_layer(options, layer, setup_layers)
  File "/opt/src/eggs/zope.testing-3.9.7-py2.7.egg/zope/testing/testrunner/runner.py",
line 639, in setup_layer
    setup_layer(options, base, setup_layers)
  File "/opt/src/eggs/zope.testing-3.9.7-py2.7.egg/zope/testing/testrunner/runner.py",
line 643, in setup_layer
    layer.setUp()
  File "/opt/src/eggs/plone.app.testing-4.2.2-py2.7.egg/plone/app/testing/helpers.py",
line 339, in setUp
    self.setUpZope(portal.getPhysicalRoot(), configurationContext)
  File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/testing.py",
line 16, in setUpZope
    self.loadZCML(package=collective.salesforce.fundraising)
  File "/opt/src/eggs/plone.app.testing-4.2.2-py2.7.egg/plone/app/testing/helpers.py",
line 393, in loadZCML
    return xmlconfig.file(name, **kw)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py",
line 649, in file
    include(context, name, package)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py",
line 548, in include
    processxmlfile(f, context)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py",
line 380, in processxmlfile
    parser.parse(src)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 352, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py",
line 359, in endElementNS
    self.context.end()
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py",
line 558, in end
    self.stack.pop().finish()
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py",
line 706, in finish
    actions = self.handler(context, **args)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py",
line 548, in include
    processxmlfile(f, context)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py",
line 380, in processxmlfile
    parser.parse(src)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 352, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py",
line 359, in endElementNS
    self.context.end()
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py",
line 558, in end
    self.stack.pop().finish()
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py",
line 705, in finish
    args = toargs(context, *self.argdata)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py",
line 1397, in toargs
    args[str(name)] = field.fromUnicode(s)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/fields.py",
line 137, in fromUnicode
    value = self.context.resolve(name)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py",
line 179, in resolve
    mod = __import__(mname, *_import_chickens)
  File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/portlets/campaign_status.py",
line 12, in <module>
    from collective.salesforce.fundraising.fundraising_campaign import
IFundraisingCampaignPage
  File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/fundraising_campaign.py",
line 87, in <module>
    class IFundraisingCampaign(model.Schema, IImageScaleTraversable):
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/model.py",
line 66, in __init__
    self._SchemaClass_finalize()
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/model.py",
line 73, in _SchemaClass_finalize
    adapter()
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/directives.py",
line 161, in __call__
    model = loadFile(filename)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/__init__.py",
line 24, in loadFile
    parsed_model = parser.parse(path, policy=policy)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/parser.py",
line 70, in parse
    return _parse(source, policy)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/parser.py",
line 144, in _parse
    readField(fieldElement, schemaAttributes, fieldElements, baseFields)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/parser.py",
line 106, in readField
    raise ValueError("Field type %s specified for field %s is not
supported" % (fieldType, fieldName, ))
ZopeXMLConfigurationError: File
"/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/configure.zcml",
line 106.2-106.33
    ZopeXMLConfigurationError: File
"/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/portlets/configure.zcml",
line 23.2-32.8
    SupermodelParseError: Field type
plone.namedfile.field.NamedBlobImage specified for field image is not
supported
  File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/models/fundraising_campaign.xml",
line 15
    <field name="image" type="plone.namedfile.field.NamedBlobImage">
Fix a circular import in the supermodel parsing.

Fixes the following error:

  Set up collective.salesforce.fundraising.testing.CollectiveSalesforceFundraisingLayer Traceback (most recent call last):
  File "/opt/src/eggs/zope.testing-3.9.7-py2.7.egg/zope/testing/testrunner/runner.py", line 366, in run_layer
    setup_layer(options, layer, setup_layers)
  File "/opt/src/eggs/zope.testing-3.9.7-py2.7.egg/zope/testing/testrunner/runner.py", line 639, in setup_layer
    setup_layer(options, base, setup_layers)
  File "/opt/src/eggs/zope.testing-3.9.7-py2.7.egg/zope/testing/testrunner/runner.py", line 644, in setup_layer
    layer.setUp()
  File "/opt/src/eggs/plone.app.testing-4.2.2-py2.7.egg/plone/app/testing/helpers.py", line 339, in setUp
    self.setUpZope(portal.getPhysicalRoot(), configurationContext)
  File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/testing.py", line 16, in setUpZope
    self.loadZCML(package=collective.salesforce.fundraising)
  File "/opt/src/eggs/plone.app.testing-4.2.2-py2.7.egg/plone/app/testing/helpers.py", line 393, in loadZCML
    return xmlconfig.file(name, **kw)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 649, in file
    include(context, name, package)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 548, in include
    processxmlfile(f, context)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 380, in processxmlfile
    parser.parse(src)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 352, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 359, in endElementNS
    self.context.end()
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 558, in end
    self.stack.pop().finish()
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 706, in finish
    actions = self.handler(context, **args)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 548, in include
    processxmlfile(f, context)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 380, in processxmlfile
    parser.parse(src)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/lib/python2.7/xml/sax/expatreader.py", line 352, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 359, in endElementNS
    self.context.end()
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 558, in end
    self.stack.pop().finish()
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 705, in finish
    args = toargs(context, *self.argdata)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 1397, in toargs
    args[str(name)] = field.fromUnicode(s)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/fields.py", line 137, in fromUnicode
    value = self.context.resolve(name)
  File "/opt/src/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 179, in resolve
    mod = __import__(mname, *_import_chickens)
  File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/portlets/campaign_status.py", line 12, in <module>
    from collective.salesforce.fundraising.fundraising_campaign import IFundraisingCampaignPage
  File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/fundraising_campaign.py", line 87, in <module>
    class IFundraisingCampaign(model.Schema, IImageScaleTraversable):
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/model.py", line 66, in __init__
    self._SchemaClass_finalize()
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/model.py", line 73, in _SchemaClass_finalize
    adapter()
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/directives.py", line 161, in __call__
    model = loadFile(filename)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/__init__.py", line 24, in loadFile
    parsed_model = parser.parse(path, policy=policy)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/parser.py", line 70, in parse
    return _parse(source, policy)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/parser.py", line 174, in _parse
    parsed_fieldName = readField(fieldElement, schemaAttributes, fieldElements, baseFields)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/parser.py", line 108, in readField
    field = handler.read(fieldElement)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/exportimport.py", line 98, in read
    self.readAttribute(attribute_element, attributeField)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/exportimport.py", line 169, in readAttribute
    return elementToValue(attributeField, element)
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/utils.py", line 124, in elementToValue
    value = converter.fromUnicode(unicode(text))
  File "/opt/src/eggs/plone.supermodel-1.2.2-py2.7.egg/plone/supermodel/converters.py", line 115, in fromUnicode
    obj = resolve(value)
  File "/opt/src/eggs/zope.dottedname-3.4.6-py2.7.egg/zope/dottedname/resolve.py", line 39, in resolve
    found = getattr(found, n)
ZopeXMLConfigurationError: File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/configure.zcml", line 106.2-106.33
    ZopeXMLConfigurationError: File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/portlets/configure.zcml", line 23.2-32.8
    SupermodelParseError: 'module' object has no attribute 'fundraising_campaign'
  File "/opt/src/collective.salesforce.fundraising/collective/salesforce/fundraising/models/fundraising_campaign.xml", line 58
    <source>collective.salesforce.fundraising.fundraising_campaign.availableDonationForms</source>