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

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

#228: Fixed rewrited blackout filter utility and functionality.

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