source: products/quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/tests/testBlackoutList.py @ 3510

Last change on this file since 3510 was 3510, checked in by potar, 12 years ago

Merged sitemap_date branch into trunk

  • Property svn:eol-style set to native
File size: 7.0 KB
RevLine 
[2909]1#
2# Tests related to general Sitemap type.
3#
[3163]4from quintagroup.plonegooglesitemaps.tests.base import TestCase
5import unittest
6
[2911]7from types import ListType, TupleType
[2939]8from zope.component import queryMultiAdapter
[2909]9
[2911]10from Products.CMFPlone.utils import _createObjectByType
[2939]11from quintagroup.plonegooglesitemaps.interfaces import IBlackoutFilter
[2909]12
13
[2939]14class TestBOFilters(TestCase):
[2909]15
[2939]16    def testDefaultId(self):
17        idfilter = queryMultiAdapter((self.portal, self.app.REQUEST),
[3510]18                                     IBlackoutFilter, name="id")
[2939]19        self.assertTrue(idfilter is not None,
[3510]20                        "Not registered default 'id' IBlackoutFilter")
[2909]21
[2939]22    def testDefaultPath(self):
23        pathfilter = queryMultiAdapter((self.portal, self.app.REQUEST),
[3510]24                                       IBlackoutFilter, name="path")
[2939]25        self.assertTrue(pathfilter is not None,
[3510]26                        "Not registered default 'path' IBlackoutFilter")
[2909]27
28
[2917]29class TestFilterMixin(TestCase):
[2915]30
[2911]31    def afterSetUp(self):
[2917]32        super(TestFilterMixin, self).afterSetUp()
33        self.createTestContent()
[3152]34        self.sm = _createObjectByType('Sitemap', self.portal,
35                                      id='google-sitemaps')
[2925]36        self.req = self.app.REQUEST
[3152]37        self.catres = self.portal.portal_catalog(portal_type=["Document", ])
[2911]38        self.logout()
39
[2917]40    def createTestContent(self):
41        # Add testing content to portal
42        for cont in [self.portal, self.folder]:
[3152]43            for i in range(1, 4):
[2917]44                doc = _createObjectByType('Document', cont, id='doc%i' % i)
45                doc.edit(text_format='plain', text='hello world %i' % i)
46                self.workflow.doActionFor(doc, 'publish')
47
48
49class TestDefaultFilters(TestFilterMixin):
50
[2925]51    def getPreparedLists(self, fname, fargs):
[3152]52        fengine = queryMultiAdapter((self.sm, self.req), IBlackoutFilter,
53                                    name=fname)
[2939]54        filtered = [f.getPath() for f in fengine.filterOut(self.catres, fargs)]
[2911]55        catpaths = [c.getPath() for c in self.catres]
[2925]56        return catpaths, filtered
[2917]57
58    def testIdFilter(self):
[2940]59        catpaths, filtered = self.getPreparedLists("id", "doc1")
[2911]60        self.assertTrue(type(filtered) in [ListType, TupleType],
[3510]61                        'Object type, returned by filteredOut method'
62                        ' of "id" filter '
63                        'not list nor tuple')
[2925]64        excluded = ["/%s/doc1" % self.portal.absolute_url(1),
65                    "/%s/doc1" % self.folder.absolute_url(1)]
66        self.assertTrue(
[3152]67            set(catpaths) - set(filtered) == set(excluded),
[3510]68            'Wrong filtered-out by "id" filter:\nsrc %s\nres %s\nexcluded %s'
[3152]69            % (catpaths, filtered, excluded))
[2911]70
[2925]71    def testAbsolutePathFilter(self):
[2940]72        catpaths, filtered = self.getPreparedLists("path", "/doc1")
[2911]73        self.assertTrue(type(filtered) in [ListType, TupleType],
[3510]74                        'Object type, returned by filteredOut method'
75                        ' of "path" filter '
76                        'not list nor tuple')
[2925]77        excluded = ["/%s/doc1" % self.portal.absolute_url(1)]
78        self.assertTrue(
[3152]79            set(catpaths) - set(filtered) == set(excluded),
[3510]80            'Wrong filtered-out by "path" filter:\nsrc %s\nres %s\nexcluded '
[3152]81            '%s' % (catpaths, filtered, excluded))
[2911]82
[2921]83    def testRelativePathFilter(self):
[3152]84        self.sm = _createObjectByType('Sitemap', self.folder,
85                                      id='google-sitemaps')
[2940]86        catpaths, filtered = self.getPreparedLists("path", "./doc1")
[2919]87        self.assertTrue(type(filtered) in [ListType, TupleType],
[3510]88                        'Object type, returned by filteredOut method'
89                        ' of "path" utility '
90                        'not list nor tuple')
[2925]91        excluded = ["/%s/doc1" % self.folder.absolute_url(1)]
92        self.assertTrue(
[3152]93            set(catpaths) - set(filtered) == set(excluded),
[3510]94            'Wrong filtered-out by "path" filter:\nsrc %s\nres %s\nexcluded '
[3152]95            '%s' % (catpaths, filtered, excluded))
[2919]96
97
[2918]98class TestBlacklistFormProcessing(TestFilterMixin):
[2915]99
100    def afterSetUp(self):
[2919]101        super(TestBlacklistFormProcessing, self).afterSetUp()
[2917]102        self.loginAsPortalOwner()
[3152]103        self.smview = queryMultiAdapter((self.sm, self.app.REQUEST),
104                                        name="sitemap.xml")
[2915]105
[2925]106    def getPreparedLists(self, bl, fargs):
[3152]107        self.sm.edit(blackout_list=[bl, ])
[2915]108        filtered = [f['url'] for f in self.smview.results()]
109        catpaths = [c.getURL() for c in self.catres]
[2925]110        return catpaths, filtered
[2917]111
112    def testGetNamedFilterUtility(self):
[2925]113        catpaths, filtered = self.getPreparedLists("path:/doc1", "/plone/doc1")
[3510]114        excluded = ["%s/doc1" % self.portal.absolute_url(),
115                    "%s/front-page" % self.portal.absolute_url()]
[3152]116        self.assertTrue(set(catpaths) - set(filtered) == set(excluded),
[3510]117                        'Wrong filtered-out by'
118                        ' "id" filter:\nsrc %s\nres %s\nexcluded %s'
119                        % (catpaths, filtered, excluded))
[2915]120
121    def testDefaultFilterUtility(self):
[2925]122        catpaths, filtered = self.getPreparedLists("id:doc1", "doc1")
123        excluded = ["%s/doc1" % self.portal.absolute_url(),
[3510]124                    "%s/front-page" % self.portal.absolute_url(),
[2925]125                    "%s/doc1" % self.folder.absolute_url()]
[3152]126        self.assertTrue(set(catpaths) - set(filtered) == set(excluded),
[3510]127                        'Wrong filtered-out by "id" '
128                        'filter:\nsrc %s\nres %s\nexcluded %s'
129                        % (catpaths, filtered, excluded))
[2925]130        # Now check is output of unnamed filter samed to named one.
[3152]131        self.sm.edit(blackout_list=["doc1", ])
[2925]132        filtered_dflt = [f['url'] for f in self.smview.results()]
133        map(lambda l: l.sort(), (filtered, filtered_dflt))
134        self.assertTrue(filtered == filtered_dflt,
[3510]135                        'Output of named "id" filter '
136                        'is not same to unnamed one:\n'
137                        'id-named: %s\nunnamed: %s'
138                        % (filtered, filtered_dflt))
[2915]139
[2941]140    # def testGetCorrectFilterName(self):
[3163]141    #     from zope import component
[2941]142    #     call_names = []
143    #     origQMA = component._api.queryMultiAdapter
144    #     def patchQMA(objects, interface=Interface, name=u'', context=None):
145    #         call_names.append(name)
146    #         origQMA(objects, interface=interface, name=name, context=context)
147    #     component.queryMutliAdapter = patchQMA
148    #     self.sm.edit(blackout_list="FooFilterName:arg1:arg2:doc1")
149    #     self.smview.results()
[3152]150    #     self.assertTrue("FooFilterName" in call_names, "Wrong filter " \
151    #         "name parsing - no FooFilterName in %s" % call_names)
[2941]152    #     component._api.queryMutliAdapter = origQMA
[2915]153
[3152]154
[2909]155def test_suite():
[3163]156    suite = unittest.TestSuite()
157    suite.addTest(unittest.makeSuite(TestBOFilters))
158    suite.addTest(unittest.makeSuite(TestDefaultFilters))
159    suite.addTest(unittest.makeSuite(TestBlacklistFormProcessing))
[2909]160    return suite
161
162if __name__ == '__main__':
163    unittest.main(defaultTest='test_suite')
164#    framework()
Note: See TracBrowser for help on using the repository browser.