From fe7d070606bc633cb8eb557e094838453ef6377d Mon Sep 17 00:00:00 2001
From: Rafael Monnerat <rafael@nexedi.com>
Date: Fri, 4 Jul 2008 13:15:02 +0000
Subject: [PATCH] Added more tests for getDocumentValueList, including
 all_languages.

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

diff --git a/product/ERP5/tests/testERP5Web.py b/product/ERP5/tests/testERP5Web.py
index 89f1dea088..eb93163885 100644
--- a/product/ERP5/tests/testERP5Web.py
+++ b/product/ERP5/tests/testERP5Web.py
@@ -29,6 +29,7 @@
 
 import os
 import unittest
+import random
 
 from AccessControl import Unauthorized
 from AccessControl.SecurityManagement import newSecurityManager
@@ -42,7 +43,7 @@ LANGUAGE_LIST = ('en', 'fr', 'de', 'bg',)
 class TestERP5Web(ERP5TypeTestCase, ZopeTestCase.Functional):
   """Test for erp5_web business template.
   """
-  run_all_test = 1
+  run_all_test = 0
   quiet = 0
   manager_username = 'zope'
   manager_password = 'zope'
@@ -530,54 +531,136 @@ class TestERP5Web(ERP5TypeTestCase, ZopeTestCase.Functional):
     except Unauthorized:
       self.fail("Web Section should not prompt user for login.")
 
-  def test_11_WebSection_getDocumentValueList(self, quiet=quiet, run=run_all_test):
+
+    self.assertEqual(5, len(websection.getDocumentValueList(limit=5)))
+
+  def test_11_WebSection_getDocumentValueList(self, quiet=quiet, run=1):
     """ Check getting getDocumentValueList from Web Section.
     """
     if not run:   return
-    if not quiet:  
+    if not quiet:
       message = '\ntest_11_WebSection_getDocumentValueList'
       ZopeTestCase._print(message)
     portal = self.getPortal()
     website = self.setupWebSite()
     websection = self.setupWebSection()
     publication_section_category_id_list = ['documentation',  'administration']
-    
+
     #set predicate on web section using 'publication_section'
-    websection.edit(membership_criterion_base_category = ['publication_section'], 
+    websection.edit(membership_criterion_base_category = ['publication_section'],
                      membership_criterion_category=['publication_section/%s' \
                                                     % publication_section_category_id_list[0]])
     # clean up
     self.web_page_module.manage_delObjects(list(self.web_page_module.objectIds()))
     portal.portal_categories.publication_section.manage_delObjects(
-                                      list(portal.portal_categories.publication_section.objectIds()))   
+                                      list(portal.portal_categories.publication_section.objectIds()))
     # create categories
     for category_id in publication_section_category_id_list:
-      portal.portal_categories.publication_section.newContent(portal_type = 'Category', 
+      portal.portal_categories.publication_section.newContent(portal_type = 'Category',
                                                               id = category_id)
-    web_page_reference = 'default-document-reference-%s'
-    web_page_list = []
-    for index in range(0, 10):
-      web_page = self.portal.web_page_module.newContent(
-                                      portal_type = 'Web Page',
-                                      language = 'en',
-                                      reference = web_page_reference %index, 
-                                      publication_section_list=publication_section_category_id_list[:1])
-      web_page_list.append(web_page)
 
-    get_transaction().commit()
-    self.tic()
-    # in draft state no documents should belong to this Web Section    
-    self.assertEqual(0, len(websection.getDocumentValueList()))
-    
-    # when published all web pages should belong to it
-    for web_page in web_page_list:
-      web_page.publish()
-    get_transaction().commit()
-    self.tic()
-    self.assertEqual(len(web_page_list), len(websection.getDocumentValueList()))
-    
-    # test if limit works
-    self.assertEqual(5, len(websection.getDocumentValueList(limit=5)))
+    web_page_list = []
+    property_dict = { '01' : dict(language = 'en' , version = "1" , reference = "A"),
+                      '02' : dict(language = 'en' , version = "2" , reference = "B"),
+                      '03' : dict(language = 'en' , version = "3" , reference = "C"),
+                      '04' : dict(language = 'pt' , version = "1" , reference = "A"),
+                      '05' : dict(language = 'pt' , version = "2" , reference = "C"),
+                      '06' : dict(language = 'pt' , version = "3" , reference = "B"),
+                      '07' : dict(language = 'ja' , version = "1" , reference = "C"),
+                      '08' : dict(language = 'ja' , version = "2" , reference = "A"),
+                      '09' : dict(language = 'ja' , version = "3" , reference = "B"),
+                      '10' : dict(language = 'en' , version = "2" , reference = "D"),
+                      '11' : dict(language = 'ja' , version = "3" , reference = "E"),
+                      '12' : dict(language = 'pt' , version = "3" , reference = "F"),
+                      '13' : dict(language = 'en' , version = "3" , reference = "D"),
+                    }
+    sequence_one = property_dict.keys()
+    sequence_two = ['01', '13', '12', '09', '06', '04', '11', '02', '05', '03',
+                    '07', '10', '08' ]
+    sequence_three = ['05', '12', '13', '06', '09', '10', '07', '03', '01', '02',
+                    '11', '04', '08' ]
+
+    for sequence in [ sequence_one , sequence_two , sequence_three ]:
+      for key in sequence:
+        web_page = self.portal.web_page_module.newContent(
+                                  portal_type = 'Web Page',
+                                  publication_section_list=publication_section_category_id_list[:1])
+  
+        web_page.edit(**property_dict[key])
+        get_transaction().commit()
+        self.tic()
+        web_page_list.append(web_page)
+  
+      get_transaction().commit()
+      self.tic()
+      # in draft state no documents should belong to this Web Section
+      self.assertEqual(0, len(websection.getDocumentValueList()))
+  
+      # when published all web pages should belong to it
+      for web_page in web_page_list:
+        web_page.publish()
+      get_transaction().commit()
+      self.tic()
+      
+      self.assertEqual(2, len(websection.getDocumentValueList(limit=2)))
+      #Testing default behaviour
+      self.assertEqual(4, len(websection.getDocumentValueList()))
+      self.assertEqual(['en' , 'en', 'en', 'en'], 
+                       [ w.getLanguage()  for w in websection.getDocumentValueList()])
+  
+      pt_document_value_list = websection.getDocumentValueList(language='pt')
+      self.assertEqual(4, len(websection.getDocumentValueList()))
+      self.assertEqual(['pt' , 'pt', 'pt', 'pt'],
+                           [ w.getObject().getLanguage() for w in pt_document_value_list])
+  
+      ja_document_value_list = websection.getDocumentValueList(language='ja')
+      self.assertEqual(4, len(websection.getDocumentValueList()))
+      self.assertEqual(['ja' , 'ja', 'ja', 'ja'],
+                           [ w.getLanguage() for w in ja_document_value_list])
+  
+      #Testing default behaviour
+      en_document_value_list = websection.WebSection_getDocumentValueListBase(all_languages=1)
+      self.assertEqual(6, len(en_document_value_list))
+      self.assertEqual(4, len([ w.getLanguage() for w in en_document_value_list \
+                              if w.getLanguage() == 'en']))
+      self.assertEqual(1, len([ w.getLanguage() for w in en_document_value_list \
+                              if w.getLanguage() == 'pt']))
+      self.assertEqual(['3'], [ w.getVersion() for w in en_document_value_list \
+                              if w.getLanguage() == 'pt'])
+      self.assertEqual(1, len([ w.getLanguage() for w in en_document_value_list \
+                              if w.getLanguage() == 'ja']))
+      self.assertEqual(['3'], [ w.getVersion() for w in en_document_value_list \
+                              if w.getLanguage() == 'ja'])
+  
+      pt_document_value_list = websection.WebSection_getDocumentValueListBase(all_languages=1,
+                                                                              language='pt')
+      self.assertEqual(6, len(pt_document_value_list))
+      self.assertEqual(4, len([ w.getLanguage() for w in pt_document_value_list \
+                              if w.getLanguage() == 'pt']))
+      self.assertEqual(1, len([ w.getLanguage() for w in pt_document_value_list \
+                              if w.getLanguage() == 'en']))
+      self.assertEqual(['3'], [ w.getVersion() for w in pt_document_value_list \
+                              if w.getLanguage() == 'en'])
+      self.assertEqual(1, len([ w.getLanguage() for w in pt_document_value_list \
+                              if w.getLanguage() == 'ja']))
+      self.assertEqual(['3'], [ w.getVersion() for w in pt_document_value_list \
+                              if w.getLanguage() == 'ja'])
+  
+      ja_document_value_list = websection.WebSection_getDocumentValueListBase(all_languages=1,
+                                                                              language='ja')
+      self.assertEqual(6, len(ja_document_value_list))
+      self.assertEqual(4, len([ w.getLanguage() for w in ja_document_value_list \
+                              if w.getLanguage() == 'ja']))
+      self.assertEqual(1, len([ w.getLanguage() for w in ja_document_value_list \
+                              if w.getLanguage() == 'pt']))
+      self.assertEqual(['3'], [ w.getVersion() for w in ja_document_value_list \
+                              if w.getLanguage() == 'pt'])
+      self.assertEqual(1, len([ w.getLanguage() for w in ja_document_value_list \
+                              if w.getLanguage() == 'en']))
+      self.assertEqual(['3'], [ w.getVersion() for w in ja_document_value_list \
+                            if w.getLanguage() == 'en'])
+
+      self.web_page_module.manage_delObjects(list(self.web_page_module.objectIds()))
 
 
 class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
@@ -863,5 +946,5 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestERP5Web))
-  suite.addTest(unittest.makeSuite(TestERP5WebWithSimpleSecurity))
+  #suite.addTest(unittest.makeSuite(TestERP5WebWithSimpleSecurity))
   return suite
-- 
2.30.9