/tests/core/DataTable/Filter/AddSummaryRow.test.php

https://github.com/quarkness/piwik · PHP · 150 lines · 122 code · 16 blank · 12 comment · 1 complexity · 31b1baae5c4e8020bd70489de29d0373 MD5 · raw file

  1. <?php
  2. if(!defined('PIWIK_CONFIG_TEST_INCLUDED'))
  3. {
  4. require_once dirname(__FILE__)."/../../../../tests/config_test.php";
  5. }
  6. require_once 'DataTable.php';
  7. class Test_Piwik_DataTable_Filter_AddSummaryRow extends UnitTestCase
  8. {
  9. public function test_offsetIsCount_summaryRowShouldBeTheRow()
  10. {
  11. $table = $this->getDataTableCount5();
  12. $filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 5);
  13. $filter->filter($table);
  14. $this->assertEqual($table->getRowsCount(), 5);
  15. $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $this->getRow4()));
  16. }
  17. public function test_offsetIsLessThanCount_SummaryRowShouldBeTheSum()
  18. {
  19. $table = $this->getDataTableCount5();
  20. $filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 2);
  21. $filter->filter($table);
  22. $this->assertEqual($table->getRowsCount(), 3);
  23. $expectedRow = new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
  24. $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
  25. // check that column 'label' is forced to be first in summary row
  26. $this->assertEqual(array_keys($table->getLastRow()->getColumns()), array_keys($expectedRow->getColumns()));
  27. }
  28. public function test_offsetIsMoreThanCount_shouldNotAddSummaryRow()
  29. {
  30. $table = $this->getDataTableCount5();
  31. $filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 6);
  32. $filter->filter($table);
  33. $this->assertEqual($table->getRowsCount(), 5);
  34. $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $this->getRow4()));
  35. }
  36. public function test_whenThereIsAlreadyASummaryRow_shouldReplaceTheSummaryRow()
  37. {
  38. $table = $this->getDataTableCount5();
  39. $filter1 = new Piwik_DataTable_Filter_AddSummaryRow($table, 3);
  40. $filter1->filter($table);
  41. $filter2 = new Piwik_DataTable_Filter_AddSummaryRow($table, 2);
  42. $filter2->filter($table);
  43. $this->assertEqual($table->getRowsCount(), 3);
  44. $expectedRow = new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
  45. $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
  46. }
  47. public function test_sumTablesWithSummaryRow_shouldSumTheSummaryRow()
  48. {
  49. // row0, row1, row2, rowSummary1
  50. $table1 = $this->getDataTableCount5();
  51. $filter = new Piwik_DataTable_Filter_AddSummaryRow($table1, 3);
  52. $filter->filter($table1);
  53. // row0, row1, rowSummary2
  54. $table2 = $this->getDataTableCount5();
  55. $filter = new Piwik_DataTable_Filter_AddSummaryRow($table2, 2);
  56. $filter->filter($table2);
  57. // we expect row0+row0, row1+row1, row2, rowSummary1+rowSummary2
  58. $expectedTable = new Piwik_DataTable;
  59. $expectedTable->addRow( new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'amazon', 'nb' => 20000) )));
  60. $expectedTable->addRow( new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'yahoo', 'nb' => 2000) )));
  61. $expectedTable->addRow( new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'piwik', 'nb' => 100) )));
  62. $expectedTable->addRow( new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 122) )));
  63. $table1->addDataTable($table2);
  64. $this->assertTrue(Piwik_DataTable::isEqual($expectedTable, $table1));
  65. }
  66. public function test_addOneTableWithSummaryRow()
  67. {
  68. // row0, row1, row2, rowSummary1
  69. $table1 = $this->getDataTableCount5();
  70. $filter = new Piwik_DataTable_Filter_AddSummaryRow($table1, 3);
  71. $filter->filter($table1);
  72. // row0, row1, row2, row3, row4
  73. $table2 = $this->getDataTableCount5();
  74. // we expect row0+row0, row1+row1, row2+row2, row3, row4, rowSummary1
  75. $expectedTable = new Piwik_DataTable;
  76. $expectedTable->addRow( new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'amazon', 'nb' => 20000) )));
  77. $expectedTable->addRow( new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'yahoo', 'nb' => 2000) )));
  78. $expectedTable->addRow( new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'piwik', 'nb' => 200) )));
  79. $expectedTable->addRow( $this->getRow3());
  80. $expectedTable->addRow( $this->getRow4());
  81. $expectedTable->addRow( new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 11))));
  82. $table1->addDataTable($table2);
  83. $this->assertTrue(Piwik_DataTable::isEqual($expectedTable, $table1));
  84. }
  85. public function test_whenRowsInRandomOrderButSortSpecified_shouldComputeSummaryRowAfterSort()
  86. {
  87. $table = new Piwik_DataTable;
  88. $table->addRow( $this->getRow3() );
  89. $table->addRow( $this->getRow2() );
  90. $table->addRow( $this->getRow4() );
  91. $table->addRow( $this->getRow1() );
  92. $table->addRow( $this->getRow0() );
  93. $filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 2, Piwik_DataTable::LABEL_SUMMARY_ROW, $columnToSortBy = 'nb');
  94. $filter->filter($table);
  95. $this->assertEqual($table->getRowsCount(), 3);
  96. $expectedRow = new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
  97. $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
  98. }
  99. /**
  100. * Returns table used for the tests
  101. *
  102. * @return Piwik_DataTable
  103. */
  104. protected function getDataTableCount5()
  105. {
  106. $table = new Piwik_DataTable;
  107. $table->addRow( $this->getRow0() );
  108. $table->addRow( $this->getRow1() );
  109. $table->addRow( $this->getRow2() );
  110. $table->addRow( $this->getRow3() );
  111. $table->addRow( $this->getRow4() );
  112. return $table;
  113. }
  114. protected function getRow0()
  115. {
  116. return new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('nb' => 10000, 'label'=>'amazon')));
  117. }
  118. protected function getRow1()
  119. {
  120. return new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'yahoo', 'nb' => 1000)));
  121. }
  122. protected function getRow2()
  123. {
  124. return new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'piwik', 'nb' => 100)));
  125. }
  126. protected function getRow3()
  127. {
  128. return new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>'ask', 'nb' => 10)));
  129. }
  130. protected function getRow4()
  131. {
  132. return new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('nb' => 1, 'label'=>'google')));
  133. }
  134. }