diff --git a/product/ERP5/Document/WebSection.py b/product/ERP5/Document/WebSection.py index 102bf47b1c8ad4f7d27026db3d2f73abb42d622a..05b8e3b9b1e6e64792a4554f1d6b9c2bfb4492c1 100644 --- a/product/ERP5/Document/WebSection.py +++ b/product/ERP5/Document/WebSection.py @@ -65,7 +65,6 @@ class WebSection(Domain, PermanentURLMixIn): - WebSection_getDefaultDocumentValue - WebSection_getSectionValue - - WebSection_getWebSiteValue It defines the following REQUEST global variables: @@ -192,8 +191,15 @@ class WebSection(Domain, PermanentURLMixIn): # force user to login as specified in Web Section raise Unauthorized if document is not None: - self.REQUEST.set('current_web_document', document.__of__(self)) # Used to be document + self.REQUEST.set('current_web_document', document) self.REQUEST.set('is_web_section_default_document', 1) + document = aq_base(document.asContext( + id=self.getId(), # A quick hack to force URL to point to self + # XXX - A better solution here consists of using PermanentURL + # to find out under which id the document should be published + original_container=document.getParentValue(), + original_id=document.getId(), + editable_absolute_url=document.absolute_url())) return document.__of__(self)() return Domain.__call__(self) diff --git a/product/ERP5/tests/testERP5Web.py b/product/ERP5/tests/testERP5Web.py index 1863b821a20382011ecf8b02aa12de4056ff2612..9d9098c87bbd1df4e965c12c75bfc79d40785e88 100644 --- a/product/ERP5/tests/testERP5Web.py +++ b/product/ERP5/tests/testERP5Web.py @@ -28,6 +28,7 @@ ############################################################################## import os +import re import unittest import random @@ -273,7 +274,7 @@ class TestERP5Web(ERP5TypeTestCase, ZopeTestCase.Functional): def test_05_WebPageVersioning(self, quiet=quiet, run=run_all_test): """ Simple Case of showing the proper most recent public Web Page based on - (language, version + (language, version) """ if not run: return @@ -364,7 +365,7 @@ class TestERP5Web(ERP5TypeTestCase, ZopeTestCase.Functional): self.logout() self.assertRaises(Unauthorized, websection._getExtensibleContent, request, document_reference) - def test_07_WebPageTextContentSubstituions(self, quiet=quiet, run=run_all_test): + def test_07_WebPageTextContentSubstitutions(self, quiet=quiet, run=run_all_test): """ Simple Case of showing the proper text content with and without a substitution mapping method. @@ -456,8 +457,16 @@ class TestERP5Web(ERP5TypeTestCase, ZopeTestCase.Functional): self.assertEquals(web_page_en, websection.getDocumentValueList()[0].getObject()) def test_09_DefaultDocumentForWebSection(self, quiet=quiet, run=run_all_test): - """ Testetting default document for a Web Section. Test use case like workflow state of document. - Note: due to generic ERP5 Web implementation this test highly depends on WebSection_geDefaulttDocumentValueList + """ + Testing the default document for a Web Section. + + If a Web Section has a default document defined and if that default + document is published, then getDefaultDocumentValue on that + web section should return the latest version in the most + appropriate language of that default document. + + Note: due to generic ERP5 Web implementation this test highly depends + on WebSection_geDefaulttDocumentValueList """ if not run: return if not quiet: @@ -470,19 +479,70 @@ class TestERP5Web(ERP5TypeTestCase, ZopeTestCase.Functional): # create pages belonging to this publication_section 'documentation' web_page_en = portal.web_page_module.newContent(portal_type = 'Web Page', + id='section_home', language = 'en', reference='NXD-DDP', publication_section_list=publication_section_category_id_list[:1]) websection.setAggregateValue(web_page_en) get_transaction().commit() self.tic() - self.assertEqual(None, websection.getDefaultDocumentValue()) + self.assertEqual(None, websection.getDefaultDocumentValue()) # publish it web_page_en.publish() get_transaction().commit() self.tic() - self.assertEqual(web_page_en, websection.getDefaultDocumentValue()) + self.assertEqual(web_page_en, websection.getDefaultDocumentValue()) + # and make sure that the base meta tag which is generated + # uses the web section rather than the portal + html_page = websection() + from Products.ERP5.Document.Document import Document + base_list = re.findall(Document.base_parser, str(html_page)) + base_url = base_list[0] + self.assertEqual(base_url, "%s/%s/" % (websection.absolute_url(), websection.getId())) + def test_09b_DefaultDocumentForWebSite(self, quiet=quiet, run=run_all_test): + """ + Testing the default document for a Web Site. + + If a Web Section has a default document defined and if that default + document is published, then getDefaultDocumentValue on that + web section should return the latest version in the most + appropriate language of that default document. + + Note: due to generic ERP5 Web implementation this test highly depends + on WebSection_geDefaulttDocumentValueList + """ + if not run: return + if not quiet: + message = '\ntest_09b_DefaultDocumentForWebSite' + ZopeTestCase._print(message) + portal = self.getPortal() + website = self.setupWebSite() + publication_section_category_id_list = ['documentation', 'administration'] + + # create pages belonging to this publication_section 'documentation' + web_page_en = portal.web_page_module.newContent(portal_type = 'Web Page', + id='site_home', + language = 'en', + reference='NXD-DDP-Site', + publication_section_list=publication_section_category_id_list[:1]) + website.setAggregateValue(web_page_en) + get_transaction().commit() + self.tic() + self.assertEqual(None, website.getDefaultDocumentValue()) + # publish it + web_page_en.publish() + get_transaction().commit() + self.tic() + self.assertEqual(web_page_en, website.getDefaultDocumentValue()) + # and make sure that the base meta tag which is generated + # uses the web site rather than the portal + html_page = website() + from Products.ERP5.Document.Document import Document + base_list = re.findall(Document.base_parser, str(html_page)) + base_url = base_list[0] + self.assertEqual(base_url, "%s/%s/" % (website.absolute_url(), website.getId())) + def test_10_WebSectionAuthorizationForcedForDefaultDocument(self, quiet=quiet, run=run_all_test): """ Check that when a Web Section contains a default document not accessible by user we have a chance to require user to login. @@ -1150,7 +1210,7 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): self.portal.Localizer.changeLanguage('jp') self.assertEquals(0, len(section.WebSection_getDocumentValueList())) - # First Japonese Object + # First Japanese Object self.changeUser('erp5user') page_jp_0.publish() get_transaction().commit()