======================
 Project Listing View
======================

first, load our component architecture and utils::

    >>> from Products.ATContentTypes.z3.interfaces import IATBTreeFolder
    >>> from Products.Five.utilities.marker import mark
    >>> try:
    ...     from zope.publisher.interfaces.browser import IDefaultBrowserLayer
    ... except:
    ...     from zope.publisher.interfaces.browser import IBrowserRequest as IDefaultBrowserLayer

let's setup some stubs::

    >>> mark(self.folder, IATBTreeFolder)
    >>> mark(self.folder.REQUEST, IDefaultBrowserLayer)
    >>> tfolder = getattr(self.folder, self.folder.invokeFactory('Folder', id='testoid'))
    >>> from Products.OpenPlans.Extensions.Install import createIndexes
    >>> from cStringIO import StringIO
    >>> createIndexes(self.portal, StringIO())
    >>> tfolder.project_policy = 'open_policy'
    >>> tfolder.portal_type = 'OpenProject'
    >>> cat = self.portal.portal_catalog
    >>> cat.catalog_object(tfolder, '/'.join(tfolder.getPhysicalPath()), idxs=['project_policy'])
    >>> from projectlisting import ProjectListingView
    >>> view = ProjectListingView(self.folder, self.folder.REQUEST)
    >>> len(view.getProjects())
    1

    >>> tfolder.project_policy = 'closed_policy'
    >>> cat.catalog_object(tfolder, '/'.join(tfolder.getPhysicalPath()), idxs=['project_policy'])
    >>> len(view.getProjects())
    0
