Dexterity Updater
=================


Globals:

    >>> app = layer.get('app')
    >>> portal = layer.get('portal')
    >>> request = layer.get('request')

Do some imports

    >>> from plone import api
    >>> from collective.transmogrifier.meta import registerConfig
    >>> from collective.transmogrifier.transmogrifier import Transmogrifier
    >>> from DateTime import DateTime
    >>> from plone.app.dexterity.behaviors.metadata import IBasic
    >>> from transmogrify.dexterity.testing import zptlogo
    >>> from transmogrify.dexterity.testing import zptlogo_converted

Create object

    >>> api.content.create(portal, 'TransmogrifyDexterityFTI', 'existent')
    <Container at /plone/existent>

Run transmogrifier pipeline with default settings (pipeline in tests.cfg)

    >>> transmogrifier = Transmogrifier(portal)
    >>> output = transmogrifier(u'transmogrify.dexterity.testconfiguration')

check the generated and updated objects

    >>> spam = portal.get('spam')
    >>> spam
    <Container at ...>
    >>> two = portal.get('two')

check already existing id

    >>> portal.get('existent')
    <Container at /plone/existent>

Standard schema field values:

    >>> spam.foo
    'one value'

Fields from a behavior:

    >>> IBasic(spam).title
    'Spam'
    >>> IBasic(spam).description
    'Lorem Ipsum bla bla!'

NameFileFields:

Values from a dict:
    >>> spam.test_file
    <plone.namedfile.file.NamedFile object at ...>
    >>> spam.test_file.filename
    'zptlogo.gif'
    >>> spam.test_file.data == zptlogo_converted
    True

get the filename in a seperated value from the pipeline:
    >>> two.test_file
    <plone.namedfile.file.NamedFile object at ...>
    >>> two.test_file.filename
    'testlogo.gif'
    >>> two.test_file.data == zptlogo_converted
    True

empty default value is of type unicode:

    >>> two.description
    ''

DateFields:

    >>> spam.test_date
    datetime.date(2010, 10, 12)

    >>> two.test_date
    datetime.date(2010, 1, 1)

DatetimeFields:

    >>> spam.test_datetime
    datetime.datetime(2010, 10, 12, 17, 59, 59)

    >>> two.test_datetime
    datetime.datetime(2010, 1, 1, 17, 59, 59)

Even types that does not have the plone.dublincore behavior must have the
DublinCore fields populated:

    >>> behaviors = portal.portal_types['TransmogrifyDexterityFTI'].behaviors
    >>> not any(x in behaviors for x in ['plone.app.dexterity.behaviors.metadata.IDublinCore', 'plone.dublincore'])
    True
    >>> spam.creators
    ('user1',)
    >>> spam.effective_date
    DateTime('2020/07/10 10:24:00 UTC')
    >>> spam.language
    'en'
    >>> spam.contributors
    ('user2',)
    >>> spam.subject
    ('subject1', 'subject2')


Won't touch already existing values

    >>> transmogrifier = Transmogrifier(portal)
    >>> output = transmogrifier(u'transmogrify.dexterity.testconfiguration')
    >>> transmogrifier = Transmogrifier(portal)
    >>> output = transmogrifier(u'transmogrify.dexterity.testconfiguration', definitions={
    ...     'source-content': 'onlytitle',
    ... })
    >>> spam = portal.get('spam')
    >>> IBasic(spam).title
    'Spammety spam'
    >>> spam.foo
    'one value'
