Log message for revision 67805: - Collector #2062: Fix manage_historyCopy, which was broken, and write tests for it.
Changed: U Zope/trunk/doc/CHANGES.txt U Zope/trunk/lib/python/OFS/History.py A Zope/trunk/lib/python/OFS/tests/testHistory.py -=- Modified: Zope/trunk/doc/CHANGES.txt =================================================================== --- Zope/trunk/doc/CHANGES.txt 2006-05-01 15:39:48 UTC (rev 67804) +++ Zope/trunk/doc/CHANGES.txt 2006-05-01 15:44:10 UTC (rev 67805) @@ -240,6 +240,9 @@ Bugs Fixed + - Collector #2062: Fix manage_historyCopy, which was broken, and write + tests for it. + - Collector #2061: Fix problems where windows line endings are passed to restricted code compilers. Modified: Zope/trunk/lib/python/OFS/History.py =================================================================== --- Zope/trunk/lib/python/OFS/History.py 2006-05-01 15:39:48 UTC (rev 67804) +++ Zope/trunk/lib/python/OFS/History.py 2006-05-01 15:44:10 UTC (rev 67805) @@ -143,15 +143,12 @@ if serial != self._p_serial: self.manage_beforeHistoryCopy() state=self._p_jar.oldstate(self, serial) - # Scrub the object before restoring the old state base = aq_base(self) - base._p_changed=0 - base._p_deactivate() - base.__setstate__(state) - base._p_changed=1 - + base._p_activate() # make sure we're not a ghost + base.__setstate__(state) # change the state + base._p_changed = True # marke object as dirty self.manage_afterHistoryCopy() - + if RESPONSE is not None and URL1 is not None: RESPONSE.redirect(URL1+'/manage_workspace') @@ -195,7 +192,6 @@ InitializeClass(Historical) - def dump(tag, x, lo, hi, r): r1=[] r2=[] Added: Zope/trunk/lib/python/OFS/tests/testHistory.py =================================================================== --- Zope/trunk/lib/python/OFS/tests/testHistory.py 2006-05-01 15:39:48 UTC (rev 67804) +++ Zope/trunk/lib/python/OFS/tests/testHistory.py 2006-05-01 15:44:10 UTC (rev 67805) @@ -0,0 +1,97 @@ +import unittest +import Testing +import Zope2 +Zope2.startup() + +import os +import shutil +import transaction +import tempfile +import ZODB + +from OFS.Application import Application +from Products.PythonScripts.PythonScript import manage_addPythonScript +from ZODB.FileStorage import FileStorage + +class HistoryTests(unittest.TestCase): + + def setUp(self): + # set up a zodb + # we can't use DemoStorage here 'cos it doesn't support History + self.dir = tempfile.mkdtemp() + self.s = FileStorage(os.path.join(self.dir,'testHistory.fs'),create=True) + self.connection = ZODB.DB(self.s).open() + r = self.connection.root() + a = Application() + r['Application'] = a + self.root = a + # create a python script + manage_addPythonScript(a,'test') + self.ps = ps = a.test + # commit some changes + ps.write('return 1') + t = transaction.get() + # undo note made by Application instantiation above. + t.description = None + t.note('Change 1') + t.commit() + ps.write('return 2') + t = transaction.get() + t.note('Change 2') + t.commit() + ps.write('return 3') + t = transaction.get() + t.note('Change 3') + t.commit() + + def tearDown(self): + # get rid of ZODB + transaction.abort() + self.connection.close() + self.s.close() + del self.root + del self.connection + del self.s + shutil.rmtree(self.dir) + + def test_manage_change_history(self): + r = self.ps.manage_change_history() + self.assertEqual(len(r),3) # three transactions + for i in range(3): + entry = r[i] + # check no new keys show up without testing + self.assertEqual(len(entry.keys()),7) + # the transactions are in newest-first order + self.assertEqual(entry['description'],'Change %i' % (3-i)) + self.failUnless('key' in entry) + # lets not assume the size will stay the same forever + self.failUnless('size' in entry) + self.failUnless('tid' in entry) + self.failUnless('time' in entry) + if i: + # check times are increasing + self.failUnless(entry['time']<r[i-1]['time']) + self.assertEqual(entry['user_name'],'') + self.assertEqual(entry['version'],'') + + def test_manage_historyCopy(self): + # we assume this works 'cos it's tested above + r = self.ps.manage_change_history() + # now we do the copy + self.ps.manage_historyCopy( + keys=[r[2]['key']] + ) + # do a commit, just like ZPublisher would + transaction.commit() + # check the body is as it should be, we assume (hopefully not foolishly) + # that all other attributes will behave the same + self.assertEqual(self.ps._body, + 'return 1\n') + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite( HistoryTests ) ) + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='test_suite') Property changes on: Zope/trunk/lib/python/OFS/tests/testHistory.py ___________________________________________________________________ Name: svn:eol-style + native _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins