From 54950c6cf03f5ddecbb10cfa8d48bd85b56cbbb0 Mon Sep 17 00:00:00 2001
From: Arnaud Fontaine <arnaud.fontaine@nexedi.com>
Date: Fri, 5 Apr 2013 18:09:40 +0900
Subject: [PATCH] Implement Extensions for Functional Test to be able to check
 whether a report has been generated.

---
 .../ExtensionTemplateItem/ERP5Zuite.py        | 31 +++++++++++++++++++
 .../Zuite_isReportGenerated.xml               | 28 +++++++++++++++++
 .../Zuite_prepareReportDirectory.xml          | 28 +++++++++++++++++
 bt5/erp5_ui_test_core/bt/change_log           |  3 ++
 bt5/erp5_ui_test_core/bt/revision             |  2 +-
 .../tests/ERP5TypeFunctionalTestCase.py       | 11 ++++++-
 6 files changed, 101 insertions(+), 2 deletions(-)
 create mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_isReportGenerated.xml
 create mode 100644 bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_prepareReportDirectory.xml

diff --git a/bt5/erp5_ui_test_core/ExtensionTemplateItem/ERP5Zuite.py b/bt5/erp5_ui_test_core/ExtensionTemplateItem/ERP5Zuite.py
index 6561283b1e..0eaee8541c 100644
--- a/bt5/erp5_ui_test_core/ExtensionTemplateItem/ERP5Zuite.py
+++ b/bt5/erp5_ui_test_core/ExtensionTemplateItem/ERP5Zuite.py
@@ -40,3 +40,34 @@ def appendTestToWebPage(text, test_text):
   else:
     root.replace(table_list[0], tutorial_test)
   return lxml.html.tostring(root).replace('\n','').replace("\'","'")
+
+from App.config import getConfiguration
+import os
+
+def prepareReportDirectory(self, expected_filename):
+  """
+  Remove existing report with the given filename if any. This must be called
+  before a report button is clicked
+  """
+  filename_path = os.path.join(getConfiguration().instancehome, 'var',
+                               expected_filename)
+
+  if os.path.exists(filename_path):
+    os.remove(filename_path)
+
+  return 'Done'
+
+def isReportGenerated(self, expected_filename):
+  """
+  Check that the report has been generated. Firefox will not prompt for PDF
+  files as defined in ERP5Type.tests.ERP5TypeFunctionalTestCase.Firefox in
+  getPrefJs() method
+  """
+  filename_path = os.path.join(getConfiguration().instancehome, 'var',
+                               expected_filename)
+
+  if os.path.isfile(filename_path):
+    os.remove(filename_path)
+    return 'Done'
+
+  return 'Report not generated!'
diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_isReportGenerated.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_isReportGenerated.xml
new file mode 100644
index 0000000000..ad21402d3b
--- /dev/null
+++ b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_isReportGenerated.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_function</string> </key>
+            <value> <string>isReportGenerated</string> </value>
+        </item>
+        <item>
+            <key> <string>_module</string> </key>
+            <value> <string>ERP5Zuite</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Zuite_isReportGenerated</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Zuite_isReportGenerated</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_prepareReportDirectory.xml b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_prepareReportDirectory.xml
new file mode 100644
index 0000000000..c9fe46a6b6
--- /dev/null
+++ b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_prepareReportDirectory.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ExternalMethod" module="Products.ExternalMethod.ExternalMethod"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_function</string> </key>
+            <value> <string>prepareReportDirectory</string> </value>
+        </item>
+        <item>
+            <key> <string>_module</string> </key>
+            <value> <string>ERP5Zuite</string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Zuite_prepareReportDirectory</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Zuite_prepareReportDirectory</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test_core/bt/change_log b/bt5/erp5_ui_test_core/bt/change_log
index 0bd7232b36..872b1540fa 100644
--- a/bt5/erp5_ui_test_core/bt/change_log
+++ b/bt5/erp5_ui_test_core/bt/change_log
@@ -1,3 +1,6 @@
+2013-04-05 arnaud.fontaine
+* Implement Extensions to be able to check whether a report has been generated.
+
 2011-10-11 Xavier
 * Selenium core updated (2.6.0)
 * captureEntirePageScreenshot is available to take screenshots with Selenium (Firefox only)
diff --git a/bt5/erp5_ui_test_core/bt/revision b/bt5/erp5_ui_test_core/bt/revision
index 2b82dfea30..eebd1d10b6 100644
--- a/bt5/erp5_ui_test_core/bt/revision
+++ b/bt5/erp5_ui_test_core/bt/revision
@@ -1 +1 @@
-60
\ No newline at end of file
+61
\ No newline at end of file
diff --git a/product/ERP5Type/tests/ERP5TypeFunctionalTestCase.py b/product/ERP5Type/tests/ERP5TypeFunctionalTestCase.py
index e0e455418d..4c2fdd7ba5 100644
--- a/product/ERP5Type/tests/ERP5TypeFunctionalTestCase.py
+++ b/product/ERP5Type/tests/ERP5TypeFunctionalTestCase.py
@@ -187,6 +187,7 @@ class Firefox(Browser):
     os.environ['MOZ_NO_REMOTE'] = '0'
 
   def getPrefJs(self):
+    from App.config import getConfiguration
     return """
 // Don't ask if we want to switch default browsers
 user_pref("browser.shell.checkDefaultBrowser", false);
@@ -224,7 +225,15 @@ user_pref("capability.principal.codebase.p1.subjectName", "");
 
 // For debugging, do not waste space on screen
 user_pref("browser.tabs.autoHide", true);
-""" % (self.host, self.port)
+
+// This is required to download reports without requiring user interaction
+// (See ERP5UpgradeUtils for corresponding Extensions)
+user_pref("browser.download.folderList", 2);
+user_pref("browser.download.manager.showWhenStarting", false);
+user_pref("browser.download.dir", "%s");
+user_pref("browser.helperApps.neverAsk.saveToDisk", "application/pdf");
+""" % (self.host, self.port,
+       os.path.join(getConfiguration().instancehome, 'var'))
 
 class PhantomJS(Browser):
   def _createRunJS(self):
-- 
2.30.9