source: products/quintagroup.plonegooglesitemaps/branches/blacklist/quintagroup/plonegooglesitemaps/tests/testBlackoutList.py @ 2939

Last change on this file since 2939 was 2939, checked in by mylan, 14 years ago

#228: Remake filter utility to multiadapter, fix tests

  • Property svn:eol-style set to native
File size: 5.9 KB
Line 
1#
2# Tests related to general Sitemap type.
3#
4from base import *
5from types import ListType, TupleType
6from zope.component import queryMultiAdapter
7
8from Products.CMFPlone.utils import _createObjectByType
9from quintagroup.plonegooglesitemaps.config import BLACKOUT_PREFIX
10from quintagroup.plonegooglesitemaps.interfaces import IBlackoutFilter
11
12idfname = BLACKOUT_PREFIX + "id"
13pathfname = BLACKOUT_PREFIX + "path"
14
15class TestBOFilters(TestCase):
16
17    def testDefaultId(self):
18        idfilter = queryMultiAdapter((self.portal, self.app.REQUEST),
19                       IBlackoutFilter, name=idfname)
20        self.assertTrue(idfilter is not None,
21            "Not registered default '%s' IBlackoutFilter" % idfname)
22
23    def testDefaultPath(self):
24        pathfilter = queryMultiAdapter((self.portal, self.app.REQUEST),
25                         IBlackoutFilter, name=pathfname)
26        self.assertTrue(pathfilter is not None,
27            "Not registered default '%s' IBlackoutFilter" % pathfname)
28
29
30class TestFilterMixin(TestCase):
31
32    def afterSetUp(self):
33        super(TestFilterMixin, self).afterSetUp()
34        self.createTestContent()
35        self.sm = _createObjectByType('Sitemap', self.portal, id='google-sitemaps')
36        self.req = self.app.REQUEST
37        self.catres = self.portal.portal_catalog(portal_type=["Document",])
38        self.logout()
39
40    def createTestContent(self):
41        # Add testing content to portal
42        for cont in [self.portal, self.folder]:
43            for i in range(1,4):
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
51    def getPreparedLists(self, fname, fargs):
52        fengine = queryMultiAdapter((self.sm, self.req), IBlackoutFilter, name=fname)
53        filtered = [f.getPath() for f in fengine.filterOut(self.catres, fargs)]
54        catpaths = [c.getPath() for c in self.catres]
55        return catpaths, filtered
56
57    def testIdFilter(self):
58        catpaths, filtered = self.getPreparedLists(idfname, "doc1")
59        self.assertTrue(type(filtered) in [ListType, TupleType],
60            'Object type, returned by filteredOut method of "%s" utility '\
61            'not list nor tuple' % idfname)
62        excluded = ["/%s/doc1" % self.portal.absolute_url(1),
63                    "/%s/doc1" % self.folder.absolute_url(1)]
64        self.assertTrue(
65            set(catpaths)-set(filtered) == set(excluded),
66            'Wrong filtered-out by "%s" filter:\nsrc %s\nres %s\nexcluded %s' % (
67             idfname, catpaths, filtered, excluded))
68
69    def testAbsolutePathFilter(self):
70        catpaths, filtered = self.getPreparedLists(pathfname, "/doc1")
71        self.assertTrue(type(filtered) in [ListType, TupleType],
72            'Object type, returned by filteredOut method of "%s" utility '\
73            'not list nor tuple' % pathfname)
74        excluded = ["/%s/doc1" % self.portal.absolute_url(1)]
75        self.assertTrue(
76            set(catpaths)-set(filtered) == set(excluded),
77            'Wrong filtered-out by "%s" filter:\nsrc %s\nres %s\nexcluded %s' % (
78             pathfname, catpaths, filtered, excluded))
79
80    def testRelativePathFilter(self):
81        self.sm = _createObjectByType('Sitemap', self.folder, id='google-sitemaps')
82        catpaths, filtered = self.getPreparedLists(pathfname, "./doc1")
83        self.assertTrue(type(filtered) in [ListType, TupleType],
84            'Object type, returned by filteredOut method of "%s" utility '\
85            'not list nor tuple' % pathfname)
86        excluded = ["/%s/doc1" % self.folder.absolute_url(1)]
87        self.assertTrue(
88            set(catpaths)-set(filtered) == set(excluded),
89            'Wrong filtered-out by "%s" filter:\nsrc %s\nres %s\nexcluded %s' % (
90             pathfname, catpaths, filtered, excluded))
91
92
93
94
95class TestBlacklistFormProcessing(TestFilterMixin):
96
97    def afterSetUp(self):
98        super(TestBlacklistFormProcessing, self).afterSetUp()
99        self.loginAsPortalOwner()
100        self.smview = queryMultiAdapter((self.sm, self.app.REQUEST), name="sitemap.xml")
101
102    def getPreparedLists(self, bl, fargs):
103        self.sm.edit(blackout_list=bl)
104        filtered = [f['url'] for f in self.smview.results()]
105        catpaths = [c.getURL() for c in self.catres]
106        return catpaths, filtered
107
108    def testGetNamedFilterUtility(self):
109        catpaths, filtered = self.getPreparedLists("path:/doc1", "/plone/doc1")
110        excluded = ["%s/doc1" % self.portal.absolute_url()]
111        self.assertTrue(set(catpaths)-set(filtered) == set(excluded),
112            'Wrong filtered-out by "%s" filter:\nsrc %s\nres %s\nexcluded %s' % (
113             idfname, catpaths, filtered, excluded))
114
115    def testDefaultFilterUtility(self):
116        catpaths, filtered = self.getPreparedLists("id:doc1", "doc1")
117        excluded = ["%s/doc1" % self.portal.absolute_url(),
118                    "%s/doc1" % self.folder.absolute_url()]
119        self.assertTrue(set(catpaths)-set(filtered) == set(excluded),
120            'Wrong filtered-out by "%s" filter:\nsrc %s\nres %s\nexcluded %s' % (
121             idfname, catpaths, filtered, excluded))
122        # Now check is output of unnamed filter samed to named one.
123        self.sm.edit(blackout_list="doc1")
124        filtered_dflt = [f['url'] for f in self.smview.results()]
125        map(lambda l: l.sort(), (filtered, filtered_dflt))
126        self.assertTrue(filtered == filtered_dflt,
127            'Output of named "id" filter is not same to unnamed one:' \
128            'id-named: %s\nunnamed: %s' % (filtered, filtered_dflt))
129
130
131def test_suite():
132    from unittest import TestSuite, makeSuite
133    suite = TestSuite()
134    suite.addTest(makeSuite(TestBOFilters))
135    suite.addTest(makeSuite(TestDefaultFilters))
136    suite.addTest(makeSuite(TestBlacklistFormProcessing))
137    return suite
138
139if __name__ == '__main__':
140    unittest.main(defaultTest='test_suite')
141#    framework()
Note: See TracBrowser for help on using the repository browser.