Commit c3304c6f authored by Romain Courteaud's avatar Romain Courteaud

[ERP5/WebSite] Allow document to be indexed when accessed from language temp web site

parent 7a5286f5
##############################################################################
#
# Copyright (c) 2019 Nexedi SA and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
##############################################################################
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
import unittest
WEB_SITE_ID = "test_language_indexation"
class TestWebSiteLanguageIndexation(ERP5TypeTestCase):
def getTitle(self):
return "Test Web Site Language Indexation."
def getBusinessTemplateList(self):
return (
"erp5_base",
"erp5_web",
"erp5_ui_test_core",
"erp5_ui_test",
"erp5_l10n_fr"
)
def setupWebSite(self, **kw):
"""
Setup Web Site
"""
if WEB_SITE_ID in self.portal.web_site_module:
self.portal.web_site_module.manage_delObjects(WEB_SITE_ID)
website = self.portal.web_site_module.newContent(
portal_type="Web Site",
id=WEB_SITE_ID,
available_language_list=['en', 'fr'],
**kw
)
website.publish()
return website
def assertDocumentIndexed(self, doc, expected_result):
sql_foo_list = self.portal.portal_catalog(relative_url=doc.getRelativeUrl())
self.assertEquals(len(sql_foo_list), int(expected_result))
def test_isSubtreeIndexable(self):
web_site = self.setupWebSite()
self.tic()
# Check that web site itself is indexable
self.assertDocumentIndexed(web_site, True)
# Test that document created in the context of a web site
# is correctly indexed
foo_module = web_site.restrictedTraverse('foo_module')
foo = foo_module.newContent(portal_type='Foo')
self.tic()
self.assertDocumentIndexed(foo, True)
# Test that document created in an "asContext" web site
# is not indexed
foo_module = web_site.asContext().restrictedTraverse('foo_module')
foo = foo_module.newContent(portal_type='Foo')
self.tic()
self.assertDocumentIndexed(foo, False)
# Test that document created in the context of a temp web site
# is not indexed
tmp_web_site = web_site.getParentValue().newContent(temp_object=True,
portal_type='Web Site')
foo_module = tmp_web_site.restrictedTraverse('foo_module')
foo = foo_module.newContent(portal_type='Foo')
self.tic()
self.assertDocumentIndexed(foo, False)
# Test that document created in the context of a temp web section
# is not indexed
web_section = web_site.newContent(temp_object=True,
portal_type='Web Section')
foo_module = web_section.restrictedTraverse('foo_module')
foo = foo_module.newContent(portal_type='Foo')
self.tic()
self.assertDocumentIndexed(foo, False)
# Test that document created in the context of a temp web site
# for language is correctly indexed
foo_module = web_site.restrictedTraverse('fr/foo_module')
foo = foo_module.newContent(portal_type='Foo')
self.tic()
self.assertDocumentIndexed(foo, True)
# Test that document created in the context of a temp web site
# for language inside a temp web site is not indexed
foo_module = web_site.asContext().restrictedTraverse('fr/foo_module')
foo = foo_module.newContent(portal_type='Foo')
self.tic()
self.assertDocumentIndexed(foo, False)
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>testWebSiteLanguage</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Check indexation of documents created/modified in a temporary web site</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>test.erp5.testWebSiteLanguage</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
</ZopeData>
test.erp5.testWebSiteLanguage
\ No newline at end of file
erp5_full_text_mroonga_catalog
erp5_ui_test_core
erp5_ui_test
erp5_l10n_fr
\ No newline at end of file
......@@ -185,9 +185,17 @@ class WebSite(WebSection):
query_string = request.get('QUERY_STRING')
if query_string:
request['minimum_language_redirect_url'] += '?' + query_string
return self.getOriginalDocument().asContext(id=name)
return self.getOriginalDocument().asContext(id=name, __language_web_site=True)
return WebSection.getExtensibleContent(self, request, name)
security.declarePublic('isSubtreeIndexable')
def isSubtreeIndexable(self):
if self.isTempObject() and getattr(self, '__language_web_site', False):
# temp Web Site used to select a language must not prevent
# document indexation
return self.aq_inner.aq_parent.isSubtreeIndexable()
return super(WebSite, self).isSubtreeIndexable()
def _getExtensibleContent(self, request, name):
"""
Legacy API
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment