From a75caa7b5a87725c0e8af30fa8b673b4da06f3ae Mon Sep 17 00:00:00 2001
From: JulienMoumne <julien@piwik.org>
Date: Thu, 2 Aug 2012 20:50:37 +0000
Subject: [PATCH] refs #3207 unit tests

git-svn-id: http://dev.piwik.org/svn/trunk@6654 59fd770c-687e-43c8-a1e3-f5a4ff64c105
---
 .../Core/DataTable/Filter/TruncateTest.php    | 65 +++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php

diff --git a/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php b/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php
new file mode 100644
index 0000000000..39f75caca5
--- /dev/null
+++ b/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @version $Id$
+ */
+class DataTable_Filter_TruncateTest extends PHPUnit_Framework_TestCase
+{
+    /**
+	* @group Core
+	* @group DataTable
+	* @group DataTable_Filter
+	* @group DataTable_Filter_Truncate
+	*/
+	public function testUnrelatedDataTableNotFiltered()
+	{
+		// remark: this unit test would become invalid and would need to be rewritten if
+		// AddSummaryRow filter stops calling getRowsCount() on the DataTable being filtered.
+		$mockedDataTable = $this->getMock('Piwik_DataTable', array('getRowsCount'));
+		$mockedDataTable->expects($this->never())->method('getRowsCount');
+
+		$dataTableBeingFiltered = new Piwik_DataTable();
+		$rowBeingFiltered = new Piwik_DataTable_Row();
+		$dataTableBeingFiltered->addRow($rowBeingFiltered);
+
+		// we simulate the fact that the value of Piwik_DataTable_Row::DATATABLE_ASSOCIATED retrieved
+		// from the database is in conflict with one of the Piwik_DataTable_Manager managed table identifiers.
+		// This is a rare but legitimate case as identifiers are not thoroughly synchronized
+		// when the expanded parameter is false.
+		$rowBeingFiltered->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $mockedDataTable->getId();
+
+		$filter = new Piwik_DataTable_Filter_Truncate($dataTableBeingFiltered, 1);
+		$filter->filter($dataTableBeingFiltered);
+	}
+
+	/**
+	 *
+	 * @group Core
+	 * @group DataTable
+	 * @group DataTable_Filter
+	 * @group DataTable_Filter_Truncate
+	 */
+	public function testForInfiniteRecursion()
+	{
+		$dataTableBeingFiltered = new Piwik_DataTable();
+
+		// remark: this unit test would become invalid and would need to be rewritten if
+		// Truncate filter stops calling getIdSubDataTable() on rows associated with a SubDataTable
+		$rowBeingFiltered = $this->getMock('Piwik_DataTable_Row', array('getIdSubDataTable'));
+		$rowBeingFiltered->expects($this->never())->method('getIdSubDataTable');
+
+		$dataTableBeingFiltered->addRow($rowBeingFiltered);
+
+		// we simulate a legitimate but rare circular reference between a Piwik_DataTable_Row and its
+		// enclosing Piwik_DataTable.
+		// This can happen because identifiers are not thoroughly synchronized when the expanded parameter
+		// is false.
+		$rowBeingFiltered->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $dataTableBeingFiltered->getId();
+
+		$filter = new Piwik_DataTable_Filter_Truncate($dataTableBeingFiltered, 1);
+		$filter->filter($dataTableBeingFiltered);
+	}
+}
-- 
GitLab