[Zope-Checkins] SVN: Zope/trunk/ - Collector #2062: Fix
manage_historyCopy, which was broken, and write tests for it.
Chris Withers
chris at simplistix.co.uk
Mon May 1 11:44:10 EDT 2006
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
More information about the Zope-Checkins
mailing list