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 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")
Exemple #11
0
    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)
Exemple #12
0
    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 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')
Exemple #14
0
    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 _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'))
Exemple #17
0
    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')