def testReplaceDescription(self):
        from collective.searchandreplace.searchreplaceutility import getRawText
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory('Document', 'doc1')
        doc1 = getattr(self.portal, 'doc1')
        edit_content(
            doc1,
            title='Test Title',
            description='Test Description',
            text='Test Case')
        self.assertEqual(doc1.Description(), 'Test Description')
        # Search it.
        parameters = dict(
            context=doc1,
            find='test desc',
            replaceText='foo',
            matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 1)
        self.assertEqual(doc1.Description(), 'Test Description')

        # Replace it.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 1)
        # Note: we have replaced only part of the description.
        self.assertEqual(doc1.Description(), 'fooription')

        # Other fields are not changed.
        self.assertEqual(doc1.Title(), 'Test Title')
        self.assertEqual(getRawText(doc1), 'Test Case')
Exemple #2
0
 def testMatchCase(self):
     setRoles(self.portal, TEST_USER_ID, ["Manager"])
     self.portal.invokeFactory("Document", "doc2")
     doc2 = getattr(self.portal, "doc2")
     edit_content(doc2, title="find title", text="Find Case")
     results = self.srutil.findObjects(doc2, "find case", matchCase=True)
     self.assertEqual(len(results), 0)
Exemple #3
0
    def testReplaceDescription(self):
        from collective.searchandreplace.searchreplaceutility import getRawText

        setRoles(self.portal, TEST_USER_ID, ["Manager"])
        self.portal.invokeFactory("Document", "doc1")
        doc1 = getattr(self.portal, "doc1")
        edit_content(doc1,
                     title="Find Title",
                     description="Find Description",
                     text="Find Case")
        self.assertEqual(doc1.Description(), "Find Description")
        # Search it.
        parameters = dict(context=doc1, findWhat="find desc", matchCase=False)
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 1)
        self.assertEqual(doc1.Description(), "Find Description")

        r_parameters = dict(replaceWith="replaced", )
        r_parameters.update(parameters)
        results = self.srutil.replaceAllMatches(**r_parameters)
        self.assertEqual(results, 1)
        # Note: we have replaced only part of the description.
        self.assertEqual(doc1.Description(), "replacedription")

        # Other fields are not changed.
        self.assertEqual(doc1.Title(), "Find Title")
        self.assertEqual(getRawText(doc1), "Find Case")
Exemple #4
0
    def testReplaceSubjectTwiceInThirdItem(self):

        registry = getUtility(IRegistry)
        settings = registry.forInterface(ISearchReplaceSettings, check=False)
        settings.include_lines_fields = True

        setRoles(self.portal, TEST_USER_ID, ["Manager"])
        self.portal.invokeFactory("Document", "doc1")
        doc1 = getattr(self.portal, "doc1")
        edit_content(
            doc1,
            title="Find Title",
            subject=("Replace", "Replace", "Find subject find subject"),
        )
        self.assertEqual(doc1.Subject(),
                         ("Replace", "Replace", "Find subject find subject"))
        # Search it.
        parameters = dict(
            context=doc1,
            findWhat="find subject",
            matchCase=False,
            onlySearchableText=True,
        )
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 2)
        r_parameters = dict(replaceWith="replaced", )
        r_parameters.update(parameters)
        results = self.srutil.replaceAllMatches(**r_parameters)
        # Note: replacing returns an int, not a list.
        self.assertEqual(results, 2)
        self.assertEqual(doc1.Subject(),
                         ("Replace", "Replace", "replaced replaced"))
        # Other fields are not changed.
        self.assertEqual(doc1.Title(), "Find Title")
Exemple #5
0
    def testReplaceEmpty(self):
        from collective.searchandreplace.searchreplaceutility import getRawText

        setRoles(self.portal, TEST_USER_ID, ["Manager"])
        self.portal.invokeFactory("Document", "doc1")
        doc1 = getattr(self.portal, "doc1")
        edit_content(
            doc1,
            title="Find My Title",
            description="Find My Description",
            text="Find My Text",
        )
        self.assertEqual(getRawText(doc1), "Find My Text")
        # Search it.
        parameters = dict(context=doc1, findWhat=" My", matchCase=False)
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 3)
        self.assertEqual(getRawText(doc1), "Find My Text")
        r_parameters = dict(replaceWith="", )
        r_parameters.update(parameters)
        results = self.srutil.replaceAllMatches(**r_parameters)
        # Note: replacing returns an int, not a list.
        self.assertEqual(results, 3)
        self.assertEqual(getRawText(doc1), "Find Text")
        self.assertEqual(doc1.Title(), "Find Title")
        self.assertEqual(doc1.Description(), "Find Description")
    def testReplaceRawHTML(self):
        from collective.searchandreplace.searchreplaceutility import getRawText
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory('Document', 'doc1')
        doc1 = getattr(self.portal, 'doc1')
        edit_content(doc1,
                     title='Test Title',
                     text='My <strong>Test</strong> Case')
        self.assertEqual(getRawText(doc1), 'My <strong>Test</strong> Case')

        # Search only in SearchableText.
        parameters = dict(context=doc1,
                          find='<strong>Test</strong>',
                          replaceText='<em>Test</em>',
                          onlySearchableText=True,
                          matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 0)

        # Search everywhere.
        parameters['onlySearchableText'] = False
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 1)
        self.assertEqual(getRawText(doc1), 'My <strong>Test</strong> Case')

        # Replace it.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        # Note: replacing returns an int, not a list.
        self.assertEqual(results, 1)
        self.assertEqual(getRawText(doc1), 'My <em>Test</em> Case')
Exemple #7
0
    def testReplaceRawHTML(self):
        from collective.searchandreplace.searchreplaceutility import getRawText

        setRoles(self.portal, TEST_USER_ID, ["Manager"])
        self.portal.invokeFactory("Document", "doc1")
        doc1 = getattr(self.portal, "doc1")
        edit_content(doc1,
                     title="Find Title",
                     text="My <strong>Test</strong> Case")
        self.assertEqual(getRawText(doc1), "My <strong>Test</strong> Case")

        # Search only in SearchableText.
        parameters = dict(
            context=doc1,
            findWhat="<strong>Test</strong>",
            onlySearchableText=True,
            matchCase=False,
        )
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 0)

        # Search everywhere.
        parameters["onlySearchableText"] = False
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 1)
        self.assertEqual(getRawText(doc1), "My <strong>Test</strong> Case")

        r_parameters = dict(replaceWith="<em>Test</em>", )
        r_parameters.update(parameters)
        # Replace it.
        results = self.srutil.replaceAllMatches(**r_parameters)
        # Note: replacing returns an int, not a list.
        self.assertEqual(results, 1)
        self.assertEqual(getRawText(doc1), "My <em>Test</em> Case")
    def testReplaceDescription(self):
        from collective.searchandreplace.searchreplaceutility import getRawText
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory('Document', 'doc1')
        doc1 = getattr(self.portal, 'doc1')
        edit_content(doc1,
                     title='Test Title',
                     description='Test Description',
                     text='Test Case')
        self.assertEqual(doc1.Description(), 'Test Description')
        # Search it.
        parameters = dict(context=doc1,
                          find='test desc',
                          replaceText='foo',
                          matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 1)
        self.assertEqual(doc1.Description(), 'Test Description')

        # Replace it.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 1)
        # Note: we have replaced only part of the description.
        self.assertEqual(doc1.Description(), 'fooription')

        # Other fields are not changed.
        self.assertEqual(doc1.Title(), 'Test Title')
        self.assertEqual(getRawText(doc1), 'Test Case')
    def testReplaceRawHTML(self):
        from collective.searchandreplace.searchreplaceutility import getRawText
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        self.portal.invokeFactory('Document', 'doc1')
        doc1 = getattr(self.portal, 'doc1')
        edit_content(
            doc1,
            title='Test Title',
            text='My <strong>Test</strong> Case')
        self.assertEqual(getRawText(doc1), 'My <strong>Test</strong> Case')

        # Search only in SearchableText.
        parameters = dict(
            context=doc1,
            find='<strong>Test</strong>',
            replaceText='<em>Test</em>',
            onlySearchableText=True,
            matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 0)

        # Search everywhere.
        parameters['onlySearchableText'] = False
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 1)
        self.assertEqual(getRawText(doc1), 'My <strong>Test</strong> Case')

        # Replace it.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        # Note: replacing returns an int, not a list.
        self.assertEqual(results, 1)
        self.assertEqual(getRawText(doc1), 'My <em>Test</em> Case')
Exemple #10
0
    def testReplaceTextFieldsButNotTextlineFields(self):
        from collective.searchandreplace.searchreplaceutility import getRawText

        registry = getUtility(IRegistry)
        settings = registry.forInterface(ISearchReplaceSettings, check=False)
        settings.include_textline_fields = False

        setRoles(self.portal, TEST_USER_ID, ["Manager"])
        # Note: we use our sample type here, which has extra fields.
        # This currently is Archetypes when testing on Plone 4,
        # and Dexterity when testing on Plone 5.
        self.portal.invokeFactory("SampleType", "doc1")
        doc1 = getattr(self.portal, "doc1")
        edit_content(
            doc1,
            title="Find Title",
            description="Find Description",
            rich="Find Rich",
            plain="Find Plain",
            line="Find Line",
            unsearchable="Find Unsearchable",
        )

        # Test the initial values.
        self.assertEqual(doc1.Title(), "Find Title")
        self.assertEqual(doc1.Description(), "Find Description")
        self.assertEqual(getRawText(doc1, "rich"), "Find Rich")
        self.assertEqual(getRawText(doc1, "plain"), "Find Plain")
        self.assertEqual(getRawText(doc1, "line"), "Find Line")
        self.assertEqual(getRawText(doc1, "unsearchable"), "Find Unsearchable")

        # Search it.
        parameters = dict(context=doc1, findWhat="Find", matchCase=False)
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 5)

        # Nothing should have changed.
        self.assertEqual(doc1.Title(), "Find Title")
        self.assertEqual(doc1.Description(), "Find Description")
        self.assertEqual(getRawText(doc1, "rich"), "Find Rich")
        self.assertEqual(getRawText(doc1, "plain"), "Find Plain")
        self.assertEqual(getRawText(doc1, "line"), "Find Line")
        self.assertEqual(getRawText(doc1, "unsearchable"), "Find Unsearchable")

        r_parameters = dict(replaceWith="Foo", )
        r_parameters.update(parameters)
        results = self.srutil.replaceAllMatches(**r_parameters)
        self.assertEqual(results, 5)

        # Most fields should have changed.
        self.assertEqual(doc1.Title(), "Foo Title")
        self.assertEqual(doc1.Description(), "Foo Description")
        self.assertEqual(getRawText(doc1, "rich"), "Foo Rich")
        self.assertEqual(getRawText(doc1, "plain"), "Foo Plain")
        self.assertEqual(getRawText(doc1, "unsearchable"), "Foo Unsearchable")

        # But not the textline field.
        self.assertEqual(getRawText(doc1, "line"), "Find Line")
    def testReplaceAllTextFields(self):
        from collective.searchandreplace.searchreplaceutility import getRawText
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        # Note: we use our sample type here, which has extra fields.
        # This currently is Archetypes when testing on Plone 4,
        # and Dexterity when testing on Plone 5.
        self.portal.invokeFactory('SampleType', 'doc1')
        doc1 = getattr(self.portal, 'doc1')
        edit_content(
            doc1,
            title='Test Title',
            description='Test Description',
            rich='Test Rich',
            plain='Test Plain',
            line='Test Line',
            unsearchable='Test Unsearchable',
        )

        # Test the initial values.
        self.assertEqual(doc1.Title(), 'Test Title')
        self.assertEqual(doc1.Description(), 'Test Description')
        self.assertEqual(getRawText(doc1, 'rich'), 'Test Rich')
        self.assertEqual(getRawText(doc1, 'plain'), 'Test Plain')
        self.assertEqual(getRawText(doc1, 'line'), 'Test Line')
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Search it.
        parameters = dict(
            context=doc1,
            find='Test',
            replaceText='Foo',
            matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 5)

        # Nothing should have changed.
        self.assertEqual(doc1.Title(), 'Test Title')
        self.assertEqual(doc1.Description(), 'Test Description')
        self.assertEqual(getRawText(doc1, 'rich'), 'Test Rich')
        self.assertEqual(getRawText(doc1, 'plain'), 'Test Plain')
        self.assertEqual(getRawText(doc1, 'line'), 'Test Line')
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Replace it.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 5)

        # Most fields should have changed.
        self.assertEqual(doc1.Title(), 'Foo Title')
        self.assertEqual(doc1.Description(), 'Foo Description')
        self.assertEqual(getRawText(doc1, 'rich'), 'Foo Rich')
        self.assertEqual(getRawText(doc1, 'plain'), 'Foo Plain')
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Foo Unsearchable')

        # But not the textline field.
        self.assertEqual(getRawText(doc1, 'line'), 'Test Line')
Exemple #12
0
 def setUp(self):
     self.portal = self.layer['portal']
     self.srutil = getUtility(ISearchReplaceUtility)
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     self.portal.invokeFactory('Document', 'doc1')
     self.doc1 = getattr(self.portal, 'doc1')
     edit_content(self.doc1,
                  title='Test test Test test',
                  text='Test test\nTest test')
Exemple #13
0
 def setUp(self):
     self.portal = self.layer["portal"]
     self.srutil = getUtility(ISearchReplaceUtility)
     setRoles(self.portal, TEST_USER_ID, ["Manager"])
     self.portal.invokeFactory("Document", "doc1")
     self.doc1 = getattr(self.portal, "doc1")
     edit_content(
         self.doc1, title="Find find Find find", text="Find find\nFind find"
     )
    def testReplaceAllTextFields(self):
        from collective.searchandreplace.searchreplaceutility import getRawText
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        # Note: we use our sample type here, which has extra fields.
        # This currently is Archetypes when testing on Plone 4,
        # and Dexterity when testing on Plone 5.
        self.portal.invokeFactory('SampleType', 'doc1')
        doc1 = getattr(self.portal, 'doc1')
        edit_content(
            doc1,
            title='Test Title',
            description='Test Description',
            rich='Test Rich',
            plain='Test Plain',
            line='Test Line',
            unsearchable='Test Unsearchable',
        )

        # Test the initial values.
        self.assertEqual(doc1.Title(), 'Test Title')
        self.assertEqual(doc1.Description(), 'Test Description')
        self.assertEqual(getRawText(doc1, 'rich'), 'Test Rich')
        self.assertEqual(getRawText(doc1, 'plain'), 'Test Plain')
        self.assertEqual(getRawText(doc1, 'line'), 'Test Line')
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Search it.
        parameters = dict(context=doc1,
                          find='Test',
                          replaceText='Foo',
                          matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 5)

        # Nothing should have changed.
        self.assertEqual(doc1.Title(), 'Test Title')
        self.assertEqual(doc1.Description(), 'Test Description')
        self.assertEqual(getRawText(doc1, 'rich'), 'Test Rich')
        self.assertEqual(getRawText(doc1, 'plain'), 'Test Plain')
        self.assertEqual(getRawText(doc1, 'line'), 'Test Line')
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Replace it.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 5)

        # Most fields should have changed.
        self.assertEqual(doc1.Title(), 'Foo Title')
        self.assertEqual(doc1.Description(), 'Foo Description')
        self.assertEqual(getRawText(doc1, 'rich'), 'Foo Rich')
        self.assertEqual(getRawText(doc1, 'plain'), 'Foo Plain')
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Foo Unsearchable')

        # But not the textline field.
        self.assertEqual(getRawText(doc1, 'line'), 'Test Line')
Exemple #15
0
 def testMatchCase(self):
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     self.portal.invokeFactory('Document', 'doc2')
     doc2 = getattr(self.portal, 'doc2')
     edit_content(doc2, title='test title', text='Test Case')
     results = self.srutil.searchObjects(doc2,
                                         'test case',
                                         replaceText='foo',
                                         matchCase=True)
     self.assertEqual(len(results), 0)
Exemple #16
0
    def testReplaceUnsearchableTextFields(self):
        from collective.searchandreplace.searchreplaceutility import getRawText

        setRoles(self.portal, TEST_USER_ID, ["Manager"])
        # Note: we use our sample type here, which has extra fields.
        # This currently is Archetypes when testing on Plone 4,
        # and Dexterity when testing on Plone 5.
        self.portal.invokeFactory("SampleType", "doc1")
        doc1 = getattr(self.portal, "doc1")
        edit_content(
            doc1,
            title="Find Title",
            unsearchable="Find Unsearchable",
        )

        # Test the initial values.
        self.assertEqual(doc1.Title(), "Find Title")
        self.assertEqual(getRawText(doc1, "unsearchable"), "Find Unsearchable")

        # Search it with onlySearchableText true.
        parameters = dict(
            context=doc1,
            findWhat="Unsearchable",
            onlySearchableText=True,
            matchCase=False,
        )
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 0)

        # Replace it with onlySearchableText true.
        r_parameters = dict(replaceWith="Foo", )
        r_parameters.update(parameters)
        results = self.srutil.replaceAllMatches(**r_parameters)
        self.assertEqual(results, 0)

        # Nothing should have changed.
        self.assertEqual(getRawText(doc1, "unsearchable"), "Find Unsearchable")

        # Now search everything, so onlySearchableText false.
        parameters["onlySearchableText"] = False
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 1)

        # Nothing should have changed.
        self.assertEqual(getRawText(doc1, "unsearchable"), "Find Unsearchable")

        # Replace it.
        r_parameters["onlySearchableText"] = False
        results = self.srutil.replaceAllMatches(**r_parameters)
        self.assertEqual(results, 1)
        self.assertEqual(getRawText(doc1, "unsearchable"), "Find Foo")
    def testReplaceUnsearchableTextFields(self):
        from collective.searchandreplace.searchreplaceutility import getRawText
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        # Note: we use our sample type here, which has extra fields.
        # This currently is Archetypes when testing on Plone 4,
        # and Dexterity when testing on Plone 5.
        self.portal.invokeFactory('SampleType', 'doc1')
        doc1 = getattr(self.portal, 'doc1')
        edit_content(
            doc1,
            title='Test Title',
            unsearchable='Test Unsearchable',
        )

        # Test the initial values.
        self.assertEqual(doc1.Title(), 'Test Title')
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Search it with onlySearchableText true.
        parameters = dict(
            context=doc1,
            find='Unsearchable',
            replaceText='Foo',
            onlySearchableText=True,
            matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 0)

        # Replace it with onlySearchableText true.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 0)

        # Nothing should have changed.
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Now search everything, so onlySearchableText false.
        parameters['onlySearchableText'] = False
        parameters['doReplace'] = False
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 1)

        # Nothing should have changed.
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Replace it.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 1)
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Foo')
    def testReplaceUnsearchableTextFields(self):
        from collective.searchandreplace.searchreplaceutility import getRawText
        setRoles(self.portal, TEST_USER_ID, ['Manager'])
        # Note: we use our sample type here, which has extra fields.
        # This currently is Archetypes when testing on Plone 4,
        # and Dexterity when testing on Plone 5.
        self.portal.invokeFactory('SampleType', 'doc1')
        doc1 = getattr(self.portal, 'doc1')
        edit_content(
            doc1,
            title='Test Title',
            unsearchable='Test Unsearchable',
        )

        # Test the initial values.
        self.assertEqual(doc1.Title(), 'Test Title')
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Search it with onlySearchableText true.
        parameters = dict(context=doc1,
                          find='Unsearchable',
                          replaceText='Foo',
                          onlySearchableText=True,
                          matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 0)

        # Replace it with onlySearchableText true.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 0)

        # Nothing should have changed.
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Now search everything, so onlySearchableText false.
        parameters['onlySearchableText'] = False
        parameters['doReplace'] = False
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 1)

        # Nothing should have changed.
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Unsearchable')

        # Replace it.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 1)
        self.assertEqual(getRawText(doc1, 'unsearchable'), 'Test Foo')
Exemple #19
0
 def setUp(self):
     self.portal = self.layer["portal"]
     self.srutil = getUtility(ISearchReplaceUtility)
     setRoles(self.portal, TEST_USER_ID, ["Manager"])
     self.portal.invokeFactory("Document", "doc1")
     doc1 = getattr(self.portal, "doc1")
     edit_content(doc1,
                  title="Find Title",
                  description="Find Description",
                  text="Find Case")
     # when an object has never been saved to repository
     # any call to save to repository, like in _afterReplace,
     # triggers a change in the modification date
     # for this reason, save the document to avoid noise when testing
     # modification date
     repository = getToolByName(self.portal, "portal_repository", None)
     repository.save(doc1)
Exemple #20
0
    def testDoNotFindSubject(self):

        setRoles(self.portal, TEST_USER_ID, ["Manager"])
        self.portal.invokeFactory("Document", "doc1")
        doc1 = getattr(self.portal, "doc1")
        edit_content(doc1,
                     title="Find Title",
                     subject=("Find subject", "Replace"))
        self.assertEqual(doc1.Subject(), ("Find subject", "Replace"))
        # Search it.
        parameters = dict(
            context=doc1,
            findWhat="find subject",
            matchCase=False,
            onlySearchableText=True,
        )
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 0)
Exemple #21
0
 def testOneMatch(self):
     setRoles(self.portal, TEST_USER_ID, ["Manager"])
     self.portal.invokeFactory("Document", "doc1")
     doc1 = getattr(self.portal, "doc1")
     edit_content(doc1, title="Find Title", text="Find Case")
     self.portal.invokeFactory("Document", "doc2")
     doc2 = getattr(self.portal, "doc2")
     edit_content(doc2, title="find title", text="find case")
     # path1 = '%s' %  '/'.join(doc1.getPhysicalPath())
     # path2 = '%s' % '/'.join(doc2.getPhysicalPath())
     # paths = {path1: {'body': [0]}, path2: {'body': [0]}}
     results = self.srutil.findObjects(
         self.portal,
         "find case",
         matchCase=True,
         # occurences=paths
     )
     self.assertEqual(len(results), 1)
Exemple #22
0
 def testOneMatch(self):
     setRoles(self.portal, TEST_USER_ID, ['Manager'])
     self.portal.invokeFactory('Document', 'doc1')
     doc1 = getattr(self.portal, 'doc1')
     edit_content(doc1, title='Test Title', text='Test Case')
     self.portal.invokeFactory('Document', 'doc2')
     doc2 = getattr(self.portal, 'doc2')
     edit_content(doc2, title='test title', text='test case')
     # path1 = '%s' %  '/'.join(doc1.getPhysicalPath())
     # path2 = '%s' % '/'.join(doc2.getPhysicalPath())
     # paths = {path1: {'body': [0]}, path2: {'body': [0]}}
     results = self.srutil.searchObjects(
         self.portal,
         'test case',
         replaceText='foo',
         matchCase=True,
         # searchItems=paths
     )
     self.assertEqual(len(results), 1)
Exemple #23
0
    def testReplaceOnlyEditableContent(self):
        # setRoles(self.portal, TEST_USER_ID, ['Manager'])
        login(self.layer["app"], SITE_OWNER_NAME)
        # /mainfolder
        self.portal.invokeFactory("Folder", "mainfolder")
        mainfolder = getattr(self.portal, "mainfolder")
        edit_content(mainfolder, title="Find Title")

        # /mainfolder/maindoc
        mainfolder.invokeFactory("Document", "maindoc")
        maindoc = getattr(mainfolder, "maindoc")
        edit_content(maindoc, title="Find Title")

        # /mainfolder/subfolder
        mainfolder.invokeFactory("Folder", "subfolder")
        subfolder = getattr(mainfolder, "subfolder")
        edit_content(subfolder, title="Find Title")

        # /mainfolder/subfolder/subdoc
        subfolder.invokeFactory("Document", "subdoc")
        subdoc = getattr(subfolder, "subdoc")
        edit_content(subdoc, title="Find Title")

        # Give test user a local Editor role on the sub folder.
        subfolder.manage_addLocalRoles(TEST_USER_ID, ("Editor", ))

        self.portal.portal_catalog.reindexObject(mainfolder)
        self.portal.portal_catalog.reindexObject(maindoc)
        self.portal.portal_catalog.reindexObject(subfolder)
        self.portal.portal_catalog.reindexObject(subdoc)

        # We are logged in as portal owner, so we can edit everything.
        results = self.srutil.findObjects(mainfolder,
                                          "find title",
                                          matchCase=False)
        self.assertEqual(len(results), 4)

        # Login as the test user again.
        logout()
        login(self.portal, TEST_USER_NAME)
        # Now we can edit less: only the sub folder and sub doc.
        parameters = dict(context=mainfolder,
                          findWhat="find title",
                          matchCase=False)
        results = self.srutil.findObjects(**parameters)
        self.assertEqual(len(results), 2)
        paths = [x["path"] for x in results]
        self.assertIn("/".join(subfolder.getPhysicalPath()), paths)
        self.assertIn("/".join(subdoc.getPhysicalPath()), paths)
        self.assertNotIn("/".join(mainfolder.getPhysicalPath()), paths)
        self.assertNotIn("/".join(maindoc.getPhysicalPath()), paths)

        # Nothing has been changed, because we were only searching.
        self.assertEqual(mainfolder.Title(), "Find Title")
        self.assertEqual(maindoc.Title(), "Find Title")
        self.assertEqual(subfolder.Title(), "Find Title")
        self.assertEqual(subfolder.Title(), "Find Title")

        r_parameters = dict(replaceWith="replaced", )
        r_parameters.update(parameters)
        results = self.srutil.replaceAllMatches(**r_parameters)
        self.assertEqual(results, 2)
        self.assertEqual(mainfolder.Title(), "Find Title")
        self.assertEqual(maindoc.Title(), "Find Title")
        self.assertEqual(subfolder.Title(), "replaced")
        self.assertEqual(subfolder.Title(), "replaced")
    def testReplaceOnlyEditableContent(self):
        # setRoles(self.portal, TEST_USER_ID, ['Manager'])
        login(self.layer['app'], SITE_OWNER_NAME)
        # /mainfolder
        self.portal.invokeFactory('Folder', 'mainfolder')
        mainfolder = getattr(self.portal, 'mainfolder')
        edit_content(mainfolder, title='Test Title')

        # /mainfolder/maindoc
        mainfolder.invokeFactory('Document', 'maindoc')
        maindoc = getattr(mainfolder, 'maindoc')
        edit_content(maindoc, title='Test Title')

        # /mainfolder/subfolder
        mainfolder.invokeFactory('Folder', 'subfolder')
        subfolder = getattr(mainfolder, 'subfolder')
        edit_content(subfolder, title='Test Title')

        # /mainfolder/subfolder/subdoc
        subfolder.invokeFactory('Document', 'subdoc')
        subdoc = getattr(subfolder, 'subdoc')
        edit_content(subdoc, title='Test Title')

        # Give test user a local Editor role on the sub folder.
        subfolder.manage_addLocalRoles(TEST_USER_ID, ('Editor', ))

        self.portal.portal_catalog.reindexObject(mainfolder)
        self.portal.portal_catalog.reindexObject(maindoc)
        self.portal.portal_catalog.reindexObject(subfolder)
        self.portal.portal_catalog.reindexObject(subdoc)

        # We are logged in as portal owner, so we can edit everything.
        results = self.srutil.searchObjects(mainfolder,
                                            'test title',
                                            replaceText='foo',
                                            matchCase=False)
        self.assertEqual(len(results), 4)

        # Login as the test user again.
        logout()
        login(self.portal, TEST_USER_NAME)
        # Now we can edit less: only the sub folder and sub doc.
        parameters = dict(context=mainfolder,
                          find='test title',
                          replaceText='foo',
                          matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 2)
        paths = [x['path'] for x in results]
        self.assertIn('/'.join(subfolder.getPhysicalPath()), paths)
        self.assertIn('/'.join(subdoc.getPhysicalPath()), paths)
        self.assertNotIn('/'.join(mainfolder.getPhysicalPath()), paths)
        self.assertNotIn('/'.join(maindoc.getPhysicalPath()), paths)

        # Nothing has been changed, because we were only searching.
        self.assertEqual(mainfolder.Title(), 'Test Title')
        self.assertEqual(maindoc.Title(), 'Test Title')
        self.assertEqual(subfolder.Title(), 'Test Title')
        self.assertEqual(subfolder.Title(), 'Test Title')

        # Now replace instead of only searching.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 2)
        self.assertEqual(mainfolder.Title(), 'Test Title')
        self.assertEqual(maindoc.Title(), 'Test Title')
        self.assertEqual(subfolder.Title(), 'foo')
        self.assertEqual(subfolder.Title(), 'foo')
    def testReplaceOnlyEditableContent(self):
        # setRoles(self.portal, TEST_USER_ID, ['Manager'])
        login(self.layer['app'], SITE_OWNER_NAME)
        # /mainfolder
        self.portal.invokeFactory('Folder', 'mainfolder')
        mainfolder = getattr(self.portal, 'mainfolder')
        edit_content(mainfolder, title='Test Title')

        # /mainfolder/maindoc
        mainfolder.invokeFactory('Document', 'maindoc')
        maindoc = getattr(mainfolder, 'maindoc')
        edit_content(maindoc, title='Test Title')

        # /mainfolder/subfolder
        mainfolder.invokeFactory('Folder', 'subfolder')
        subfolder = getattr(mainfolder, 'subfolder')
        edit_content(subfolder, title='Test Title')

        # /mainfolder/subfolder/subdoc
        subfolder.invokeFactory('Document', 'subdoc')
        subdoc = getattr(subfolder, 'subdoc')
        edit_content(subdoc, title='Test Title')

        # Give test user a local Editor role on the sub folder.
        subfolder.manage_addLocalRoles(TEST_USER_ID, ('Editor',))

        self.portal.portal_catalog.reindexObject(mainfolder)
        self.portal.portal_catalog.reindexObject(maindoc)
        self.portal.portal_catalog.reindexObject(subfolder)
        self.portal.portal_catalog.reindexObject(subdoc)

        # We are logged in as portal owner, so we can edit everything.
        results = self.srutil.searchObjects(
            mainfolder,
            'test title',
            replaceText='foo',
            matchCase=False)
        self.assertEqual(len(results), 4)

        # Login as the test user again.
        logout()
        login(self.portal, TEST_USER_NAME)
        # Now we can edit less: only the sub folder and sub doc.
        parameters = dict(
            context=mainfolder,
            find='test title',
            replaceText='foo',
            matchCase=False)
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(len(results), 2)
        paths = [x['path'] for x in results]
        self.assertIn('/'.join(subfolder.getPhysicalPath()), paths)
        self.assertIn('/'.join(subdoc.getPhysicalPath()), paths)
        self.assertNotIn('/'.join(mainfolder.getPhysicalPath()), paths)
        self.assertNotIn('/'.join(maindoc.getPhysicalPath()), paths)

        # Nothing has been changed, because we were only searching.
        self.assertEqual(mainfolder.Title(), 'Test Title')
        self.assertEqual(maindoc.Title(), 'Test Title')
        self.assertEqual(subfolder.Title(), 'Test Title')
        self.assertEqual(subfolder.Title(), 'Test Title')

        # Now replace instead of only searching.
        parameters['doReplace'] = True
        results = self.srutil.searchObjects(**parameters)
        self.assertEqual(results, 2)
        self.assertEqual(mainfolder.Title(), 'Test Title')
        self.assertEqual(maindoc.Title(), 'Test Title')
        self.assertEqual(subfolder.Title(), 'foo')
        self.assertEqual(subfolder.Title(), 'foo')