public function testImportDataAnalysisResults() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $import = new Import(); $serializedData['importRulesType'] = 'Contacts'; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); ImportTestHelper::createTempTableByFileNameAndTableName('importAnalyzerTest.csv', $import->getTempTableName(), true, Yii::getPathOfAlias('application.modules.contacts.tests.unit.files')); $mappingData = array('column_0' => array('attributeIndexOrDerivedType' => 'ContactState', 'type' => 'importColumn', 'mappingRulesData' => array('DefaultContactStateIdMappingRuleForm' => array('defaultStateId' => null)))); $serializedData = unserialize($import->serializedData); $serializedData['mappingData'] = $mappingData; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); $importRules = ImportRulesUtil::makeImportRulesByType('Contacts'); $config = array('pagination' => array('pageSize' => 15)); //This test csv has a header row. $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config); //Run data analyzer $importDataAnalyzer = new ImportDataAnalyzer($importRules, $dataProvider, $mappingData, array('column_0')); $importDataAnalyzer->analyzePage(); $data = $dataProvider->getData(); $this->assertEquals(13, count($data)); $compareData = array(); $compareData['column_0'] = array(); $compareData['column_0'][] = 'Is invalid.'; $this->assertEquals($compareData, unserialize($data[0]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[0]->analysisStatus); $compareData = array(); $compareData['column_0'] = array(); $compareData['column_0'][] = 'Is invalid.'; $this->assertEquals($compareData, unserialize($data[1]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[1]->analysisStatus); $compareData = array(); $compareData['column_0'] = array(); $compareData['column_0'][] = 'Is invalid.'; $this->assertEquals($compareData, unserialize($data[2]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[2]->analysisStatus); $this->assertNull($data[3]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[3]->analysisStatus); $this->assertNull($data[4]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[4]->analysisStatus); $this->assertNull($data[5]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[5]->analysisStatus); $this->assertNull($data[6]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[6]->analysisStatus); $this->assertNull($data[7]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[7]->analysisStatus); $this->assertNull($data[8]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[8]->analysisStatus); $this->assertNull($data[9]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[9]->analysisStatus); $this->assertNull($data[10]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[10]->analysisStatus); $this->assertNull($data[11]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[11]->analysisStatus); $this->assertNull($data[12]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[12]->analysisStatus); }
public function testImportDataAnalysisResults() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $import = new Import(); $serializedData['importRulesType'] = 'Users'; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); ImportTestHelper::createTempTableByFileNameAndTableName('importAnalyzerTest.csv', $import->getTempTableName(), Yii::getPathOfAlias('application.modules.users.tests.unit.files')); $mappingData = array('column_0' => array('attributeIndexOrDerivedType' => 'username', 'type' => 'importColumn', 'mappingRulesData' => array()), 'column_1' => array('attributeIndexOrDerivedType' => 'Password', 'type' => 'importColumn', 'mappingRulesData' => array('PasswordDefaultValueModelAttributeMappingRuleForm' => array('defaultValue' => null))), 'column_2' => array('attributeIndexOrDerivedType' => 'UserStatus', 'type' => 'importColumn', 'mappingRulesData' => array('UserStatusDefaultValueMappingRuleForm' => array('defaultValue' => UserStatusUtil::ACTIVE)))); $serializedData = unserialize($import->serializedData); $serializedData['mappingData'] = $mappingData; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); $importRules = ImportRulesUtil::makeImportRulesByType('Users'); $config = array('pagination' => array('pageSize' => 15)); //This test csv has a header row. $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config); //Run data analyzer $importDataAnalyzer = new ImportDataAnalyzer($importRules, $dataProvider, $mappingData, array('column_0', 'column_1', 'column_2')); $importDataAnalyzer->analyzePage(); $data = $dataProvider->getData(); $this->assertEquals(10, count($data)); $this->assertNull($data[0]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[0]->analysisStatus); $this->assertNull($data[1]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[1]->analysisStatus); $this->assertNull($data[2]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[2]->analysisStatus); $this->assertNull($data[3]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[3]->analysisStatus); $compareData = array(); $compareData['column_0'] = array(); $compareData['column_0'][] = 'Is too long. Maximum length is 64. This value will truncated upon import.'; $this->assertEquals($compareData, unserialize($data[4]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_WARN, $data[4]->analysisStatus); $this->assertNull($data[5]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[5]->analysisStatus); $this->assertNull($data[6]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[6]->analysisStatus); $compareData = array(); $compareData['column_2'] = array(); $compareData['column_2'][] = 'Status value is invalid. This status will be set to active upon import.'; $this->assertEquals($compareData, unserialize($data[7]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_WARN, $data[7]->analysisStatus); $compareData = array(); $compareData['column_1'] = array(); $compareData['column_1'][] = 'Is too long. Maximum length is 32. This value will truncated upon import.'; $this->assertEquals($compareData, unserialize($data[8]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_WARN, $data[8]->analysisStatus); $compareData = array(); $compareData['column_2'] = array(); $compareData['column_2'][] = 'Status value is invalid. This status will be set to active upon import.'; $this->assertEquals($compareData, unserialize($data[9]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_WARN, $data[9]->analysisStatus); }
/** * Given a data provider, call getData and for each row, attempt to import the data. * @param ImportDataProvider $dataProvider * @param ImportRules $importRules * @param $mappingData * @param ImportResultsUtil $importResultsUtil * @param ExplicitReadWriteModelPermissions $explicitReadWriteModelPermissions * @param ImportMessageLogger $messageLogger */ public static function importByDataProvider(ImportDataProvider $dataProvider, ImportRules $importRules, $mappingData, ImportResultsUtil $importResultsUtil, ExplicitReadWriteModelPermissions $explicitReadWriteModelPermissions, ImportMessageLogger $messageLogger) { $data = $dataProvider->getData(true); foreach ($data as $rowBean) { assert('$rowBean->id != null'); $importRowDataResultsUtil = new ImportRowDataResultsUtil((int) $rowBean->id); //todo: eventually handle security exceptions in a more graceful way instead of relying on a try/catch //but explicity checking for security rights/permissions. try { static::importByImportRulesRowData($importRules, $rowBean, $mappingData, $importRowDataResultsUtil, $explicitReadWriteModelPermissions); } catch (AccessDeniedSecurityException $e) { $importRowDataResultsUtil->addMessage(Zurmo::t('ImportModule', 'You do not have permission to create/update this record and/or its related record.')); $importRowDataResultsUtil->setStatusToError(); } $importResultsUtil->addRowDataResults($importRowDataResultsUtil); $messageLogger->countAfterRowImported(); } }
/** * Process csv and get data * @param array $mappingData * @param array $data */ protected function processSantizerCSVAndGetData(&$mappingData, &$data) { Yii::app()->user->userModel = User::getByUsername('super'); $import = new Import(); $serializedData['importRulesType'] = 'ProductTemplates'; $serializedData['firstRowIsHeaderRow'] = true; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); ImportTestHelper::createTempTableByFileNameAndTableName('productTemplatesSanitizer.csv', $import->getTempTableName(), true, Yii::getPathOfAlias('application.modules.productTemplates.tests.unit.files')); $this->assertEquals(5, ImportDatabaseUtil::getCount($import->getTempTableName())); // includes header rows. $currencies = Currency::getAll(); $mappingData = array('column_0' => ImportMappingUtil::makeStringColumnMappingData('name'), 'column_1' => ImportMappingUtil::makeTextAreaColumnMappingData('description'), 'column_2' => ImportMappingUtil::makeIntegerColumnMappingData('sellPriceFormula__type'), 'column_3' => ImportMappingUtil::makeFloatColumnMappingData('sellPriceFormula__discountOrMarkupPercentage'), 'column_4' => ImportMappingUtil::makeCurrencyColumnMappingData('cost', $currencies[0]), 'column_5' => ImportMappingUtil::makeCurrencyColumnMappingData('listPrice', $currencies[0]), 'column_6' => ImportMappingUtil::makeCurrencyColumnMappingData('sellPrice', $currencies[0]), 'column_7' => ImportMappingUtil::makeIntegerColumnMappingData('priceFrequency'), 'column_8' => ImportMappingUtil::makeIntegerColumnMappingData('type'), 'column_9' => ImportMappingUtil::makeIntegerColumnMappingData('status')); $importRules = ImportRulesUtil::makeImportRulesByType('ProductTemplates'); $page = 0; $config = array('pagination' => array('pageSize' => 50)); //This way all rows are processed. $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config); $dataProvider->getPagination()->setCurrentPage($page); $data = $dataProvider->getData(true); }
/** * @depends testGetData */ public function testGetDataFilteredByStatus() { $testTableName = 'testimporttable'; ImportTestHelper::createTempTableByFileNameAndTableName('importTest.csv', $testTableName); $config = array('pagination' => array('pageSize' => 99)); $dataProvider = new ImportDataProvider($testTableName, true, $config); $data = $dataProvider->getData(); $this->assertEquals(4, count($data)); R::exec("update " . $testTableName . " set status = " . ImportRowDataResultsUtil::ERROR . " where id != 1 limit 1"); //Filter by error status. $dataProvider = new ImportDataProvider($testTableName, true, $config, ImportRowDataResultsUtil::ERROR); $data = $dataProvider->getData(); $this->assertEquals(1, count($data)); //Do without a filter $dataProvider = new ImportDataProvider($testTableName, true, $config); $data = $dataProvider->getData(); $this->assertEquals(4, count($data)); }
public function testImportDataAnalysisResults() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $import = new Import(); $serializedData['importRulesType'] = 'Tasks'; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); $account1 = AccountTestHelper::createAccountByNameForOwner('account1', $super); $account2 = AccountTestHelper::createAccountByNameForOwner('account2', $super); $account3 = AccountTestHelper::createAccountByNameForOwner('account3', $super); $contact1 = ContactTestHelper::createContactByNameForOwner('contact1', $super); $contact2 = ContactTestHelper::createContactByNameForOwner('contact2', $super); $contact3 = ContactTestHelper::createContactByNameForOwner('contact3', $super); $opportunity1 = OpportunityTestHelper::createOpportunityByNameForOwner('opportunity1', $super); $opportunity2 = OpportunityTestHelper::createOpportunityByNameForOwner('opportunity2', $super); $opportunity3 = OpportunityTestHelper::createOpportunityByNameForOwner('opportunity3', $super); //Make models externally linked for testing. ImportTestHelper::updateModelsExternalId($account2, 'ACC'); ImportTestHelper::updateModelsExternalId($contact2, 'CON'); ImportTestHelper::updateModelsExternalId($opportunity2, 'OPP'); ImportTestHelper::createTempTableByFileNameAndTableName('importAnalyzerTest.csv', $import->getTempTableName(), true, Yii::getPathOfAlias('application.modules.tasks.tests.unit.files')); ZurmoRedBean::exec("update " . $import->getTempTableName() . " set column_0 = " . $account3->id . " where id != 1 limit 3"); ZurmoRedBean::exec("update " . $import->getTempTableName() . " set column_2 = " . $contact3->id . " where id != 1 limit 4"); ZurmoRedBean::exec("update " . $import->getTempTableName() . " set column_4 = " . $opportunity3->id . " where id != 1 limit 5"); $mappingData = array('column_0' => ImportMappingUtil::makeModelDerivedColumnMappingData('AccountDerived', IdValueTypeMappingRuleForm::ZURMO_MODEL_ID), 'column_1' => ImportMappingUtil::makeModelDerivedColumnMappingData('AccountDerived'), 'column_2' => ImportMappingUtil::makeModelDerivedColumnMappingData('ContactDerived', IdValueTypeMappingRuleForm::ZURMO_MODEL_ID), 'column_3' => ImportMappingUtil::makeModelDerivedColumnMappingData('ContactDerived'), 'column_4' => ImportMappingUtil::makeModelDerivedColumnMappingData('OpportunityDerived', IdValueTypeMappingRuleForm::ZURMO_MODEL_ID), 'column_5' => ImportMappingUtil::makeModelDerivedColumnMappingData('OpportunityDerived'), 'column_6' => ImportMappingUtil::makeIntegerColumnMappingData('status')); $serializedData = unserialize($import->serializedData); $serializedData['mappingData'] = $mappingData; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); $importRules = ImportRulesUtil::makeImportRulesByType('Tasks'); $config = array('pagination' => array('pageSize' => 15)); //This test csv has a header row. $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config); //Run data analyzer $importDataAnalyzer = new ImportDataAnalyzer($importRules, $dataProvider, $mappingData, array('column_0', 'column_1', 'column_2', 'column_3', 'column_4', 'column_5', 'column_6')); $importDataAnalyzer->analyzePage(); $data = $dataProvider->getData(); $this->assertEquals(10, count($data)); $compareData = array(); $compareData['column_0'][] = 'Is an existing record and will be updated.'; $compareData['column_1'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_2'][] = 'Is an existing record and will be updated.'; $compareData['column_3'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_4'][] = 'Is an existing record and will be updated.'; $compareData['column_5'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $this->assertEquals($compareData, unserialize($data[0]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[0]->analysisStatus); $compareData = array(); $compareData['column_0'][] = 'Is an existing record and will be updated.'; $compareData['column_1'][] = 'Is an existing record and will be updated.'; $compareData['column_2'][] = 'Is an existing record and will be updated.'; $compareData['column_3'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_4'][] = 'Is an existing record and will be updated.'; $compareData['column_5'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $this->assertEquals($compareData, unserialize($data[1]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[1]->analysisStatus); $compareData = array(); $compareData['column_0'][] = 'Is an existing record and will be updated.'; $compareData['column_1'][] = 'Is an existing record and will be updated.'; $compareData['column_2'][] = 'Is an existing record and will be updated.'; $compareData['column_3'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_4'][] = 'Is an existing record and will be updated.'; $compareData['column_5'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $this->assertEquals($compareData, unserialize($data[2]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[2]->analysisStatus); $compareData = array(); $compareData['column_0'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_1'][] = 'Is an existing record and will be updated.'; $compareData['column_2'][] = 'Is an existing record and will be updated.'; $compareData['column_3'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_4'][] = 'Is an existing record and will be updated.'; $compareData['column_5'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $this->assertEquals($compareData, unserialize($data[3]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[3]->analysisStatus); $compareData = array(); $compareData['column_0'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_1'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_2'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_3'][] = 'Is an existing record and will be updated.'; $compareData['column_4'][] = 'Is an existing record and will be updated.'; $compareData['column_5'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $this->assertEquals($compareData, unserialize($data[4]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[4]->analysisStatus); $compareData = array(); $compareData['column_0'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_1'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_2'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_3'][] = 'Is an existing record and will be updated.'; $compareData['column_4'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_5'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $this->assertEquals($compareData, unserialize($data[5]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[5]->analysisStatus); $compareData = array(); $compareData['column_0'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_1'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_2'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_3'][] = 'Is an existing record and will be updated.'; $compareData['column_4'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $compareData['column_5'][] = 'Is an existing record and will be updated.'; $this->assertEquals($compareData, unserialize($data[6]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[6]->analysisStatus); $compareData = array(); $compareData['column_0'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_1'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_2'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_3'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_4'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $compareData['column_5'][] = 'Is an existing record and will be updated.'; $this->assertEquals($compareData, unserialize($data[7]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[7]->analysisStatus); $compareData = array(); $compareData['column_0'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_1'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_2'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_3'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_4'][] = 'Was not found and this row will be skipped during import.'; $compareData['column_5'][] = 'Is an existing record and will be updated.'; $compareData['column_6'][] = 'Status specified is invalid and this row will be skipped during import.'; $this->assertEquals($compareData, unserialize($data[8]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[8]->analysisStatus); //Will result with no problems since it is all blank. $this->assertFalse(unserialize($data[9]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[9]->analysisStatus); }
/** * @depends testImportDataAnalysisResults */ public function testMinimumLengthsUsingBatchAnalyzers() { Yii::app()->user->userModel = User::getByUsername('super'); $import = new Import(); $serializedData['importRulesType'] = 'ImportModelTestItem'; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); ImportTestHelper::createTempTableByFileNameAndTableName('importAnalyzerMinLengthsTest.csv', $import->getTempTableName()); $config = array('pagination' => array('pageSize' => 10)); $mappingData = array('column_0' => array('attributeIndexOrDerivedType' => 'string', 'type' => 'importColumn', 'mappingRulesData' => array('DefaultValueModelAttributeMappingRuleForm' => array('defaultValue' => null))), 'column_1' => array('attributeIndexOrDerivedType' => 'FullName', 'type' => 'importColumn', 'mappingRulesData' => array('FullNameDefaultValueModelAttributeMappingRuleForm' => array('defaultValue' => null)))); $serializedData = unserialize($import->serializedData); $serializedData['mappingData'] = $mappingData; $import->serializedData = serialize($serializedData); $this->assertTrue($import->save()); $importRules = ImportRulesUtil::makeImportRulesByType('ImportModelTestItem'); //This test csv has a header row. $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config); //Run data analyzer $importDataAnalyzer = new ImportDataAnalyzer($importRules, $dataProvider, $mappingData, array_keys($mappingData)); $importDataAnalyzer->analyzePage(); $data = $dataProvider->getData(); $this->assertNull($data[0]->serializedAnalysisMessages); $this->assertEquals(ImportDataAnalyzer::STATUS_CLEAN, $data[0]->analysisStatus); $compareData = array(); $compareData['column_1'] = array(); $compareData['column_1'][] = 'Is too short.'; $this->assertEquals($compareData, unserialize($data[1]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[1]->analysisStatus); $compareData = array(); $compareData['column_0'] = array(); $compareData['column_0'][] = 'Is too short. Minimum length is 3.'; $this->assertEquals($compareData, unserialize($data[2]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[2]->analysisStatus); $compareData = array(); $compareData['column_0'] = array(); $compareData['column_0'][] = 'Is too short. Minimum length is 3.'; $compareData['column_1'] = array(); $compareData['column_1'][] = 'Is too short.'; $this->assertEquals($compareData, unserialize($data[3]->serializedAnalysisMessages)); $this->assertEquals(ImportDataAnalyzer::STATUS_SKIP, $data[3]->analysisStatus); }