Relative date widget
====================

Implementation of ATContentTypes date criteria for facted navigation usage.

Imports
-------

    >>> from DateTime import DateTime
    >>> from zope.component import getMultiAdapter
    >>> from Products.CMFCore.utils import getToolByName
    >>> from eea.facetednavigation.interfaces import ICriteria

Set up
------

    >>> self.loginAsPortalOwner()
    >>> fid = portal.invokeFactory('Folder', 'sandbox-widgets')
    >>> sandbox = portal._getOb(fid)
    >>> sandbox.setTitle('Faceted navigation folder test')
    >>> request = sandbox.REQUEST

    >>> subtyper = getMultiAdapter((sandbox, request), name=u'faceted_subtyper')
    >>> subtyper.enable()


    >>> putils = getToolByName(sandbox, 'plone_utils')
    >>> handler = getMultiAdapter((sandbox, request), name=u'faceted_configure')
    >>> query = getMultiAdapter((sandbox, request), name=u'faceted_query')

    >>> today = DateTime()

Cleanup default widgets
-----------------------

    >>> cids = ICriteria(sandbox).keys()

Default widgets

    >>> cids
    [...'c1',...]

    >>> for cid in cids:
    ...     ICriteria(sandbox).delete(cid)
    >>> ICriteria(sandbox).keys()
    []

Add hidden text widget
----------------------

    >>> _ = handler(addWidget_button=True, wtype='text')
    >>> _ = handler(updateCriterion_button='Save', cid='c0',
    ...     c0_default='Relative date', c0_index='Title', c0_hidden=True)

Add test folders
----------------
Past

    >>> past = sandbox.invokeFactory('Folder', 'past', title='Relative date widget 1')
    >>> past = sandbox._getOb(past)
    >>> past.setLanguage('en')
    >>> putils.editMetadata(past, effective_date=today - 365)

3 days old

    >>> past_n = sandbox.invokeFactory('Folder', 'past_n', title='Relative date widget 2')
    >>> past_n = sandbox._getOb(past_n)
    >>> past_n.setLanguage('en')
    >>> putils.editMetadata(past_n, effective_date=today - 3)

Present

    >>> now = sandbox.invokeFactory('Folder', 'now', title='Relative date widget 3')
    >>> now = sandbox._getOb(now)
    >>> now.setLanguage('en')
    >>> putils.editMetadata(now, effective_date=today)

3 days in the future

    >>> future_n = sandbox.invokeFactory('Folder', 'future_n', title='Relative date widget 4')
    >>> future_n = sandbox._getOb(future_n)
    >>> future_n.setLanguage('en')
    >>> putils.editMetadata(future_n, effective_date=today + 3)

Future

    >>> future = sandbox.invokeFactory('Folder', 'future', title='Relative date widget 3')
    >>> future = sandbox._getOb(future)
    >>> future.setLanguage('en')
    >>> putils.editMetadata(future, effective_date=today + 365)

Empty query
-----------

    >>> brains = query.query(batch=False)
    >>> len(brains)
    5

Add widget
----------

    >>> _ = handler(wtype='date', addWidget_button=True)


Get some results (default set)
------------------------------

All before now

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=True,
    ...     c1_index='effective', c1_default='now-past=>now-0')
    >>> brains = query.query()
    >>> [brain.getId for brain in brains]
    ['now', 'past_n', 'past']

All before last week

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=True,
    ...     c1_index='effective', c1_default='now-past=>now-7')
    >>> brains = query.query()
    >>> [brain.getId for brain in brains]
    ['past']


All before yesterday

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=True,
    ...     c1_index='effective', c1_default='now-past=>now-1')
    >>> brains = query.query()
    >>> [brain.getId for brain in brains]
    ['past_n', 'past']

Last week

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=True,
    ...     c1_index='effective', c1_default='now-7=>now-0')
    >>> brains = query.query()
    >>> [brain.getId for brain in brains]
    ['now', 'past_n']

Today

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=True,
    ...     c1_index='effective', c1_default='now-0=>now-0')
    >>> brains = query.query()
    >>> [brain.getId for brain in brains]
    ['now']

Next week

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=True,
    ...     c1_index='effective', c1_default='now-0=>now+7')
    >>> brains = query.query()
    >>> [brain.getId for brain in brains]
    ['future_n', 'now']

All after next week

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=True,
    ...     c1_index='effective', c1_default='now+7=>now+future')
    >>> brains = query.query()
    >>> [brain.getId for brain in brains]
    ['future']

All after now

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=True,
    ...     c1_index='effective', c1_default='now-0=>now+future')
    >>> brains = query.query()
    >>> [brain.getId for brain in brains]
    ['future', 'future_n', 'now']

Get some results (no default)
------------------------------

    >>> _ = handler(updateCriterion_button='Save', cid='c1', c1_hidden=False,
    ...     c1_index='effective')

All before now

    >>> brains = query.query(c1=['now-past', 'now-0'])
    >>> [brain.getId for brain in brains]
    ['now', 'past_n', 'past']

All before last week

    >>> brains = query.query(c1=['now-past', 'now-7'])
    >>> [brain.getId for brain in brains]
    ['past']


All before yesterday

    >>> brains = query.query(c1=['now-past', 'now-1'])
    >>> [brain.getId for brain in brains]
    ['past_n', 'past']

Last week

    >>> brains = query.query(c1=['now-7', 'now-0'])
    >>> [brain.getId for brain in brains]
    ['now', 'past_n']

Today

    >>> brains = query.query(c1=['now-0', 'now-0'])
    >>> [brain.getId for brain in brains]
    ['now']

Next week

    >>> brains = query.query(c1=['now-0', 'now+7'])
    >>> [brain.getId for brain in brains]
    ['future_n', 'now']

All after next week

    >>> brains = query.query(c1=['now+7', 'now+future'])
    >>> [brain.getId for brain in brains]
    ['future']

All after now

    >>> brains = query.query(c1=['now-0', 'now+future'])
    >>> [brain.getId for brain in brains]
    ['future', 'future_n', 'now']
