def test13_saveWithUnicodeComment(self): portal_storage = self.portal.portal_historiesstorage obj1 = Dummy() obj1.text = 'v1 of text' portal_storage.register(1, ObjectData(obj1), metadata=self.buildMetadata('saved v1')) portal_storage.save(1, ObjectData(obj1), metadata=self.buildMetadata(u'saved v1\xc3\xa1'))
def test06_checkObjectManagerIntegrity(self): portal_storage = self.portal.portal_historiesstorage om = DummyOM() sub1 = Dummy() sub2 = Dummy() om._setObject('sub1', sub1) om._setObject('sub2', sub2) self.assertEqual(len(om.objectIds()), 2) portal_storage.register(1, ObjectData(om), metadata=self.buildMetadata('saved v1')) vdata = portal_storage.retrieve(history_id=1, selector=0) retrieved_om = vdata.object self.assertEqual(len(retrieved_om.object.objectIds()), 2)
def test02_saveUnregisteredObjectRaisesException(self): portal_storage = self.portal.portal_historiesstorage obj = Dummy() self.assertRaises(StorageUnregisteredError, portal_storage.save, 1, ObjectData(obj), metadata=self.buildMetadata('saved'))
def test01_saveAfterRegisteringDoesNotRaiseException(self): portal_storage = self.portal.portal_historiesstorage obj = Dummy() sel = portal_storage.register(1, ObjectData(obj), metadata=self.buildMetadata('saved')) self.assertEqual(sel, 0) sel = portal_storage.save(1, ObjectData(obj), metadata=self.buildMetadata('saved')) self.assertEqual(sel, 1)
def test03_saveAndRetrieve(self): portal_storage = self.portal.portal_historiesstorage obj1 = Dummy() obj1.text = 'v1 of text' portal_storage.register(1, ObjectData(obj1), metadata=self.buildMetadata('saved v1')) obj2 = Dummy() obj2.text = 'v2 of text' portal_storage.save(1, ObjectData(obj2), metadata=self.buildMetadata('saved v2')) # retrieve the state at registration time retrieved_obj = portal_storage.retrieve(history_id=1, selector=0) self.assertEqual(retrieved_obj.object.object.text, 'v1 of text') self.assertEqual(self.getComment(retrieved_obj), 'saved v1') # just check if first save wasn't a double save retrieved_obj = portal_storage.retrieve(history_id=1, selector=1) self.assertEqual(retrieved_obj.object.object.text, 'v2 of text') self.assertEqual(self.getComment(retrieved_obj), 'saved v2')
def test07_getModificationDate(self): portal_storage = self.portal.portal_historiesstorage obj = Dummy() v1_modified = obj.modified() v1 = portal_storage.register(history_id=1, object=ObjectData(obj), metadata=self.buildMetadata('saved v1')) self.assertEqual(v1_modified, portal_storage.getModificationDate(history_id=1)) self.assertEqual(v1_modified, portal_storage.getModificationDate(history_id=1, selector=v1)) #storage never gets the same object twice, because the archivist always generates another copy on save, #which then have a diffrent python id. #simulate object copy notifyModified(obj) obj = Dummy() v2_modified = obj.modified() v2 = portal_storage.save(history_id=1, object=ObjectData(obj), metadata=self.buildMetadata('saved v2')) self.assertNotEquals(v1, v2) self.assertEqual(v2_modified, portal_storage.getModificationDate(history_id=1)) self.assertEqual(v2_modified, portal_storage.getModificationDate(history_id=1, selector=v2)) self.assertEqual(v1_modified, portal_storage.getModificationDate(history_id=1, selector=v1))
def test12_retrieveNonExistentVersion(self): portal_storage = self.portal.portal_historiesstorage obj1 = Dummy() obj1.text = 'v1 of text' portal_storage.register(1, ObjectData(obj1), metadata=self.buildMetadata('saved v1')) obj2 = Dummy() obj2.text = 'v2 of text' portal_storage.save(1, ObjectData(obj2), metadata=self.buildMetadata('saved v2')) # purge portal_storage.purge(1, 0, metadata=self.buildMetadata("purged v1")) # retrieve non existing version self.assertRaises(StorageRetrieveError, portal_storage.retrieve, history_id=1, selector=2, countPurged=True, substitute=True) self.assertRaises(StorageRetrieveError, portal_storage.retrieve, history_id=1, selector=1, countPurged=False)
def test07_getModificationDate(self): portal_storage = self.portal.portal_historiesstorage obj = Dummy() v1_modified = obj.modified() v1 = portal_storage.register(history_id=1, object=ObjectData(obj), metadata=self.buildMetadata('saved v1')) self.assertEqual(v1_modified, portal_storage.getModificationDate(history_id=1)) self.assertEqual( v1_modified, portal_storage.getModificationDate(history_id=1, selector=v1)) #storage never gets the same object twice, because the archivist always generates another copy on save, #which then have a diffrent python id. #simulate object copy notifyModified(obj) obj = Dummy() v2_modified = obj.modified() v2 = portal_storage.save(history_id=1, object=ObjectData(obj), metadata=self.buildMetadata('saved v2')) self.assertNotEquals(v1, v2) self.assertEqual(v2_modified, portal_storage.getModificationDate(history_id=1)) self.assertEqual( v2_modified, portal_storage.getModificationDate(history_id=1, selector=v2)) self.assertEqual( v1_modified, portal_storage.getModificationDate(history_id=1, selector=v1))
def test05_getHistory(self): portal_storage = self.portal.portal_historiesstorage obj1 = Dummy() obj1.text = 'v1 of text' portal_storage.register(1, ObjectData(obj1), metadata=self.buildMetadata('saved v1')) obj2 = Dummy() obj2.text = 'v2 of text' portal_storage.save(1, ObjectData(obj2), metadata=self.buildMetadata('saved v2')) obj3 = Dummy() obj3.text = 'v3 of text' portal_storage.save(1, ObjectData(obj3), metadata=self.buildMetadata('saved v3')) history = portal_storage.getHistory(history_id=1) length = len(history) # check length self.assertEquals(length, 3) # iterating over the history for i, vdata in enumerate(history): expected_test = 'v%s of text' % (i + 1) self.assertEquals(vdata.object.object.text, expected_test) self.assertEquals(history[i].object.object.text, expected_test) expected_comment = 'saved v%s' % (i + 1) self.assertEqual(self.getComment(vdata), expected_comment) self.assertEqual(self.getComment(history[i]), expected_comment) # accessing the versions self.assertEquals(history[0].object.object.text, "v1 of text") self.assertEqual(self.getComment(history[0]), "saved v1") self.assertEquals(history[1].object.object.text, "v2 of text") self.assertEqual(self.getComment(history[1]), "saved v2") self.assertEquals(history[2].object.object.text, "v3 of text") self.assertEqual(self.getComment(history[2]), "saved v3")
def _setupMinimalHistory(self): portal_storage = self.portal.portal_historiesstorage obj1 = Dummy() obj1.text = 'v1 of text' portal_storage.register(1, ObjectData(obj1), metadata=self.buildMetadata('saved v1')) obj2 = Dummy() obj2.text = 'v2 of text' portal_storage.save(1, ObjectData(obj2), metadata=self.buildMetadata('saved v2')) obj3 = Dummy() obj3.text = 'v3 of text' portal_storage.save(1, ObjectData(obj3), metadata=self.buildMetadata('saved v3')) obj4 = Dummy() obj4.text = 'v4 of text' portal_storage.save(1, ObjectData(obj4), metadata=self.buildMetadata('saved v4'))
def test05_getHistory(self): portal_storage = self.portal.portal_historiesstorage obj1 = Dummy() obj1.text = 'v1 of text' portal_storage.register(1, ObjectData(obj1), metadata=self.buildMetadata('saved v1')) obj2 = Dummy() obj2.text = 'v2 of text' portal_storage.save(1, ObjectData(obj2), metadata=self.buildMetadata('saved v2')) obj3 = Dummy() obj3.text = 'v3 of text' portal_storage.save(1, ObjectData(obj3), metadata=self.buildMetadata('saved v3')) history = portal_storage.getHistory(history_id=1) length = len(history) # check length self.assertEquals(length, 3) # iterating over the history for i, vdata in enumerate(history): expected_test = 'v%s of text' % (i+1) self.assertEquals(vdata.object.object.text, expected_test) self.assertEquals(history[i].object.object.text, expected_test) expected_comment = 'saved v%s' % (i+1) self.assertEqual(self.getComment(vdata), expected_comment) self.assertEqual(self.getComment(history[i]), expected_comment) # accessing the versions self.assertEquals(history[0].object.object.text, "v1 of text") self.assertEqual(self.getComment(history[0]), "saved v1") self.assertEquals(history[1].object.object.text, "v2 of text") self.assertEqual(self.getComment(history[1]), "saved v2") self.assertEquals(history[2].object.object.text, "v3 of text") self.assertEqual(self.getComment(history[2]), "saved v3")
def test11_purgeOnSave(self): # install the purge policy that removes all except the current and # previous objects self.installPurgePolicyTool() portal_storage = self.portal.portal_historiesstorage # save no 1 obj1 = Dummy() obj1.text = 'v1 of text' sel = portal_storage.register(1, ObjectData(obj1), metadata=self.buildMetadata('saved v1')) history = portal_storage.getHistory(1, countPurged=False) self.assertEquals(sel, 0) self.assertEquals(len(history), 1) self.assertEqual(history[0].object.object.text, 'v1 of text') self.assertEqual(self.getComment(history[0]), 'saved v1') # save no 2 obj2 = Dummy() obj2.text = 'v2 of text' sel = portal_storage.save(1, ObjectData(obj2), metadata=self.buildMetadata('saved v2')) history = portal_storage.getHistory(1, countPurged=False) self.assertEquals(sel, 1) self.assertEquals(len(history), 2) self.assertEqual(history[0].object.object.text, 'v1 of text') self.assertEqual(self.getComment(history[0]), 'saved v1') self.assertEqual(history[1].object.object.text, 'v2 of text') self.assertEqual(self.getComment(history[1]), 'saved v2') # save no 3: purged oldest version obj3 = Dummy() obj3.text = 'v3 of text' sel = portal_storage.save(1, ObjectData(obj3), metadata=self.buildMetadata('saved v3')) history = portal_storage.getHistory(1, countPurged=False) length = len(history) # iterating over the history for i, vdata in enumerate(history): self.assertEquals(vdata.object.object.text, 'v%s of text' % (i + 2)) self.assertEqual(self.getComment(vdata), 'saved v%s' % (i + 2)) self.assertEquals(sel, 2) self.assertEquals(length, 2) self.assertEqual(history[0].object.object.text, 'v2 of text') self.assertEqual(self.getComment(history[0]), 'saved v2') self.assertEqual(history[1].object.object.text, 'v3 of text') self.assertEqual(self.getComment(history[1]), 'saved v3') # save no 4: purged oldest version obj4 = Dummy() obj4.text = 'v4 of text' sel = portal_storage.save(1, ObjectData(obj4), metadata=self.buildMetadata('saved v4')) history = portal_storage.getHistory(1, countPurged=False) length = len(history) # iterating over the history for i, vdata in enumerate(history): self.assertEquals(vdata.object.object.text, 'v%s of text' % (i + 3)) self.assertEqual(self.getComment(vdata), 'saved v%s' % (i + 3)) self.assertEquals(sel, 3) self.assertEquals(length, 2) self.assertEqual(history[0].object.object.text, 'v3 of text') self.assertEqual(self.getComment(history[0]), 'saved v3') self.assertEqual(history[1].object.object.text, 'v4 of text') self.assertEqual(self.getComment(history[1]), 'saved v4')
def test11_purgeOnSave(self): # install the purge policy that removes all except the current and # previous objects self.installPurgePolicyTool() portal_storage = self.portal.portal_historiesstorage # save no 1 obj1 = Dummy() obj1.text = 'v1 of text' sel = portal_storage.register(1, ObjectData(obj1), metadata=self.buildMetadata('saved v1')) history = portal_storage.getHistory(1, countPurged=False) self.assertEquals(sel, 0) self.assertEquals(len(history), 1) self.assertEqual(history[0].object.object.text, 'v1 of text') self.assertEqual(self.getComment(history[0]), 'saved v1') # save no 2 obj2 = Dummy() obj2.text = 'v2 of text' sel = portal_storage.save(1, ObjectData(obj2), metadata=self.buildMetadata('saved v2')) history = portal_storage.getHistory(1, countPurged=False) self.assertEquals(sel, 1) self.assertEquals(len(history), 2) self.assertEqual(history[0].object.object.text, 'v1 of text') self.assertEqual(self.getComment(history[0]), 'saved v1') self.assertEqual(history[1].object.object.text, 'v2 of text') self.assertEqual(self.getComment(history[1]), 'saved v2') # save no 3: purged oldest version obj3 = Dummy() obj3.text = 'v3 of text' sel = portal_storage.save(1, ObjectData(obj3), metadata=self.buildMetadata('saved v3')) history = portal_storage.getHistory(1, countPurged=False) length = len(history) # iterating over the history for i, vdata in enumerate(history): self.assertEquals(vdata.object.object.text, 'v%s of text' % (i+2)) self.assertEqual(self.getComment(vdata), 'saved v%s' % (i+2)) self.assertEquals(sel, 2) self.assertEquals(length, 2) self.assertEqual(history[0].object.object.text, 'v2 of text') self.assertEqual(self.getComment(history[0]), 'saved v2') self.assertEqual(history[1].object.object.text, 'v3 of text') self.assertEqual(self.getComment(history[1]), 'saved v3') # save no 4: purged oldest version obj4 = Dummy() obj4.text = 'v4 of text' sel = portal_storage.save(1, ObjectData(obj4), metadata=self.buildMetadata('saved v4')) history = portal_storage.getHistory(1, countPurged=False) length = len(history) # iterating over the history for i, vdata in enumerate(history): self.assertEquals(vdata.object.object.text, 'v%s of text' % (i+3)) self.assertEqual(self.getComment(vdata), 'saved v%s' % (i+3)) self.assertEquals(sel, 3) self.assertEquals(length, 2) self.assertEqual(history[0].object.object.text, 'v3 of text') self.assertEqual(self.getComment(history[0]), 'saved v3') self.assertEqual(history[1].object.object.text, 'v4 of text') self.assertEqual(self.getComment(history[1]), 'saved v4')