From 839fd3f435c478f285fcf564e805840fbf1b225b Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Mon, 18 Apr 2022 10:49:57 +1200 Subject: [PATCH] [REF] [Import] [Test] switch test to use full form flow --- CRM/Contact/Import/Form/DataSource.php | 2 +- .../phpunit/CRM/Import/DataSource/CsvTest.php | 71 +++++++++---------- tests/phpunit/CiviTest/CiviUnitTestCase.php | 3 + 3 files changed, 36 insertions(+), 40 deletions(-) diff --git a/CRM/Contact/Import/Form/DataSource.php b/CRM/Contact/Import/Form/DataSource.php index 8a76bb05f3..4123c70d46 100644 --- a/CRM/Contact/Import/Form/DataSource.php +++ b/CRM/Contact/Import/Form/DataSource.php @@ -236,7 +236,7 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Import_Forms { } $this->set('disableUSPS', !empty($this->_params['disableUSPS'])); - $this->set('dataSource', $this->_params['dataSource']); + $this->set('dataSource', $this->getSubmittedValue('dataSource')); $this->set('skipColumnHeader', CRM_Utils_Array::value('skipColumnHeader', $this->_params)); CRM_Core_Session::singleton()->set('dateTypes', $storeParams['dateFormats']); diff --git a/tests/phpunit/CRM/Import/DataSource/CsvTest.php b/tests/phpunit/CRM/Import/DataSource/CsvTest.php index f7d1dda343..41626941ee 100644 --- a/tests/phpunit/CRM/Import/DataSource/CsvTest.php +++ b/tests/phpunit/CRM/Import/DataSource/CsvTest.php @@ -20,25 +20,9 @@ class CRM_Import_DataSource_CsvTest extends CiviUnitTestCase { * @param array $fileData * * @dataProvider getCsvFiles - * @throws \CRM_Core_Exception */ - public function testToCsv(array $fileData) { - $dataSource = new CRM_Import_DataSource_CSV(); - $params = [ - 'uploadFile' => [ - 'name' => __DIR__ . '/' . $fileData['filename'], - ], - 'skipColumnHeader' => TRUE, - ]; - - // Get the PEAR::DB object - $dao = new CRM_Core_DAO(); - $db = $dao->getDatabaseConnection(); - - $form = new CRM_Contact_Import_Form_DataSource(); - $form->controller = new CRM_Contact_Import_Controller(); - - $dataSource->postProcess($params, $db, $form); + public function testToCsv(array $fileData): void { + $form = $this->submitDatasourceForm($fileData['filename']); $tableName = $form->get('importTableName'); foreach (['first_name', 'last_name', 'email'] as $field) { $json = json_encode(CRM_Core_DAO::singleValueQuery("SELECT $field FROM $tableName")); @@ -52,7 +36,7 @@ class CRM_Import_DataSource_CsvTest extends CiviUnitTestCase { * * @return array */ - public function getCsvFiles() { + public function getCsvFiles(): array { return [ // import.csv is utf8-encoded, with no BOM [ @@ -95,17 +79,20 @@ class CRM_Import_DataSource_CsvTest extends CiviUnitTestCase { } /** - * Test the trim function + * Test the trim function. + * * @dataProvider trimDataProvider + * * @param string $input * @param string $expected */ - public function testTrim(string $input, string $expected) { + public function testTrim(string $input, string $expected): void { $this->assertSame($expected, CRM_Import_DataSource_CSV::trimNonBreakingSpaces($input)); } /** - * Dataprovider for testTrim + * DataProvider for testTrim. + * * @return array */ public function trimDataProvider(): array { @@ -132,27 +119,33 @@ class CRM_Import_DataSource_CsvTest extends CiviUnitTestCase { * skipped because of some checking for column-count matches in the import, * and so you don't hit the current fail. */ - public function testBlankLineAtEnd() { - $dataSource = new CRM_Import_DataSource_CSV(); - $params = [ - 'uploadFile' => [ - 'name' => __DIR__ . '/blankLineAtEnd.csv', - ], - 'skipColumnHeader' => TRUE, - ]; - - // Get the PEAR::DB object - $dao = new CRM_Core_DAO(); - $db = $dao->getDatabaseConnection(); - - $form = new CRM_Contact_Import_Form_DataSource(); - $form->controller = new CRM_Contact_Import_Controller(); - - $dataSource->postProcess($params, $db, $form); + public function testBlankLineAtEnd(): void { + $form = $this->submitDatasourceForm('blankLineAtEnd.csv'); $tableName = $form->get('importTableName'); $json = json_encode(CRM_Core_DAO::singleValueQuery("SELECT email FROM $tableName")); $this->assertEquals('"yogi@yellowstone.park"', $json); CRM_Core_DAO::executeQuery("DROP TABLE $tableName"); } + /** + * Test submitting the datasource form. + * + * @param string $csvFileName + * + * @return \CRM_Contact_Import_Form_DataSource + */ + protected function submitDatasourceForm(string $csvFileName): CRM_Contact_Import_Form_DataSource { + $_GET['dataSource'] = 'CRM_Import_DataSource_CSV'; + /* @var CRM_Contact_Import_Form_DataSource $form */ + $form = $this->getFormObject('CRM_Contact_Import_Form_DataSource', [ + 'uploadFile' => [ + 'name' => __DIR__ . '/' . $csvFileName, + ], + 'skipColumnHeader' => TRUE, + ]); + $form->buildForm(); + $form->postProcess(); + return $form; + } + } diff --git a/tests/phpunit/CiviTest/CiviUnitTestCase.php b/tests/phpunit/CiviTest/CiviUnitTestCase.php index eff00f48b3..903dfb47bd 100644 --- a/tests/phpunit/CiviTest/CiviUnitTestCase.php +++ b/tests/phpunit/CiviTest/CiviUnitTestCase.php @@ -3218,6 +3218,9 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase { case 'CRM_Event_Form_Registration_Confirm': $form->controller = new CRM_Event_Controller_Registration(); break; + case 'CRM_Contact_Import_Form_DataSource': + $form->controller = new CRM_Contact_Import_Controller(); + break; case strpos($class, '_Form_') !== FALSE: $form->controller = new CRM_Core_Controller_Simple($class, $pageName); -- 2.25.1