diff --git a/tests/feeds_mapper.test b/tests/feeds_mapper.test index 81665b6..f51b2d0 100644 --- a/tests/feeds_mapper.test +++ b/tests/feeds_mapper.test @@ -53,6 +53,29 @@ class FeedsMapperTestCase extends FeedsWebTestCase { } /** + * Assert that a form field for the given field with the given value + * does not exist in the current form. + * + * @param $field_name + * The name of the field. + * @param $value + * The (raw) value of the field. + * @param $index + * The index of the field (for q multi-valued field). + * + * @see FeedsMapperTestCase::getFormFieldsNames() + * @see FeedsMapperTestCase::getFormFieldsValues() + */ + protected function assertNoNodeFieldValue($field_name, $value, $index = 0) { + $names = $this->getFormFieldsNames($field_name, $index); + $values = $this->getFormFieldsValues($field_name, $value); + foreach ($names as $k => $name) { + $value = $values[$k]; + $this->assertNoFieldByName($name, $value, t('Did not find form field %name for %field_name with the value %value.', array('%name' => $name, '%field_name' => $field_name, '%value' => $value))); + } + } + + /** * Returns the form fields names for a given CCK field. Default implementation * provides support for a single form field with the following name pattern * "field_{$field_name}[{$index}][value]" diff --git a/tests/feeds_mapper_field.test b/tests/feeds_mapper_field.test index 2506a29..7962e9a 100644 --- a/tests/feeds_mapper_field.test +++ b/tests/feeds_mapper_field.test @@ -87,4 +87,146 @@ class FeedsMapperFieldTestCase extends FeedsMapperTestCase { $this->assertNodeFieldValue('gamma', '1.20'); $this->assertNodeFieldValue('delta', '5.62951'); } + + /** + * Test if values are cleared out when an empty value or no value + * is provided. + */ + public function testClearOutValues() { + // Create content type. + $typename = $this->createContentType(array(), array( + 'alpha' => 'text', + 'beta' => 'number_integer', + 'gamma' => 'number_decimal', + 'delta' => 'number_float', + )); + + // Create and configure importer. + $this->createImporterConfiguration('Content CSV', 'csv'); + $this->setSettings('csv', NULL, array('content_type' => '', 'import_period' => FEEDS_SCHEDULE_NEVER)); + $this->setPlugin('csv', 'FeedsFileFetcher'); + $this->setPlugin('csv', 'FeedsCSVParser'); + $this->setSettings('csv', 'FeedsNodeProcessor', array('bundle' => $typename, 'update_existing' => 1)); + $this->addMappings('csv', array( + array( + 'source' => 'guid', + 'target' => 'guid', + 'unique' => TRUE, + ), + array( + 'source' => 'title', + 'target' => 'title', + ), + array( + 'source' => 'created', + 'target' => 'created', + ), + array( + 'source' => 'body', + 'target' => 'body', + ), + array( + 'source' => 'alpha', + 'target' => 'field_alpha', + ), + array( + 'source' => 'beta', + 'target' => 'field_beta', + ), + array( + 'source' => 'gamma', + 'target' => 'field_gamma', + ), + array( + 'source' => 'delta', + 'target' => 'field_delta', + ), + )); + + // Import CSV file. + $this->importFile('csv', $this->absolutePath() . '/tests/feeds/content.csv'); + $this->assertText('Created 2 nodes'); + + // Check the two imported nodes. + $this->drupalGet('node/1/edit'); + $this->assertNodeFieldValue('alpha', 'Lorem'); + $this->assertNodeFieldValue('beta', '42'); + $this->assertNodeFieldValue('gamma', '4.20'); + $this->assertNodeFieldValue('delta', '3.14159'); + $this->assertFieldByName('body[und][0][value]', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.'); + $this->drupalGet('node/2/edit'); + $this->assertNodeFieldValue('alpha', 'Ut wisi'); + $this->assertNodeFieldValue('beta', '32'); + $this->assertNodeFieldValue('gamma', '1.20'); + $this->assertNodeFieldValue('delta', '5.62951'); + $this->assertFieldByName('body[und][0][value]', 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.'); + + // Import CSV file with empty values. + $this->importFile('csv', $this->absolutePath() . '/tests/feeds/content_empty.csv'); + $this->assertText('Updated 2 nodes'); + + // Check if all values were cleared out for node 1. + $this->drupalGet('node/1/edit'); + $this->assertNoNodeFieldValue('alpha', 'Lorem'); + $this->assertNoNodeFieldValue('beta', '42'); + $this->assertNoNodeFieldValue('gamma', '4.20'); + $this->assertNoNodeFieldValue('delta', '3.14159'); + $this->assertFieldByName('body[und][0][value]', ''); + // Check if labels for fields that should be cleared out are not shown. + $this->drupalGet('node/1'); + $this->assertNoText('alpha_text_label'); + $this->assertNoText('beta_number_integer_label'); + $this->assertNoText('gamma_number_decimal_label'); + $this->assertNoText('delta_number_float_label'); + + // Check if zero's didn't cleared out values for node 2. + $this->drupalGet('node/2/edit'); + $this->assertNodeFieldValue('alpha', 0); + $this->assertNodeFieldValue('beta', 0); + $this->assertNodeFieldValue('gamma', 0); + $this->assertNodeFieldValue('delta', 0); + $this->assertFieldByName('body[und][0][value]', 0); + // Check if labels for fields of node 2 are still shown. + $this->drupalGet('node/2'); + $this->assertText('alpha_text_label'); + $this->assertText('beta_number_integer_label'); + $this->assertText('gamma_number_decimal_label'); + $this->assertText('delta_number_float_label'); + + // Re-import the first file again. + $this->importFile('csv', $this->absolutePath() . '/tests/feeds/content.csv'); + $this->assertText('Updated 2 nodes'); + + // Check if the two imported nodes have content again. + $this->drupalGet('node/1/edit'); + $this->assertNodeFieldValue('alpha', 'Lorem'); + $this->assertNodeFieldValue('beta', '42'); + $this->assertNodeFieldValue('gamma', '4.20'); + $this->assertNodeFieldValue('delta', '3.14159'); + $this->assertFieldByName('body[und][0][value]', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.'); + $this->drupalGet('node/2/edit'); + $this->assertNodeFieldValue('alpha', 'Ut wisi'); + $this->assertNodeFieldValue('beta', '32'); + $this->assertNodeFieldValue('gamma', '1.20'); + $this->assertNodeFieldValue('delta', '5.62951'); + $this->assertFieldByName('body[und][0][value]', 'Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.'); + + // Import CSV file with non-existent values. + $this->importFile('csv', $this->absolutePath() . '/tests/feeds/content_non_existent.csv'); + $this->assertText('Updated 2 nodes'); + + // Check if all values were cleared out for node 1. + $this->drupalGet('node/1/edit'); + $this->assertNoNodeFieldValue('alpha', 'Lorem'); + $this->assertNoNodeFieldValue('beta', '42'); + $this->assertNoNodeFieldValue('gamma', '4.20'); + $this->assertNoNodeFieldValue('delta', '3.14159'); + $this->assertFieldByName('body[und][0][value]', ''); + // Check if labels for fields that should be cleared out are not shown. + $this->drupalGet('node/1'); + $this->assertNoText('alpha_text_label'); + $this->assertNoText('beta_number_integer_label'); + $this->assertNoText('gamma_number_decimal_label'); + $this->assertNoText('delta_number_float_label'); + } }