source: products/quintagroup.catalogupdater/trunk/quintagroup/catalogupdater/tests.py @ 1759

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

Added test of updating ALL records

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1import unittest
2
3from zope.interface import Interface
4from zope.component import queryUtility
5from zope.component import provideAdapter
6
7from plone.indexer.decorator import indexer
8from plone.indexer.interfaces import IIndexableObject
9from Testing import ZopeTestCase as ztc
10
11from Products.Five import zcml
12from Products.Five import fiveconfigure
13from Products.CMFCore.utils import getToolByName
14from Products.PloneTestCase import PloneTestCase as ptc
15from Products.PloneTestCase.layer import PloneSite
16from Products.Archetypes.tests.utils import makeContent
17
18from quintagroup.catalogupdater.utility import ICatalogUpdater
19
20class TestCase(ptc.PloneTestCase):
21    class layer(PloneSite):
22        @classmethod
23        def setUp(cls):
24            import quintagroup.catalogupdater
25            fiveconfigure.debug_mode = True
26            zcml.load_config('configure.zcml', quintagroup.catalogupdater)
27            fiveconfigure.debug_mode = False
28
29ptc.setupPloneSite()
30
31
32class TestUtility(TestCase):
33
34    def afterSetUp(self):
35        self.loginAsPortalOwner()
36        self.my_doc = makeContent(self.portal, portal_type='Document', id='my_doc')
37        self.catalog = getToolByName(self.portal, 'portal_catalog')
38        self.logout()
39        self.addIndexer()
40
41    def addIndexer(self):
42        @indexer(Interface)
43        def test_column(obj):
44            return obj.id
45
46        provideAdapter(test_column, name='test_column')
47        self.catalog.addColumn('test_column')
48
49    def testSingleColumnUpdate(self):
50        """ Test is metadata column updated with utility
51        """
52        mydoc = self.catalog.unrestrictedSearchResults(id='my_doc')[0]
53        self.assertFalse(mydoc.test_column == 'my_doc',
54            "'test_column' metadata updated in catalog " \
55            "before utility call: '%s'" % mydoc.test_column)
56
57        cu = queryUtility(ICatalogUpdater, name="catalog_updater")
58        cu.updateMetadata4All(self.catalog, 'test_column')
59
60        mydoc = self.catalog.unrestrictedSearchResults(id='my_doc')[0]
61        self.assertTrue(mydoc.test_column == 'my_doc',
62            "'test_column' metadata has wrong metadata in catalog: " \
63            "'%s'" % mydoc.test_column)
64
65    def testOnlyPointedColumnUpdate(self):
66        """ Update a title property for the my_doc object
67            (without reindexing) then, after utility usage
68            - check is that metadata is leave unchanged.
69        """
70        self.loginAsPortalOwner()
71        self.my_doc.update(title="My document")
72        self.logout()
73
74        mydoc = self.catalog.unrestrictedSearchResults(id='my_doc')[0]
75        self.assertTrue(mydoc.Title == "My document", mydoc.Title)
76
77        self.my_doc.setTitle('New my document') # catalog not updated
78        cu = queryUtility(ICatalogUpdater, name="catalog_updater")
79        cu.updateMetadata4All(self.catalog, 'test_column')
80
81        mydoc = self.catalog.unrestrictedSearchResults(id='my_doc')[0]
82        self.assertTrue(mydoc.Title == 'My document',
83            "Other metadata updated: Title='%s'" % mydoc.Title)
84
85
86    def testAllRecordsUpdate(self):
87        """ Test is all records in catalog updated with utility
88        """
89        cu = queryUtility(ICatalogUpdater, name="catalog_updater")
90        cu.updateMetadata4All(self.catalog, 'test_column')
91
92        num_recs = len(self.catalog._catalog.data)
93        allcat = self.catalog.unrestrictedSearchResults(path='/')
94        num_updated = sum([1 for b in allcat if b.test_column==b.id])
95
96        self.assertTrue(num_updated == num_recs, "Only %d records updated, " \
97            "must be - %d" % (num_updated, num_recs))
98
99
100def test_suite():
101    return unittest.TestSuite([
102        unittest.makeSuite(TestUtility),
103        ])
104
105if __name__ == '__main__':
106    unittest.main(defaultTest='test_suite')
Note: See TracBrowser for help on using the repository browser.