コード例 #1
0
ファイル: test_es.py プロジェクト: tkimnguyen/castle.cms
        def setUp(self):
            self.portal = self.layer['portal']
            self.request = self.layer['request']
            login(self.portal, TEST_USER_NAME)
            setRoles(self.portal, TEST_USER_ID, ('Member', 'Manager'))
            registry = getUtility(IRegistry)
            settings = registry.forInterface(IElasticSettings)
            settings.enabled = True
            settings.sniffer_timeout = None
            catalog = getToolByName(self.portal, 'portal_catalog')
            catalog._elasticcustomindex = 'plone-test-index'
            es = ElasticSearchCatalog(catalog)
            es.recreateCatalog()
            catalog.manage_catalogRebuild()
            transaction.commit()

            # have to do commit for es integration...
            folder = api.content.create(
                type='Folder',
                id='esfolder1',
                container=self.portal,
                title='Foobar folder')
            api.content.create(
                type='Document',
                id='esdoc1',
                container=folder,
                title='Foobar one')
            doc = api.content.create(
                type='Document',
                id='esdoc2',
                container=folder,
                subject=('foobar',),
                title='Foobar two')
            api.content.create(
                type='Document',
                id='esdoc3',
                container=folder,
                title='Foobar three')

            ann = IAnnotations(doc)
            ann[COUNT_ANNOTATION_KEY] = {
                'twitter_matomo': 5,
                'facebook': 5,
            }
            doc.reindexObject()
            transaction.commit()

            url = 'http://{}:9200/plone-test-index/_flush'.format(host)
            requests.post(url)
コード例 #2
0
ファイル: test_es.py プロジェクト: sm2x/castle.cms
    class TestES(unittest.TestCase):

        layer = CASTLE_PLONE_INTEGRATION_TESTING

        def setUp(self):
            self.portal = self.layer['portal']
            self.request = self.layer['request']
            login(self.portal, TEST_USER_NAME)
            setRoles(self.portal, TEST_USER_ID, ('Member', 'Manager'))

            transaction.begin()
            self.folder = api.content.create(type='Folder',
                                             id='esfolder1',
                                             container=self.portal,
                                             title='Foobar folder')
            self.folder2 = api.content.create(type='Folder',
                                              id='esfolder2',
                                              container=self.folder,
                                              title='Foobar subfolder')
            self.esdoc1 = api.content.create(type='Document',
                                             id='esdoc1',
                                             container=self.folder,
                                             title='Foobar one')
            self.esdoc2 = api.content.create(type='Document',
                                             id='esdoc2',
                                             container=self.folder,
                                             subject=('foobar', ),
                                             title='Foobar two')
            self.esdoc3 = api.content.create(type='Document',
                                             id='esdoc3',
                                             container=self.folder,
                                             title='Foobar three')
            self.esdoc4 = api.content.create(type='Document',
                                             id='esdoc4',
                                             container=self.folder,
                                             title='Foobar four')
            self.esdoc5 = api.content.create(type='Document',
                                             id='esdoc5',
                                             container=self.folder2,
                                             title='Foobar five')
            self.esdoc6 = api.content.create(type='Document',
                                             id='esdoc6',
                                             container=self.folder,
                                             title='Foobar six',
                                             exclude_from_search=True)
            ann = IAnnotations(self.esdoc2)
            ann[COUNT_ANNOTATION_KEY] = {
                'twitter_matomo': 5,
                'facebook': 5,
            }
            for item in [
                    self.folder, self.esdoc1, self.esdoc2, self.esdoc3,
                    self.esdoc5
            ]:
                api.content.transition(obj=item, to_state='published')
                item.reindexObject()

            self._es_update()
            transaction.commit()

            url = 'http://{}:9200/plone-test-index/_flush'.format(host)
            requests.post(url)

        def _es_update(self):
            registry = getUtility(IRegistry)
            settings = registry.forInterface(IElasticSettings)
            settings.enabled = True
            settings.sniffer_timeout = 1.0
            self.catalog = getToolByName(self.portal, 'portal_catalog')
            self.catalog._elasticcustomindex = 'plone-test-index'
            self.es = ElasticSearchCatalog(self.catalog)
            self.es.recreateCatalog()
            self.catalog.manage_catalogRebuild()

        def tearDown(self):
            transaction.begin()
            api.content.delete(self.portal.esfolder1)
            transaction.commit()

        def _test_ajax_search_rank_social(self):
            self.request.form.update({
                'SearchableText': 'Foobar',
                'portal_type': 'Document'
            })
            view = SearchAjax(self.portal, self.request)
            result = json.loads(view())
            self.assertEquals(result['count'], 3)
            self.assertEquals(result['results'][0]['path'],
                              '/esfolder1/esdoc2')

        def test_ajax_search_pt(self):
            self.request.form.update({
                'SearchableText': 'Foobar',
                'portal_type': 'Folder'
            })
            view = SearchAjax(self.portal, self.request)
            result = json.loads(view())
            self.assertEquals(result['count'], 1)
            self.assertEquals(result['results'][0]['path'], '/esfolder1')

        def test_ajax_search_subject(self):
            self.request.form.update({
                'SearchableText': 'Foobar',
                'Subject': 'foobar'
            })
            view = SearchAjax(self.portal, self.request)
            result = json.loads(view())
            self.assertEquals(result['count'], 1)
            self.assertEquals(result['results'][0]['path'],
                              '/esfolder1/esdoc2')

        def test_es_querylisting_unicode_issue(self):
            tile = get_tile(self.request, self.portal,
                            'castle.cms.querylisting', {})
            # should not cause errors...
            self.request.form.update({'Title': 'ma\xf1on'})
            self.assertTrue(tile.filter_pattern_config != '{}')
            tile()

        def test_ajax_search_with_private_parents(self):
            self.request.form.update({
                'SearchableText': 'Foobar',
                # 'Subject': 'foobar'
            })
            view_1 = SearchAjax(self.portal, self.request)
            result_1 = json.loads(view_1())
            self.assertEqual(result_1['count'], 4)
            api.portal.set_registry_record(
                'plone.allow_public_in_private_container', True)
            view_2 = SearchAjax(self.portal, self.request)
            result_2 = json.loads(view_2())
            self.assertEqual(result_2['count'], 5)