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. ); } 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', ), ); } function setUp() { parent::setUp(); $this->foreignKeyChecksOff(); $this->quickCleanup($this->_tablesToTruncate); } function tearDown() { parent::tearDown(); CRM_Core_DAO::executeQuery('DROP TEMPORARY TABLE IF EXISTS civireport_contribution_detail_temp1'); CRM_Core_DAO::executeQuery('DROP TEMPORARY TABLE IF EXISTS civireport_contribution_detail_temp2'); CRM_Core_DAO::executeQuery('DROP TEMPORARY TABLE IF EXISTS civireport_contribution_detail_temp3'); } /** * @dataProvider dataProvider */ 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); } /** * @expectedException PHPUnit_Framework_AssertionFailedError * @dataProvider badDataProvider */ 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}"); $this->assertCsvArraysEqual($expectedOutputCsvArray, $reportCsvArray); } }