def test_initial_version_is_created_when_updating_the_file(self):
        self.login(self.regular_user)
        versioner = Versioner(self.document)

        self.assertFalse(versioner.has_initial_version())
        self.document.file = NamedBlobFile(data='New', filename=u'test.txt')
        self.assertTrue(versioner.has_initial_version())
        self.assertEquals(
            1, versioner.get_history_metadata().getLength(countPurged=False))
    def test_doc_property_writer_creates_initial_version(self):
        self.activate_feature('doc-properties')
        self.login(self.dossier_responsible)

        versioner = Versioner(self.document)
        self.assertFalse(versioner.has_initial_version())

        DocPropertyWriter(self.document).update_doc_properties(only_existing=False)

        self.assertTrue(versioner.has_initial_version())
        self.assertEquals(
            1, versioner.get_history_metadata().getLength(countPurged=False))
    def test_ftw_journal_still_present_on_working_copy(self):
        self.login(self.regular_user)

        self.create_version(self.document)

        versioner = Versioner(self.document)
        shadow_history = versioner.get_history_metadata()
        self.assertEquals(2, len(shadow_history))

        ann = IAnnotations(self.document)
        self.assertIn(self.JOURNAL_KEY, ann)
        self.assertEqual(3, len(ann[self.JOURNAL_KEY]))
    def test_updating_a_document_via_webdav_creates_initial_version_too(self, browser):
        self.login(self.regular_user)

        versioner = Versioner(self.document)
        self.assertFalse(versioner.has_initial_version())

        writer = IRawWriteFile(self.document, None)
        writer.write('New Data')
        writer.close()

        self.assertTrue(versioner.has_initial_version())
        self.assertEquals(
            1, versioner.get_history_metadata().getLength(countPurged=False))
    def test_ftw_journal_is_not_versioned(self):
        self.login(self.regular_user)

        self.create_version(self.document)

        versioner = Versioner(self.document)
        shadow_history = versioner.get_history_metadata()
        self.assertEquals(2, len(shadow_history))

        for version_number in range(len(shadow_history)):
            historic_obj = versioner.retrieve(version_number)
            historic_annotations = IAnnotations(historic_obj)
            self.assertNotIn(self.JOURNAL_KEY, historic_annotations)
    def test_checksum_is_updated_before_storing_version(self, browser):
        content = bumblebee_asset('example.docx').bytes()
        document = create(Builder('document')
                          .within(self.dossier)
                          .attach_file_containing(
                              content,
                              u'example.docx')
                          .checked_out())

        document.update_file('foo',
                             content_type='text/plain',
                             filename=u'foo.txt')
        notify(ObjectModifiedEvent(document))
        transaction.commit()

        # checksum has not been updated
        self.assertEqual(
            DOCX_CHECKSUM, IBumblebeeDocument(document).get_checksum())

        manager = getMultiAdapter((document, self.portal.REQUEST),
                                  ICheckinCheckoutManager)
        manager.checkin()

        # checksum has been updated
        self.assertEqual(TXT_CHECKSUM,
                         IBumblebeeDocument(document).get_checksum())

        versioner = Versioner(document)
        history = versioner.get_history_metadata()
        self.assertEqual(2, history.getLength(countPurged=False))

        version_0 = versioner.retrieve(0)
        self.assertEqual(DOCX_CHECKSUM,
                         IBumblebeeDocument(version_0).get_checksum())

        # document checksum should be updated before storing the version
        version_1 = versioner.retrieve(1)
        self.assertEqual(TXT_CHECKSUM,
                         IBumblebeeDocument(version_1).get_checksum())
    def test_checksum_is_updated_before_storing_version(self, browser):
        content = bumblebee_asset('example.docx').bytes()
        document = create(
            Builder('document').within(self.dossier).attach_file_containing(
                content, u'example.docx').checked_out())

        document.update_file('foo',
                             content_type='text/plain',
                             filename=u'foo.txt')
        notify(ObjectModifiedEvent(document))
        transaction.commit()

        # checksum has not been updated
        self.assertEqual(DOCX_CHECKSUM,
                         IBumblebeeDocument(document).get_checksum())

        manager = getMultiAdapter((document, self.portal.REQUEST),
                                  ICheckinCheckoutManager)
        manager.checkin()

        # checksum has been updated
        self.assertEqual(TXT_CHECKSUM,
                         IBumblebeeDocument(document).get_checksum())

        versioner = Versioner(document)
        history = versioner.get_history_metadata()
        self.assertEqual(2, history.getLength(countPurged=False))

        version_0 = versioner.retrieve(0)
        self.assertEqual(DOCX_CHECKSUM,
                         IBumblebeeDocument(version_0).get_checksum())

        # document checksum should be updated before storing the version
        version_1 = versioner.retrieve(1)
        self.assertEqual(TXT_CHECKSUM,
                         IBumblebeeDocument(version_1).get_checksum())