From f1d8f1c1da91c515682c8fe528c3573bf72167af Mon Sep 17 00:00:00 2001
From: mattpiwik <matthieu.aubry@gmail.com>
Date: Tue, 13 Jul 2010 16:43:28 +0000
Subject: [PATCH] Refs #1446 Integration tests were often different simply
 because the internal idsubdatatable in the response was different. However.
 this idsubtable is really just an internal ID and it is not expected that
 this ID is the same across several archiving processes. Therefore integration
 tests will now set a special flag to remove the ID from the response, to
 minimize noise.

git-svn-id: http://dev.piwik.org/svn/trunk@2495 59fd770c-687e-43c8-a1e3-f5a4ff64c105
---
 core/API/DocumentationGenerator.php           |  2 ++
 core/API/ResponseBuilder.php                  |  1 +
 core/DataTable/Renderer.php                   |  6 +++++
 core/DataTable/Renderer/Csv.php               |  3 ++-
 core/DataTable/Renderer/Json.php              |  1 +
 core/DataTable/Renderer/Php.php               | 25 ++++++++++++-------
 core/DataTable/Renderer/Xml.php               |  1 +
 tests/integration/Integration.php             |  3 ++-
 ...torTwoVisits__Actions.getDownloads_day.xml |  1 -
 ...itorTwoVisits__Actions.getOutlinks_day.xml |  1 -
 ...itorTwoVisits__Actions.getPageUrls_day.xml |  1 -
 ...torTwoVisits__Referers.getKeywords_day.xml |  1 -
 ...oVisits__Referers.getSearchEngines_day.xml |  1 -
 ...torTwoVisits__Referers.getWebsites_day.xml |  1 -
 ...ifferentDays__Referers.getWebsites_day.xml |  3 ---
 ...ferentDays__Referers.getWebsites_month.xml |  2 --
 ...fferentDays__Referers.getWebsites_week.xml |  3 ---
 ...fferentDays__Referers.getWebsites_year.xml |  2 --
 18 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/core/API/DocumentationGenerator.php b/core/API/DocumentationGenerator.php
index 1e98c81f87..f8fc5803af 100644
--- a/core/API/DocumentationGenerator.php
+++ b/core/API/DocumentationGenerator.php
@@ -156,7 +156,9 @@ class Piwik_API_DocumentationGenerator
 		$aParameters = Piwik_API_Proxy::getInstance()->getParametersList($class, $methodName);
 		// Kindly force some known generic parameters to appear in the final list
 		// the parameter 'format' can be set to all API methods (used in tests)
+		// the parameter 'hideIdSubDatable' is used for integration tests only
 		$aParameters['format'] = false;
+		$aParameters['hideIdSubDatable'] = false;
 		
 		$moduleName = Piwik_API_Proxy::getInstance()->getModuleNameFromClassName($class);
 		$urlExample = '?module=API&method='.$moduleName.'.'.$methodName.'&';
diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php
index 2d06ead09c..0e708fa006 100644
--- a/core/API/ResponseBuilder.php
+++ b/core/API/ResponseBuilder.php
@@ -182,6 +182,7 @@ class Piwik_API_ResponseBuilder
 		$renderer = Piwik_DataTable_Renderer::factory($format);
 		$renderer->setTable($dataTable);
 		$renderer->setRenderSubTables(Piwik_Common::getRequestVar('expanded', false, 'int', $this->request));
+		$renderer->setHideIdSubDatableFromResponse(Piwik_Common::getRequestVar('hideIdSubDatable', false, 'int', $this->request));
 		if($format == 'php')
 		{
 			$renderer->setSerialize( $this->caseRendererPHPSerialize());
diff --git a/core/DataTable/Renderer.php b/core/DataTable/Renderer.php
index 84efd8c935..50e940e346 100644
--- a/core/DataTable/Renderer.php
+++ b/core/DataTable/Renderer.php
@@ -26,6 +26,7 @@ abstract class Piwik_DataTable_Renderer
 	protected $table;
 	protected $exception;
 	protected $renderSubTables = false;
+	protected $hideIdSubDatatable = false;
 	
 	public function __construct()
 	{
@@ -35,6 +36,11 @@ abstract class Piwik_DataTable_Renderer
 	{
 		$this->renderSubTables = (bool)$enableRenderSubTable;
 	}
+
+	public function setHideIdSubDatableFromResponse($bool)
+	{
+		$this->hideIdSubDatatable = (bool)$bool;
+	}
 	
 	protected function isRenderSubtables()
 	{
diff --git a/core/DataTable/Renderer/Csv.php b/core/DataTable/Renderer/Csv.php
index 3ff46a3dd4..e0f2524dfe 100644
--- a/core/DataTable/Renderer/Csv.php
+++ b/core/DataTable/Renderer/Csv.php
@@ -185,7 +185,8 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
 			if($this->exportIdSubtable)
 			{
 				$idsubdatatable = $row->getIdSubDataTable();
-				if($idsubdatatable !== false)
+				if($idsubdatatable !== false
+					&& $this->hideIdSubDatatable === false)
 				{
 					$csvRow['idsubdatatable'] = $idsubdatatable;
 				}
diff --git a/core/DataTable/Renderer/Json.php b/core/DataTable/Renderer/Json.php
index e6bd6a72d9..95b580ca28 100644
--- a/core/DataTable/Renderer/Json.php
+++ b/core/DataTable/Renderer/Json.php
@@ -42,6 +42,7 @@ class Piwik_DataTable_Renderer_Json extends Piwik_DataTable_Renderer
 		$renderer->setTable($table);
 		$renderer->setRenderSubTables($this->isRenderSubtables());
 		$renderer->setSerialize(false);
+		$renderer->setHideIdSubDatableFromResponse($this->hideIdSubDatatable);
 		$array = $renderer->flatRender();
 		
 		if(!is_array($array))
diff --git a/core/DataTable/Renderer/Php.php b/core/DataTable/Renderer/Php.php
index 18f24452e0..cebda20266 100644
--- a/core/DataTable/Renderer/Php.php
+++ b/core/DataTable/Renderer/Php.php
@@ -30,6 +30,7 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
 	{
 		$this->serialize = (bool)$bool;
 	}
+	
 	public function setPrettyDisplay($bool)
 	{
 		$this->prettyDisplay = (bool)$bool;
@@ -145,13 +146,14 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
 		foreach($array as $row)
 		{
 			$newRow = $row['columns'] + $row['metadata'];
-			if(isset($row['idsubdatatable']))
+			if(isset($row['idsubdatatable'])
+				&& $this->hideIdSubDatatable === false)
 			{
 				$newRow += array('idsubdatatable' => $row['idsubdatatable']);
-				if(isset($row['subtable']))
-				{
-					$newRow += array('subtable' => $this->flattenArray($row['subtable']) );
-				}
+			}
+			if(isset($row['subtable']))
+			{
+				$newRow += array('subtable' => $this->flattenArray($row['subtable']) );
 			}
 			$flatArray[] = $newRow;
 		}		
@@ -192,18 +194,23 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
 				&& $row->getIdSubDataTable() !== null)
 			{
 				try{
-					$subTable =  $this->renderTable( Piwik_DataTable_Manager::getInstance()->getTable($row->getIdSubDataTable()));
+					$subTable = $this->renderTable( Piwik_DataTable_Manager::getInstance()->getTable($row->getIdSubDataTable()));
 					$newRow['subtable'] = $subTable;
-					if(isset($newRow['metadata']['idsubdatatable_in_db']))
+					if($this->hideIdSubDatatable === false
+						&& isset($newRow['metadata']['idsubdatatable_in_db']))
 					{
 						$newRow['columns']['idsubdatatable'] = $newRow['metadata']['idsubdatatable_in_db'];
-						unset($newRow['metadata']['idsubdatatable_in_db']);
 					}
+					unset($newRow['metadata']['idsubdatatable_in_db']);
 				} catch (Exception $e) {
 					// the subtables are not loaded we dont do anything 
 				}
 			}
-			
+			if($this->hideIdSubDatatable !== false)
+			{
+				unset($newRow['idsubdatatable']);
+			}
+					
 			$array[] = $newRow;
 		}
 		return $array;
diff --git a/core/DataTable/Renderer/Xml.php b/core/DataTable/Renderer/Xml.php
index 828b890ab7..e28965be62 100644
--- a/core/DataTable/Renderer/Xml.php
+++ b/core/DataTable/Renderer/Xml.php
@@ -47,6 +47,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
 		$renderer->setRenderSubTables($this->isRenderSubtables());
 		$renderer->setSerialize(false);
 		$renderer->setTable($table);
+		$renderer->setHideIdSubDatableFromResponse($this->hideIdSubDatatable);
 		return $renderer->flatRender();
 	}
 	
diff --git a/tests/integration/Integration.php b/tests/integration/Integration.php
index 27e54c003e..3167239ada 100644
--- a/tests/integration/Integration.php
+++ b/tests/integration/Integration.php
@@ -210,7 +210,6 @@ abstract class Test_Integration extends Test_Database
 	 */ 
 	protected function generateUrlsApi( $parametersToSet, $formats, $periods, $setDateLastN = false )
 	{
-		
 		// Get the URLs to query against the API for all functions starting with get*
 		$skipped = $requestUrls = array();
 		$apiMetadata = new Piwik_API_DocumentationGenerator;
@@ -259,6 +258,7 @@ abstract class Test_Integration extends Test_Database
         			foreach($formats as $format)
         			{
         				$parametersToSet['format'] = $format;
+        				$parametersToSet['hideIdSubDatable'] = 1;
             			$exampleUrl = $apiMetadata->getExampleUrl($class, $methodName, $parametersToSet);
             			if($exampleUrl === false) 
             			{
@@ -283,6 +283,7 @@ abstract class Test_Integration extends Test_Database
     	}
 //    	var_dump($skipped);
 //    	var_dump($requestUrls);
+//    	exit;
     	return $requestUrls;
 	}
 	
diff --git a/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getDownloads_day.xml b/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getDownloads_day.xml
index 1613d9a045..48775fd2e4 100644
--- a/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getDownloads_day.xml
+++ b/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getDownloads_day.xml
@@ -5,7 +5,6 @@
 		<nb_visits>1</nb_visits>
 		<nb_hits>1</nb_hits>
 		<sum_time_spent>180</sum_time_spent>
-		<idsubdatatable>55</idsubdatatable>
 		<subtable>
 			<row>
 				<label> /latest.zip</label>
diff --git a/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getOutlinks_day.xml b/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getOutlinks_day.xml
index 543130f18e..2175803fa4 100644
--- a/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getOutlinks_day.xml
+++ b/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getOutlinks_day.xml
@@ -5,7 +5,6 @@
 		<nb_visits>1</nb_visits>
 		<nb_hits>1</nb_hits>
 		<sum_time_spent>360</sum_time_spent>
-		<idsubdatatable>57</idsubdatatable>
 		<subtable>
 			<row>
 				<label> /svn</label>
diff --git a/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrls_day.xml b/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrls_day.xml
index 0e92e9173e..ac862948f6 100644
--- a/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrls_day.xml
+++ b/tests/integration/expected/test_OneVisitorTwoVisits__Actions.getPageUrls_day.xml
@@ -13,7 +13,6 @@
 		<avg_time_on_page>0</avg_time_on_page>
 		<bounce_rate>100%</bounce_rate>
 		<exit_rate>100%</exit_rate>
-		<idsubdatatable>53</idsubdatatable>
 		<subtable>
 			<row>
 				<label>/purchase.htm</label>
diff --git a/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getKeywords_day.xml b/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getKeywords_day.xml
index ee03451407..c38aef473b 100644
--- a/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getKeywords_day.xml
+++ b/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getKeywords_day.xml
@@ -17,7 +17,6 @@
 		</goals>
 		<nb_conversions>1</nb_conversions>
 		<revenue>1</revenue>
-		<idsubdatatable>76</idsubdatatable>
 		<subtable>
 			<row>
 				<label>Yahoo!</label>
diff --git a/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getSearchEngines_day.xml b/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getSearchEngines_day.xml
index 774d97c1ff..284b5f7bab 100644
--- a/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getSearchEngines_day.xml
+++ b/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getSearchEngines_day.xml
@@ -17,7 +17,6 @@
 		</goals>
 		<nb_conversions>1</nb_conversions>
 		<revenue>1</revenue>
-		<idsubdatatable>74</idsubdatatable>
 		<url>http://search.yahoo.com</url>
 		<logo>plugins/Referers/images/searchEngines/search.yahoo.com.png</logo>
 		<subtable>
diff --git a/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getWebsites_day.xml b/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getWebsites_day.xml
index 7a11ca1cea..99eb85a678 100644
--- a/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getWebsites_day.xml
+++ b/tests/integration/expected/test_OneVisitorTwoVisits__Referers.getWebsites_day.xml
@@ -9,7 +9,6 @@
 		<sum_visit_length>1620</sum_visit_length>
 		<bounce_count>0</bounce_count>
 		<nb_visits_converted>1</nb_visits_converted>
-		<idsubdatatable>79</idsubdatatable>
 		<subtable>
 			<row>
 				<label>http://referer.com/page.htm?param=valuewith some spaces</label>
diff --git a/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_day.xml b/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_day.xml
index d19de5fc29..6c7bf55c66 100644
--- a/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_day.xml
+++ b/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_day.xml
@@ -11,7 +11,6 @@
 				<sum_visit_length>0</sum_visit_length>
 				<bounce_count>1</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
-				<idsubdatatable>80</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://referer.com/page.htm?param=valuewith some spaces</label>
@@ -37,7 +36,6 @@
 				<sum_visit_length>360</sum_visit_length>
 				<bounce_count>0</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
-				<idsubdatatable>22</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://referer.com/Other_Page.htm</label>
@@ -69,7 +67,6 @@
 				<sum_visit_length>0</sum_visit_length>
 				<bounce_count>1</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
-				<idsubdatatable>22</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://only-homepage-referer.com/</label>
diff --git a/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_month.xml b/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_month.xml
index b6eda6eb51..46f4f132c8 100644
--- a/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_month.xml
+++ b/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_month.xml
@@ -11,7 +11,6 @@
 				<bounce_count>1</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
 				<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
-				<idsubdatatable>132</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://referer.com/Other_Page.htm</label>
@@ -54,7 +53,6 @@
 				<bounce_count>1</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
 				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
-				<idsubdatatable>133</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://only-homepage-referer.com/</label>
diff --git a/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_week.xml b/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_week.xml
index ba834c454c..8696568992 100644
--- a/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_week.xml
+++ b/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_week.xml
@@ -11,7 +11,6 @@
 				<bounce_count>1</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
 				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
-				<idsubdatatable>40</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://referer.com/page.htm?param=valuewith some spaces</label>
@@ -36,7 +35,6 @@
 				<bounce_count>0</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
 				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
-				<idsubdatatable>35</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://referer.com/Other_Page.htm</label>
@@ -69,7 +67,6 @@
 				<bounce_count>1</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
 				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
-				<idsubdatatable>34</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://only-homepage-referer.com/</label>
diff --git a/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_year.xml b/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_year.xml
index a8be3758e4..fcfb7e7f27 100644
--- a/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_year.xml
+++ b/tests/integration/expected/test_TwoVisitors_twoWebsites_differentDays__Referers.getWebsites_year.xml
@@ -11,7 +11,6 @@
 				<bounce_count>1</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
 				<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
-				<idsubdatatable>54</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://referer.com/Other_Page.htm</label>
@@ -54,7 +53,6 @@
 				<bounce_count>1</bounce_count>
 				<nb_visits_converted>0</nb_visits_converted>
 				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
-				<idsubdatatable>54</idsubdatatable>
 				<subtable>
 					<row>
 						<label>http://only-homepage-referer.com/</label>
-- 
GitLab