array( 'sort_name', 'first_name', 'email', 'total_amount', ), 'filters' => array( 'total_amount_op' => 'gte', 'total_amount_value' => 50, ), // FIXME: add filters ), 'Contribute/fixtures/dataset-ascii.sql', 'Contribute/fixtures/report-ascii.csv', ); return array( $testCaseA, $testCaseA, $testCaseA, // We repeat the test a second time to // ensure that CiviReportTestCase can // clean up sufficiently to run // multiple tests. ); } /** * @return array */ public function badDataProvider() { return array( // This test-case is bad because the dataset-ascii.sql does not match the // report.csv (due to differences in international chars) array( 'CRM_Report_Form_Contribute_Detail', array( 'fields' => array( 'sort_name', 'first_name', 'email', 'total_amount', ), 'filters' => array( 'total_amount_op' => 'gte', 'total_amount_value' => 50, ), // FIXME: add filters ), 'Contribute/fixtures/dataset-ascii.sql', 'Contribute/fixtures/report.csv', ), // This test-case is bad because the filters check for // an amount >= $100, but the test data includes records // for $50. array( 'CRM_Report_Form_Contribute_Detail', array( 'fields' => array( 'sort_name', 'first_name', 'email', 'total_amount', ), 'filters' => array( 'total_amount_op' => 'gte', 'total_amount_value' => 100, ), // FIXME: add filters ), 'Contribute/fixtures/dataset-ascii.sql', 'Contribute/fixtures/report.csv', ), ); } public function setUp() { parent::setUp(); $this->quickCleanup($this->_tablesToTruncate); } /** * @dataProvider dataProvider * @param $reportClass * @param $inputParams * @param $dataSet * @param $expectedOutputCsvFile * @throws \Exception */ public function testReportOutput($reportClass, $inputParams, $dataSet, $expectedOutputCsvFile) { $config = CRM_Core_Config::singleton(); CRM_Utils_File::sourceSQLFile($config->dsn, dirname(__FILE__) . "/{$dataSet}"); $reportCsvFile = $this->getReportOutputAsCsv($reportClass, $inputParams); $reportCsvArray = $this->getArrayFromCsv($reportCsvFile); $expectedOutputCsvArray = $this->getArrayFromCsv(dirname(__FILE__) . "/{$expectedOutputCsvFile}"); $this->assertCsvArraysEqual($expectedOutputCsvArray, $reportCsvArray); } /** * @dataProvider badDataProvider * @param $reportClass * @param $inputParams * @param $dataSet * @param $expectedOutputCsvFile * @throws \Exception */ public function testBadReportOutput($reportClass, $inputParams, $dataSet, $expectedOutputCsvFile) { $config = CRM_Core_Config::singleton(); CRM_Utils_File::sourceSQLFile($config->dsn, dirname(__FILE__) . "/{$dataSet}"); $reportCsvFile = $this->getReportOutputAsCsv($reportClass, $inputParams); $reportCsvArray = $this->getArrayFromCsv($reportCsvFile); $expectedOutputCsvArray = $this->getArrayFromCsv(dirname(__FILE__) . "/{$expectedOutputCsvFile}"); try { $this->assertCsvArraysEqual($expectedOutputCsvArray, $reportCsvArray); } catch (PHPUnit\Framework\AssertionFailedError $e) { /* OK */ } catch (PHPUnit_Framework_AssertionFailedError $e) { /* OK */ } } /** * Test processReportMode() Function in Reports */ public function testOutputMode() { $clazz = new ReflectionClass('CRM_Report_Form'); $reportForm = new CRM_Report_Form(); $params = $clazz->getProperty('_params'); $params->setAccessible(TRUE); $outputMode = $clazz->getProperty('_outputMode'); $outputMode->setAccessible(TRUE); $params->setValue($reportForm, array('groups' => 4)); $reportForm->processReportMode(); $this->assertEquals('group', $outputMode->getValue($reportForm)); $params->setValue($reportForm, array('task' => 'copy')); $reportForm->processReportMode(); $this->assertEquals('copy', $outputMode->getValue($reportForm)); $params->setValue($reportForm, array('task' => 'print')); $reportForm->processReportMode(); $this->assertEquals('print', $outputMode->getValue($reportForm)); } }