[1739] | 1 | import unittest |
---|
| 2 | |
---|
[1753] | 3 | from zope.interface import Interface |
---|
| 4 | from zope.component import queryUtility |
---|
| 5 | from zope.component import provideAdapter |
---|
| 6 | |
---|
| 7 | from plone.indexer.decorator import indexer |
---|
| 8 | from plone.indexer.interfaces import IIndexableObject |
---|
[1739] | 9 | from Testing import ZopeTestCase as ztc |
---|
| 10 | |
---|
| 11 | from Products.Five import zcml |
---|
| 12 | from Products.Five import fiveconfigure |
---|
[1753] | 13 | from Products.CMFCore.utils import getToolByName |
---|
[1739] | 14 | from Products.PloneTestCase import PloneTestCase as ptc |
---|
| 15 | from Products.PloneTestCase.layer import PloneSite |
---|
[1753] | 16 | from Products.Archetypes.tests.utils import makeContent |
---|
[1739] | 17 | |
---|
[1753] | 18 | from quintagroup.catalogupdater.utility import ICatalogUpdater |
---|
[1739] | 19 | |
---|
| 20 | class TestCase(ptc.PloneTestCase): |
---|
| 21 | class layer(PloneSite): |
---|
| 22 | @classmethod |
---|
| 23 | def setUp(cls): |
---|
[1753] | 24 | import quintagroup.catalogupdater |
---|
[1739] | 25 | fiveconfigure.debug_mode = True |
---|
[1753] | 26 | zcml.load_config('configure.zcml', quintagroup.catalogupdater) |
---|
[1739] | 27 | fiveconfigure.debug_mode = False |
---|
| 28 | |
---|
[1753] | 29 | ptc.setupPloneSite() |
---|
[1739] | 30 | |
---|
| 31 | |
---|
[1753] | 32 | class TestUtility(TestCase): |
---|
[1739] | 33 | |
---|
[1753] | 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() |
---|
[1739] | 40 | |
---|
[1753] | 41 | def addIndexer(self): |
---|
| 42 | @indexer(Interface) |
---|
| 43 | def test_column(obj): |
---|
| 44 | return obj.id |
---|
[1739] | 45 | |
---|
[1753] | 46 | provideAdapter(test_column, name='test_column') |
---|
| 47 | self.catalog.addColumn('test_column') |
---|
[1739] | 48 | |
---|
[1753] | 49 | def testMetadataUpdate(self): |
---|
| 50 | """ Test is metadata column updated with utility |
---|
| 51 | """ |
---|
| 52 | docs = self.catalog.unrestrictedSearchResults(portal_type='Document') |
---|
| 53 | self.assertTrue([1 for b in docs if b.test_column == b.id] == [], |
---|
| 54 | "Some document has updated 'test_column' metadata in catalog: '%s'" % docs) |
---|
[1739] | 55 | |
---|
[1753] | 56 | cu = queryUtility(ICatalogUpdater, name="catalog_updater") |
---|
| 57 | cu.updateMetadata4All(self.catalog, 'test_column') |
---|
[1739] | 58 | |
---|
[1753] | 59 | docs = self.catalog.unrestrictedSearchResults(portal_type='Document') |
---|
| 60 | self.assertTrue([1 for b in docs if b.test_column != b.id] == [], |
---|
| 61 | "Some document has wrong 'test_column' metadata in catalog: '%s'" % docs) |
---|
| 62 | |
---|
| 63 | def testOnlyOneColumnUpdate(self): |
---|
| 64 | """ Update a title property for the my_doc object (without reindexing) |
---|
| 65 | then, after utility usage - check is that metadata is leave unchanged. |
---|
| 66 | """ |
---|
| 67 | self.loginAsPortalOwner() |
---|
| 68 | self.my_doc.update(title="My document") |
---|
| 69 | self.logout() |
---|
| 70 | |
---|
| 71 | mydoc = self.catalog.unrestrictedSearchResults(id='my_doc')[0] |
---|
| 72 | self.assertTrue(mydoc.Title == "My document", mydoc.Title) |
---|
| 73 | |
---|
| 74 | self.my_doc.setTitle('New my document') # catalog not updated |
---|
| 75 | cu = queryUtility(ICatalogUpdater, name="catalog_updater") |
---|
| 76 | cu.updateMetadata4All(self.catalog, 'test_column') |
---|
| 77 | |
---|
| 78 | mydoc = self.catalog.unrestrictedSearchResults(id='my_doc')[0] |
---|
| 79 | self.assertTrue(mydoc.Title == 'My document', |
---|
| 80 | "Other metadata updated: Title='%s'" % mydoc.Title) |
---|
| 81 | |
---|
| 82 | self.assertTrue(mydoc.test_column == 'my_doc', |
---|
| 83 | "Wrong data in updated metadata: test_column='%s', " \ |
---|
| 84 | "must be 'my_doc'" % mydoc.test_column) |
---|
| 85 | |
---|
| 86 | |
---|
| 87 | def test_suite(): |
---|
| 88 | return unittest.TestSuite([ |
---|
| 89 | unittest.makeSuite(TestUtility), |
---|
[1739] | 90 | ]) |
---|
| 91 | |
---|
| 92 | if __name__ == '__main__': |
---|
| 93 | unittest.main(defaultTest='test_suite') |
---|