From 42e6670532510d187bb2527d279ad944c18f0ab7 Mon Sep 17 00:00:00 2001
From: Nicolas Delaby <nicolas@nexedi.com>
Date: Mon, 14 Dec 2009 09:55:35 +0000
Subject: [PATCH] * Merge previous created class (TestERP5WebCachingPolicy) in
 main one * Add Docstring to explain the test * Add comments * Use more
 ERP5'ish API (getDefaultModule(), newContent() without hardcoded ids)

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31268 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testERP5Web.py | 174 ++++++++++++++----------------
 1 file changed, 79 insertions(+), 95 deletions(-)

diff --git a/product/ERP5/tests/testERP5Web.py b/product/ERP5/tests/testERP5Web.py
index ee42ac8b83..17b628fe34 100644
--- a/product/ERP5/tests/testERP5Web.py
+++ b/product/ERP5/tests/testERP5Web.py
@@ -1,6 +1,5 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
-# -*- coding: utf-8 -*-
 #
 # Copyright (c) 2004, 2005, 2006 Nexedi SARL and Contributors.
 # All Rights Reserved.
@@ -43,7 +42,7 @@ from Products.ERP5Type.tests.utils import createZODBPythonScript
 
 LANGUAGE_LIST = ('en', 'fr', 'de', 'bg',)
 
-class TestERP5Web(ERP5TypeTestCase, ZopeTestCase.Functional):
+class TestERP5Web(ERP5TypeTestCase):
   """Test for erp5_web business template.
   """
   run_all_test = 1
@@ -70,8 +69,8 @@ class TestERP5Web(ERP5TypeTestCase, ZopeTestCase.Functional):
     uf._doAddUser(self.manager_username, self.manager_password, ['Manager'], [])
     self.login(self.manager_username)
 
-    self.web_page_module = self.portal.web_page_module
-    self.web_site_module = self.portal.web_site_module
+    self.web_page_module = self.portal.getDefaultModule('Web Page Module')
+    self.web_site_module = self.portal.getDefaultModule('Web Site Module')
     portal.Localizer.manage_changeDefaultLang(language = 'en')
     self.portal_id = self.portal.getId()
 
@@ -976,6 +975,82 @@ H茅 H茅 H茅!""", page.asText().strip())
     self.assertNotEquals(request.traverse(path)(REQUEST=request.REQUEST,
       RESPONSE=request.RESPONSE).find(new_content), -1)
 
+  def test_14_AccessWebSiteForWithDifferentUserPreferences(self):
+    """Check that Ram Cache Manager do not mix websection
+    rendering between users.
+    This test enable different preferences per users and check that
+    those preferences doesn't affect rendering for other users.
+    user          | preference
+
+    administrator | developper_mode activated
+    webeditor     | translator_mode activated
+    anonymous     | developper_mode & translator_mode disabled
+
+    The Signature used to detect enabled preferences in HTML Body are
+    manage_main for developper_mode
+    manage_messages for translator_mode
+    """
+    user = self.createUser('administrator')
+    self.createUserAssignement(user, {})
+    user = self.createUser('webeditor')
+    self.createUserAssignement(user, {})
+    transaction.commit()
+    self.tic()
+    preference_tool = self.getPreferenceTool()
+    isTransitionPossible = self.portal.portal_workflow.isTransitionPossible
+
+    #create or edit preference for administrator
+    administrator_preference = self.portal.portal_catalog.getResultValue(
+                                                 portal_type='Preference',
+                                                 owner='administrator')
+    if administrator_preference is None:
+      self.login('administrator')
+      administrator_preference = preference_tool.newContent(
+                                              portal_type='Preference')
+    if isTransitionPossible(administrator_preference, 'enable_action'):
+      administrator_preference.enable()
+
+    administrator_preference.setPreferredHtmlStyleDevelopperMode(True)
+    administrator_preference.setPreferredHtmlStyleTranslatorMode(False)
+
+    #create or edit preference for webeditor
+    webeditor_preference = self.portal.portal_catalog.getResultValue(
+                                                  portal_type='Preference',
+                                                  owner='webeditor')
+    if webeditor_preference is None:
+      self.login('webeditor')
+      webeditor_preference = preference_tool.newContent(
+                                              portal_type='Preference')
+    if isTransitionPossible(webeditor_preference, 'enable_action'):
+      webeditor_preference.enable()
+
+    webeditor_preference.setPreferredHtmlStyleDevelopperMode(False)
+    webeditor_preference.setPreferredHtmlStyleTranslatorMode(True)
+    self.login()
+    transaction.commit()
+    self.tic()
+
+    web_site = self.setupWebSite()
+    websection = self.setupWebSection()
+
+    websection_url = '%s/%s' % (self.portal.getId(), websection.getRelativeUrl())
+
+    #connect as administrator and check that only developper_mode is enable
+    response = self.publish(websection_url, 'administrator:administrator')
+    self.assertTrue('manage_main' in response.getBody())
+    self.assertTrue('manage_messages' not in response.getBody())
+
+    #connect as webeditor and check that only translator_mode is enable
+    response = self.publish(websection_url, 'webeditor:webeditor')
+    self.assertTrue('manage_main' not in response.getBody())
+    self.assertTrue('manage_messages' in response.getBody())
+
+    #anonymous user doesn't exists, check anonymous access without preferences
+    response = self.publish(websection_url, 'anonymous:anonymous')
+    self.assertTrue('manage_main' not in response.getBody())
+    self.assertTrue('manage_messages' not in response.getBody())
+
+
 class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
   """
   Test for erp5_web with simple security.
@@ -1494,100 +1569,9 @@ class TestERP5WebCategoryPublicationWorkflow(ERP5TypeTestCase):
     self.doActionFor(self.category, 'expire_action')
     self.assertEqual('expired_published', self.category.getValidationState())
 
-class TestERP5WebCachingPolicy(TestERP5Web):
-  """
-  Test Caching policy with different User Preferences
-  """
-
-  def getTitle(self):
-    return "Web Caching Policy"
-
-  def createLocalUser(self, name, role_list):
-    user_folder = self.getPortal().acl_users
-    user_folder._doAddUser(name, name, role_list, [])
-
-  def afterSetUp(self):
-    self.web_page_module = self.portal.web_page_module
-    self.web_site_module = self.portal.web_site_module
-    self.portal.Localizer.manage_changeDefaultLang(language='en')
-    self.createLocalUser('admin', ['Manager'])
-    user = self.createUser('erp5user')
-    self.createUserAssignement(user, {})
-    user = self.createUser('webmaster')
-    self.createUserAssignement(user, {})
-    transaction.commit()
-    self.tic()
-    if getattr(self.getPreferenceTool(), 'admin', None) is None:
-      self.login('admin')
-      pref = self.getPreferenceTool().newContent(portal_type='Preference',
-                                                 id='admin',
-                                                 preferred_html_style_developper_mode=True)
-      pref.enable()
-    if getattr(self.getPreferenceTool(), 'webmaster', None) is None:
-      self.login('webmaster')
-      pref = self.getPreferenceTool().newContent(portal_type='Preference',
-                                                 id='webmaster',
-                                                 preferred_html_style_translator_mode=True)
-      pref.enable()
-    if getattr(self.getPreferenceTool(), 'erp5user', None) is None:
-      self.login('erp5user')
-      pref = self.getPreferenceTool().newContent(portal_type='Preference',
-                                                 id='erp5user')
-      pref.enable()
-    self.login()
-    transaction.commit()
-    self.tic()
-
-  def clearModule(self, module):
-    module.manage_delObjects(list(module.objectIds()))
-    transaction.commit()
-    self.tic()
-
-  def beforeTearDown(self):
-    self.clearModule(self.portal.web_site_module)
-    self.clearModule(self.portal.web_page_module)
-
-  def test_01_AccessWebSiteForWithDifferentUserPreferences(self):
-    """
-    """
-    web_site = self.setupWebSite()
-    websection = self.setupWebSection()
-    page_reference = 'default-webpage'
-    webpage_list = self.setupWebSitePages(prefix=page_reference)
-    # set default web page for section
-    self.login('admin')
-    self.assertTrue(self.getPreferenceTool().getPreferredHtmlStyleDevelopperMode())
-    self.login('webmaster')
-    self.assertTrue(self.getPreferenceTool().getPreferredHtmlStyleTranslatorMode())
-    self.login('erp5user')
-    self.assertFalse(self.getPreferenceTool().getPreferredHtmlStyleDevelopperMode())
-    self.assertFalse(self.getPreferenceTool().getPreferredHtmlStyleTranslatorMode())
-    #
-    self.portal.REQUEST.set('ignore_layout', 0)
-    response = self.publish('%s/%s' % (self.portal.getId(), websection.getRelativeUrl()), 'admin:admin')
-    self.assertTrue('manage_main' in response.getBody())
-    self.assertTrue('manage_messages' not in response.getBody())
-    transaction.commit()
-    #
-    response = self.publish('%s/%s' % (self.portal.getId(), websection.getRelativeUrl()), 'webmaster:webmaster')
-    self.assertTrue('manage_main' not in response.getBody())
-    self.assertTrue('manage_messages' in response.getBody())
-    transaction.commit()
-    #
-    response = self.publish('%s/%s' % (self.portal.getId(), websection.getRelativeUrl()), 'erp5user:erp5user')
-    self.assertTrue('manage_main' not in response.getBody())
-    self.assertTrue('manage_messages' not in response.getBody())
-    #anonymous user doesn't exists
-    response = self.publish('%s/%s' % (self.portal.getId(), websection.getRelativeUrl()), 'anonymous:anonymous')
-    self.assertTrue('manage_main' not in response.getBody())
-    self.assertTrue('manage_messages' not in response.getBody())
-    transaction.commit()
-
-
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestERP5Web))
   suite.addTest(unittest.makeSuite(TestERP5WebWithSimpleSecurity))
   suite.addTest(unittest.makeSuite(TestERP5WebCategoryPublicationWorkflow))
-  suite.addTest(unittest.makeSuite(TestERP5WebCachingPolicy))
   return suite
-- 
2.30.9