From 3e0b983ffa323c7b6a1f21b338ad90e181883c1d Mon Sep 17 00:00:00 2001
From: Ivan Tyagov <ivan@nexedi.com>
Date: Mon, 21 Mar 2011 08:31:08 +0000
Subject: [PATCH] Add implicit relations test for sphinx based use case.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@44453 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testKM.py | 110 ++++++++++++++++++++++++++++++++++-
 1 file changed, 109 insertions(+), 1 deletion(-)

diff --git a/product/ERP5/tests/testKM.py b/product/ERP5/tests/testKM.py
index 8524868af5..b726ef441f 100644
--- a/product/ERP5/tests/testKM.py
+++ b/product/ERP5/tests/testKM.py
@@ -33,6 +33,8 @@ from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from AccessControl.SecurityManagement import newSecurityManager
 from Products.ERP5Type.tests.backportUnittest import expectedFailure
 from Products.ERP5Type.Base import TempBase
+from Products.ERP5OOo.tests.testDms import makeFileUpload,TestDocumentMixin, TestDocument
+import transaction
 
 def _getGadgetInstanceUrlFromKnowledgePad(knowledge_pad,  gadget):
   """ Get Knowledge Box's relative URL specialising a gadget in a Knowledge Pad."""
@@ -40,7 +42,7 @@ def _getGadgetInstanceUrlFromKnowledgePad(knowledge_pad,  gadget):
                 portal_type = 'Knowledge Box',  
                 specialise_uid = gadget.getUid())[0].getObject().getRelativeUrl()
 
-class TestKMMixIn(ERP5TypeTestCase):
+class TestKMMixIn(TestDocumentMixin):
   """
     Mix in class for Knowledge Management system.
   """
@@ -72,6 +74,7 @@ class TestKMMixIn(ERP5TypeTestCase):
                                      custom_render_method_id='WebSite_viewKnowledgePad',
                                      layout_configuration_form_id='WebSection_viewKMMinimalThemeConfiguration')
     self.websection = self.website.newContent(portal_type='Web Section')
+    TestDocumentMixin.afterSetUp(self)
 
   def setupWebSite(self, **kw):
     """
@@ -1021,6 +1024,111 @@ class TestKMSearch(TestKMMixIn):
     self.assertSameSet([], \
                        [portal.restrictedTraverse(x) for x in search_result_list[0].section_list])
 
+  @expectedFailure
+  def test_03_testImplicitRelations(self):
+    """
+      Test implicit (wiki-like) relations.
+      XXX: find way to have test implementation used from testDms.test_07_testImplicitRelations
+    """
+   
+    portal = self.portal
+    website = self.portal.web_site_module.km_test_web_site
+    web_page = self.web_page
+    
+    self.setupSphinx()
+    self.stepTic()
+    self.changeSkin('KM')
+        
+    def sqlresult_to_document_list(result):
+      return [i.getObject() for i in result]
+
+    # create docs to be referenced:
+    # (1) TEST, 002, en
+    filename = 'TEST-en-002.odt'
+    file = makeFileUpload(filename)
+    document1 = self.portal.portal_contributions.newContent(file=file)
+
+    # (2) TEST, 002, fr
+    as_name = 'TEST-fr-002.odt'
+    file = makeFileUpload(filename, as_name)
+    document2 = self.portal.portal_contributions.newContent(file=file)
+
+    # (3) TEST, 003, en
+    as_name = 'TEST-en-003.odt'
+    file = makeFileUpload(filename, as_name)
+    document3 = self.portal.portal_contributions.newContent(file=file)
+
+    # create docs to contain references in text_content:
+    # REF, 001, en; "I use reference to look up TEST"
+    filename = 'REF-en-001.odt'
+    file = makeFileUpload(filename)
+    document4 = self.portal.portal_contributions.newContent(file=file)
+
+    # REF, 002, en; "I use reference to look up TEST"
+    filename = 'REF-en-002.odt'
+    file = makeFileUpload(filename)
+    document5 = self.portal.portal_contributions.newContent(file=file)
+
+    # REFLANG, 001, en: "I use reference and language to look up TEST-fr"
+    filename = 'REFLANG-en-001.odt'
+    file = makeFileUpload(filename)
+    document6 = self.portal.portal_contributions.newContent(file=file)
+
+    # REFVER, 001, en: "I use reference and version to look up TEST-002"
+    filename = 'REFVER-en-001.odt'
+    file = makeFileUpload(filename)
+    document7 = self.portal.portal_contributions.newContent(file=file)
+
+    # REFVERLANG, 001, en: "I use reference, version and language to look up TEST-002-en"
+    filename = 'REFVERLANG-en-001.odt'
+    file = makeFileUpload(filename)
+    document8 = self.portal.portal_contributions.newContent(file=file)
+
+    transaction.commit()
+    self.tic()
+    # the implicit predecessor will find documents by reference.
+    # version and language are not used.
+    # the implicit predecessors should be:
+    
+   
+    # for (1): REF-002, REFLANG, REFVER, REFVERLANG
+    # document1's reference is TEST. getImplicitPredecessorValueList will
+    # return latest version of documents which contains string "TEST".
+    #self.assertSameSet(
+    #  [document5, document6, document7, document8],
+    #  sqlresult_to_document_list(document1.getImplicitPredecessorValueList()))
+
+    # clear transactional variable cache
+    transaction.commit()
+
+    # the implicit successors should be return document with appropriate
+    # language.
+
+    # if user language is 'en'.
+    self.portal.Localizer.changeLanguage('en')
+
+    self.assertSameSet(
+      [document3],
+      sqlresult_to_document_list(document5.getImplicitSuccessorValueList()))
+
+    # clear transactional variable cache
+    transaction.commit()
+
+    # if user language is 'fr'.
+    self.portal.Localizer.changeLanguage('fr')
+    self.assertSameSet(
+      [document2],
+      sqlresult_to_document_list(document5.getImplicitSuccessorValueList()))
+
+    # clear transactional variable cache
+    transaction.commit()
+
+    # if user language is 'ja'.
+    self.portal.Localizer.changeLanguage('ja')
+    self.assertSameSet(
+      [document3],
+      sqlresult_to_document_list(document5.getImplicitSuccessorValueList()))
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestKM))
-- 
2.30.9