root/qTopic/trunk/tests/test_topictool.py

Revision 963 (checked in by crchemist, 1 year ago)

Fix error in tests.

  • Property svn:eol-style set to native
Line 
1 """
2     Tests for patched 'portal_atct'
3 """
4
5 __docformat__ = 'restructuredtext'
6
7 import os, sys
8 if __name__ == '__main__':
9     execfile(os.path.join(sys.path[0], 'framework.py'))
10
11
12
13 from Testing import ZopeTestCase
14 ZopeTestCase.installProduct('qTopic')
15 from Products.ATContentTypes.tests import atcttestcase
16
17
18 from Products.CMFCore.utils import getToolByName
19 from Products.CMFPlone.CatalogTool import CatalogTool
20 from Products.ATContentTypes.config import TOOLNAME
21 from Products.ATContentTypes.interfaces import IATCTTopicsTool
22 from Interface.Verify import verifyObject
23 from Products.ATContentTypes.configuration import zconf
24 from Products.ATContentTypes.interfaces import IATCTTool
25 from Products.ZCatalog.ZCatalog import manage_addZCatalog
26
27 # z3 imports
28 try:
29     from Products.ATContentTypes.interface import IATCTTopicsTool as Z3IATCTTopicsTool
30     from zope.interface.verify import verifyObject as Z3verifyObject
31     z3_support = True
32 except ImportError:
33     z3_support = False
34
35 tool_config = zconf.atct_tool.topic_tool
36
37
38 tests = []
39 index_def = {'index'        : 'end',
40              'friendlyName' : 'End Date For Test',
41              'description'  : 'This is an end Date',
42              'criteria'     : ['ATDateCriteria','ATDateRangeCriteria']
43             }
44 meta_def =  {'metadata'     : 'ModificationDate',
45              'friendlyName' : 'Modification Date For Test',
46              'description'  : ''
47             }
48
49 conf_index_def = [i for i in tool_config.indexes if i.name == index_def['index']][0]
50 conf_meta_def = [m for m in tool_config.metadata if m.name == meta_def['metadata']][0]
51 CATALOG_NAME = 'test_catalog'
52 class TestTool(atcttestcase.ATCTSiteTestCase):
53
54     def afterSetUp(self):
55         self.tool = self.portal.portal_atct
56         manage_addZCatalog(self.portal, id = CATALOG_NAME, title = 'Test catalog')
57         self.cat = self.portal[CATALOG_NAME]
58         self.cat.addIndex('end', 'DateIndex')
59         self.cat.manage_addColumn(meta_def['metadata'])
60
61     def test_interface(self):
62         self.failUnless(IATCTTopicsTool.isImplementedBy(self.tool))
63         self.failUnless(verifyObject(IATCTTopicsTool, self.tool))
64    
65  
66     #Index tests
67     def test_add_index(self):
68         t = self.tool
69
70         t.addIndex(enabled = True, catalog_name=CATALOG_NAME, **index_def)
71         index = t.getIndex(index_def['index'], catalog_name=CATALOG_NAME)
72         self.failUnlessEqual(index.index, index_def['index'])
73         self.failUnlessEqual(index.friendlyName, index_def['friendlyName'])
74         self.failUnlessEqual(index.description, index_def['description'])
75         #Only need to test truth not actual value
76         self.failUnless(index.enabled)
77         self.failUnlessEqual(index.criteria, tuple(index_def['criteria']))
78
79         self.failUnless(index in t.getEnabledIndexes(catalog_name=CATALOG_NAME))
80         self.failUnless(index_def['index'] in [a[0] for a in t.getEnabledFields(catalog_name=CATALOG_NAME)])
81         self.failUnless(index_def['index'] in t.getIndexDisplay(True, catalog_name=CATALOG_NAME).keys())
82         self.failUnless(index_def['friendlyName'] in t.getIndexDisplay(True, catalog_name=CATALOG_NAME).values())
83         self.failUnless(index_def['index'] in t.getIndexes(1))
84
85     def test_disable_index(self):
86         t = self.tool
87         t.addIndex(enabled = False, catalog_name=CATALOG_NAME, **index_def)
88         index = t.getIndex(index_def['index'], catalog_name=CATALOG_NAME)
89         self.failUnlessEqual(index.index, index_def['index'])
90         self.failUnlessEqual(index.friendlyName, index_def['friendlyName'])
91         self.failUnlessEqual(index.description, index_def['description'])
92         #Only need to test truth not actual value
93         self.failIf(index.enabled)
94         self.failUnlessEqual(index.criteria, tuple(index_def['criteria']))
95
96         self.failIf(index in t.getEnabledIndexes(catalog_name=CATALOG_NAME))
97         self.failIf(index_def['index'] in [a[0] for a in t.getEnabledFields(catalog_name=CATALOG_NAME)])
98         self.failIf(index_def['index'] in t.getIndexes(1,catalog_name=CATALOG_NAME))
99         self.failIf(index_def['index'] in t.getIndexDisplay(True, catalog_name=CATALOG_NAME).keys())
100         self.failUnless(index_def['friendlyName'] not in t.getIndexDisplay(True, catalog_name=CATALOG_NAME).values())
101         #Make sure it's still in the un-limited list
102         self.failUnless(index_def['index'] in t.getIndexDisplay(False, catalog_name=CATALOG_NAME).keys())
103         self.failUnless(index_def['friendlyName'] in t.getIndexDisplay(False, catalog_name=CATALOG_NAME).values())
104         self.failUnless(index_def['index'] in t.getIndexes(catalog_name=CATALOG_NAME))
105
106     def test_add_bogus_index(self):
107         """An metdatum that's not in the catalog should be deleted automatically
108            on any call to one of the index list methods."""
109         t = self.tool
110         t.addIndex('bogosity', enabled = True, catalog_name=CATALOG_NAME)
111         error = False
112         #The methods getEnabledFields, getEnabledIndexes, getIndexes,
113         #getIndexDisplay, and getIndex all automatically restore fields
114         #from the catalog
115
116         try:
117             t.getIndex('bogosity', catalog_name=CATALOG_NAME)
118         except AttributeError:
119             error = True
120         self.failUnless(error)
121
122         #Add
123         t.addIndex('bogosity', enabled = True, catalog_name=CATALOG_NAME)
124         self.failIf('bogosity' in [a[0] for a in t.getEnabledFields(catalog_name=CATALOG_NAME)])
125         #Add
126         t.addIndex('bogosity', enabled = True, catalog_name=CATALOG_NAME)
127         self.failIf('bogosity' in t.getIndexDisplay(True, catalog_name=CATALOG_NAME).keys())
128         #Add
129         t.addIndex('bogosity', enabled = True, catalog_name=CATALOG_NAME)
130         self.failIf('bogosity' in t.getIndexes(1, catalog_name=CATALOG_NAME))
131         #Add
132         t.addIndex('bogosity', enabled = True, catalog_name=CATALOG_NAME)
133         self.failIf('bogosity' in [i.index for i in t.getEnabledIndexes(catalog_name=CATALOG_NAME)])
134
135     def test_remove_index(self):
136         t = self.tool
137         t.addIndex(catalog_name=CATALOG_NAME, **index_def)
138         t.removeIndex(index_def['index'], catalog_name=CATALOG_NAME)
139         error = None
140         try:
141             index = t.topic_indexes[CATALOG_NAME][index_def['index']]
142         except KeyError:
143             error = True
144         self.failUnless(error)
145         #Should be restored automatically by getIndex and friends
146         error = None
147         try:
148             index = t.getIndex(index_def['index'], catalog_name=CATALOG_NAME)
149         except AttributeError:
150             error = True
151         self.failIf(error)
152         #Make sure the FriendlyName is reset to default
153         self.failUnlessEqual(index.friendlyName, getattr(conf_index_def,'friendlyName'))
154
155     def test_update_index(self):
156         """An index with no criteria set should set all available criteria,
157            also changes made using updateIndex should not reset already set
158            values"""
159         t = self.tool
160         t.addIndex(enabled = True, catalog_name=CATALOG_NAME, **index_def)
161         t.updateIndex(index_def['index'], criteria = None,
162                       description = 'New Description', catalog_name=CATALOG_NAME)
163         index = t.getIndex(index_def['index'], catalog_name=CATALOG_NAME)
164         self.failUnless(index.criteria)
165         self.failUnless(index.criteria != index_def['criteria'])
166         self.failUnless(index.description == 'New Description')
167         self.failUnless(index.friendlyName == index_def['friendlyName'])
168         self.failUnless(index.enabled)
169
170     def test_all_indexes(self):
171         """Ensure that the tool includes all indexes in the catalog"""
172         t = self.tool
173         cat = getToolByName(self.tool, CATALOG_NAME)
174         indexes = [field for field in cat.indexes()]
175         init_indexes = list(t.getIndexes(catalog_name=CATALOG_NAME))
176         unique_indexes = [i for i in indexes if i not in init_indexes]
177         unique_indexes = unique_indexes + [i for i in init_indexes if i not in indexes]
178         self.failIf(unique_indexes)
179
180     def test_change_catalog_index(self):
181         """Make sure tool updates when indexes are added to or deleted from
182            the catalog"""
183         t = self.tool
184         cat = getToolByName(self.tool, CATALOG_NAME)
185         #add
186         error = False
187         cat.manage_addIndex('nonsense', 'FieldIndex')
188         try:
189             t.getIndex('nonsense', catalog_name=CATALOG_NAME)
190         except AttributeError:
191             error = True
192         self.failIf(error)
193         #remove
194         error = False
195         cat.delIndex('nonsense')
196         try:
197             t.getIndex('nonsense', catalog_name=CATALOG_NAME)
198         except AttributeError:
199             error = True
200         self.failUnless(error)
201
202
203     #Metadata tests
204     def test_add_metadata(self):
205         t = self.tool
206         t.addMetadata(enabled = True, catalog_name=CATALOG_NAME,**meta_def)
207         meta = t.getMetadata(meta_def['metadata'], catalog_name=CATALOG_NAME)
208         self.failUnlessEqual(meta.index, meta_def['metadata'])
209         self.failUnlessEqual(meta.friendlyName, meta_def['friendlyName'])
210         self.failUnlessEqual(meta.description, meta_def['description'])
211         #Only need to test truth not actual value
212         self.failUnless(meta.enabled)
213
214         self.failUnless(meta in t.getEnabledMetadata(catalog_name=CATALOG_NAME))
215         self.failUnless(meta_def['metadata'] in t.getMetadataDisplay(True, catalog_name=CATALOG_NAME).keys())
216         self.failUnless(meta_def['friendlyName'] in t.getMetadataDisplay(True, catalog_name=CATALOG_NAME).values())
217         self.failUnless(meta_def['metadata'] in t.getAllMetadata(1, catalog_name=CATALOG_NAME))
218
219     def test_disable_metadata(self):
220         t = self.tool
221         t.addMetadata(enabled = False, catalog_name=CATALOG_NAME, **meta_def)
222         meta = t.getMetadata(meta_def['metadata'], catalog_name=CATALOG_NAME)
223         self.failUnlessEqual(meta.index, meta_def['metadata'])
224         self.failUnlessEqual(meta.friendlyName, meta_def['friendlyName'])
225         self.failUnlessEqual(meta.description, meta_def['description'])
226         #Only need to test truth not actual value
227         self.failIf(meta.enabled)
228
229         self.failUnless(meta not in t.getEnabledMetadata(catalog_name=CATALOG_NAME))
230         self.failIf(meta_def['metadata'] in t.getAllMetadata(1, catalog_name=CATALOG_NAME))
231         self.failIf(meta_def['metadata'] in t.getMetadataDisplay(True, catalog_name=CATALOG_NAME).keys())
232         self.failIf(meta_def['friendlyName'] in t.getMetadataDisplay(True, catalog_name=CATALOG_NAME).values())
233         #Make sure it's still in the un-limited list
234         self.failUnless(meta_def['metadata'] in t.getMetadataDisplay(False, catalog_name=CATALOG_NAME).keys())
235         self.failUnless(meta_def['friendlyName'] in t.getMetadataDisplay(False, catalog_name=CATALOG_NAME).values())
236         self.failUnless(meta_def['metadata'] in t.getAllMetadata(catalog_name=CATALOG_NAME))
237
238     def test_add_bogus_metadata(self):
239         """An metdatum that's not in the catalog should be deleted automatically
240            on any call to one of the index list methods"""
241         t = self.tool
242         t.addMetadata('bogosity', enabled = True, catalog_name=CATALOG_NAME)
243
244         error = False
245         #The methods getEnabledMetadata, getAllMetadata, getMetadataDisplay,
246         #and getMetadata all automatically restore fields from the catalog
247         try:
248             t.getMetadata('bogosity', catalog_name=CATALOG_NAME)
249         except AttributeError:
250             error = True
251         self.assert_(error)
252
253         #Add
254         t.addMetadata('bogosity', enabled = True, catalog_name=CATALOG_NAME)
255         self.failIf('bogosity' in t.getMetadataDisplay(True, catalog_name=CATALOG_NAME).keys())
256         #Add
257         t.addMetadata('bogosity', enabled = True, catalog_name=CATALOG_NAME)
258         self.failIf('bogosity' in t.getAllMetadata(1, catalog_name=CATALOG_NAME))
259         #Add
260         t.addMetadata('bogosity', enabled = True, catalog_name=CATALOG_NAME)
261         self.failIf('bogosity' in [i.index for i in t.getEnabledMetadata(catalog_name=CATALOG_NAME)])
262
263     def test_remove_metadata(self):
264         t = self.tool
265         t.addMetadata(catalog_name=CATALOG_NAME, **meta_def)
266         t.removeMetadata(meta_def['metadata'], catalog_name=CATALOG_NAME)
267         error = None
268         try:
269             meta = t.topic_metadata[CATALOG_NAME][meta_def['metadata']]
270         except KeyError:
271             error = True
272         self.failUnless(error)
273         #Should be restored automatically by getMetadata and friends
274         error = None
275         try:
276             meta = t.getMetadata(meta_def['metadata'], catalog_name=CATALOG_NAME)
277         except AttributeError:
278             error = True
279         self.failIf(error)
280         #Make sure the FriendlyName is reset to default
281         self.failUnlessEqual(meta.friendlyName, getattr(conf_meta_def,'friendlyName'))
282
283     def test_update_metadata(self):
284         """Changes made using updateMetadata should not reset already set
285            values"""
286         t = self.tool
287         t.addMetadata(enabled = True, catalog_name=CATALOG_NAME, **meta_def)
288         t.updateMetadata(meta_def['metadata'], friendlyName = 'New Name', catalog_name=CATALOG_NAME)
289         meta = t.getMetadata(meta_def['metadata'], catalog_name=CATALOG_NAME)
290         self.failUnless(meta.friendlyName == 'New Name')
291         self.failUnless(meta.enabled)
292
293     def test_all_metadata(self):
294         """Ensure that the tool includes all metadata in the catalog"""
295         t = self.tool
296         cat = getToolByName(self.tool, CATALOG_NAME)
297         metadata = [field for field in cat.schema()]
298         init_metadata = list(t.getAllMetadata(catalog_name=CATALOG_NAME))
299         unique_metadata = [i for i in metadata if i not in init_metadata]
300         unique_metadata = unique_metadata + [i for i in init_metadata if i not in metadata]
301         self.failIf(unique_metadata)
302
303     def test_change_catalog_schema(self):
304         """Make sure tool updates when columns are added to or deleted from
305            the catalog"""
306         t = self.tool
307         cat = getToolByName(self.tool, CATALOG_NAME)
308         #add
309         error = False
310         cat.manage_addColumn('nonsense')
311         try:
312             t.getMetadata('nonsense', catalog_name=CATALOG_NAME)
313         except AttributeError:
314             error = True
315         self.failIf(error)
316         #remove
317         error = False
318         cat.delColumn('nonsense')
319         try:
320             t.getMetadata('nonsense',catalog_name=CATALOG_NAME)
321         except AttributeError:
322             error = True
323         self.assert_(error)
324    
325     if z3_support:
326         def test_Z3interface(self):
327             iface = Z3IATCTTopicsTool
328             self.failUnless(Z3verifyObject(iface,self.tool))
329
330 tests.append(TestTool)
331
332 if __name__ == '__main__':
333     framework()
334 else:
335     # While framework.py provides its own test_suite()
336     # method the testrunner utility does not.
337     import unittest
338     def test_suite():
339         suite = unittest.TestSuite()
340         for test in tests:
341             suite.addTest(unittest.makeSuite(test))
342         return suite
Note: See TracBrowser for help on using the browser.