class FeedsTamperUIWebTestCase in Feeds Tamper 7
Same name and namespace in other branches
- 8.2 legacy/feeds_tamper_ui/tests/feeds_tamper_ui.test \FeedsTamperUIWebTestCase
- 6 feeds_tamper_ui/tests/feeds_tamper_ui.test \FeedsTamperUIWebTestCase
Test Feeds Tamper UI.
Hierarchy
- class \FeedsTamperWebTestHelper extends \FeedsWebTestCase
- class \FeedsTamperUIWebTestCase
Expanded class hierarchy of FeedsTamperUIWebTestCase
File
- feeds_tamper_ui/
tests/ feeds_tamper_ui.test, line 11 - Tests for feeds_tamper_ui.module.
View source
class FeedsTamperUIWebTestCase extends FeedsTamperWebTestHelper {
public static function getInfo() {
return array(
'name' => 'Feeds Tamper UI',
'description' => 'Regression tests for Feeds Tamper UI.',
'group' => 'Feeds Tamper',
);
}
public function setUp() {
parent::setUp(array(
'feeds_tamper_ui',
), array(
'administer feeds_tamper',
));
}
public function testBasic() {
$importer_name = $this
->randomName();
$importer_id = drupal_strtolower($importer_name);
$mapping_url = 'admin/structure/feeds/' . $importer_id . '/mapping';
$tamper_url = 'admin/structure/feeds/' . $importer_id . '/tamper';
$this
->createImporterConfiguration($importer_name, $importer_id);
// Check help text when there are no mappings.
$this
->drupalGet($tamper_url);
$this
->assertText('There are no mappings defined for this importer.');
$this
->addMappings($importer_id, array(
0 => array(
'source' => 'title',
'target' => 'title',
'unique' => FALSE,
),
1 => array(
'source' => 'guid',
'target' => 'guid',
'unique' => TRUE,
),
2 => array(
'source' => 'description',
'target' => 'body',
),
));
// Check that tamper operation exists on feeds page.
$this
->drupalGet('admin/structure/feeds');
$this
->assertText('Edit | Export | Clone | Delete | Tamper');
// Check help text and link.
$this
->drupalGet($tamper_url);
$this
->assertLinkByHref($mapping_url);
$this
->assertText('Configure plugins to modify Feeds data before it gets saved. Each mapping can be manipulated individually.');
// Test basic plugin adding.
$settings = array(
'settings[mode]' => 0,
);
$id = $this
->addTamperPlugin($importer_id, 'title', 'convert_case', $settings);
// Create feed node, running import automatically.
$nid = $this
->createFeedNode($importer_id);
// Assert that all titles were uppercased.
$this
->drupalGet('node');
$this
->assertUppercaseDevseedFeedContent();
$this
->toggleTamperPlugin($importer_id, 0, $id);
$this
->toggleTamperPlugin($importer_id, 0, $id, TRUE);
$this
->setTamperPluginWeight($importer_id, 0, $id, 2);
$this
->deleteTamperPlugin($id);
$settings = array(
'settings[mode]' => 0,
);
$case = $this
->addTamperPlugin($importer_id, 'title', 'convert_case', $settings);
$settings = array(
'settings[side]' => 'trim',
);
$trim = $this
->addTamperPlugin($importer_id, 'title', 'trim', $settings);
$this
->toggleTamperPlugin($importer_id, 0, $case);
$this
->toggleTamperPlugin($importer_id, 0, $case, TRUE);
$this
->setTamperPluginWeight($importer_id, 0, $case, 2);
$this
->deleteTamperPlugin($case);
$this
->deleteTamperPlugin($trim);
// Login with user who can't tamper.
$this->feeds_user = $this
->drupalCreateUser(array(
'administer feeds',
));
$this
->drupalLogin($this->feeds_user);
// Check that tamper operation is gone.
$this
->drupalGet('admin/structure/feeds');
$this
->assertText('Edit | Export | Clone | Delete');
$this
->assertNoText('Tamper');
// Check that "tamper importer_id" permissions work. Reset permission static
// cache.
$this
->checkPermissions(array(), TRUE);
$this->feeds_user = $this
->drupalCreateUser(array(
'administer feeds',
'tamper ' . $importer_id,
));
$this
->drupalLogin($this->feeds_user);
// Check that things are back.
$this
->drupalGet('admin/structure/feeds');
$this
->assertText('Edit | Export | Clone | Delete | Tamper');
$this
->drupalLogin($this->admin_user);
// Verify that sources with spaces in the name work. See #1093958.
$settings = array(
'remove_flags[0]' => TRUE,
);
$this
->drupalPost($mapping_url, $settings, 'Save');
$this
->addMappings($importer_id, array(
2 => array(
'source' => 'Blank source 1',
'target' => 'title',
),
));
// Test that form_alter is working properly.
$this
->assertFieldByXPath('id("edit-source")/option[text() = "Blank source"]/@value', 'Blank source 2');
// Delete feed items.
$this
->drupalPost('node/' . $nid . '/delete-items', array(), 'Delete');
// Verify that Blank source behaves properly.
$id = $this
->addTamperPlugin($importer_id, 'Blank source 1', 'hash');
// Reimport.
$this
->drupalPost('node/' . $nid . '/import', array(), 'Import');
$this
->assertHashedDevseedFeedContent();
// Verify that removing a mapping removes the plugins.
$plugins = feeds_tamper_load_all_instances(TRUE, TRUE);
$this
->assertTrue(reset($plugins)->plugin_id === 'hash', 'Hash plugin exists before removal.');
$settings = array(
'remove_flags[2]' => TRUE,
);
$this
->drupalPost($mapping_url, $settings, 'Save');
$plugins = feeds_tamper_load_all_instances(TRUE, TRUE);
$this
->assertTrue(empty($plugins), 'Hash plugin removed with mapping');
// Get to a somewhat clean state.
$this
->drupalPost('node/' . $nid . '/delete-items', array(), 'Delete');
node_delete($nid);
$this
->drupalPost('admin/structure/feeds/' . $importer_id . '/delete', array(), 'Delete');
}
public function testCSV() {
$importer_name = $this
->randomName();
$importer_id = drupal_strtolower($importer_name);
// Set up an importer.
$this
->createImporterConfiguration($importer_name, $importer_id);
// Set and configure plugins and mappings.
$this
->setPlugin($importer_id, 'FeedsCSVParser');
// We have a space in the source cause that was a problem at one point.
$mappings = array(
0 => array(
'source' => 'a /T~!@#$%^&*()_+`<>;:itle✈',
'target' => 'title',
),
1 => array(
// The period is intentional.
'source' => 'a Body.',
'target' => 'body',
),
2 => array(
'source' => 'a GUID',
'target' => 'guid',
'unique' => TRUE,
),
);
$this
->addMappings($importer_id, $mappings);
// Set update existing.
$this
->setSettings($importer_id, 'FeedsNodeProcessor', array(
'update_existing' => 1,
));
// Test basic plugin adding. Use the literal UI to verify things work.
$this
->drupalGet('admin/structure/feeds/' . $importer_id . '/tamper');
$this
->clickLink(t('Add plugin'));
$this
->drupalPost(NULL, array(
'plugin_id' => 'convert_case',
), t('Choose'));
$this
->drupalPost(NULL, array(
'settings[mode]' => 0,
), t('Add'));
$this
->drupalGet('admin/structure/feeds/' . $importer_id . '/tamper');
$this
->clickLink(t('Add plugin'), 1);
$this
->drupalPost(NULL, array(
'plugin_id' => 'convert_case',
), t('Choose'));
$this
->drupalPost(NULL, array(
'settings[mode]' => 0,
), t('Add'));
$path = $GLOBALS['base_url'] . '/' . drupal_get_path('module', 'feeds_tamper') . '/tests/feeds_tamper/';
$nid = $this
->createFeedNode($importer_id, $path . 'csv_test.csv', 'Testing CSV Parser');
$this
->assertText('Basic page Testing CSV Parser has been created.');
$this
->assertText('Created 2 nodes.');
$this
->drupalGet('node');
$this
->assertText('HELLO WORLD');
$this
->assertText('THIS IS A GREAT BODY.');
$this
->assertText('WORLD DOES NOT RESPOND');
$this
->assertText('THIS IS A SAD BODY.');
$edit = array(
'0[table][' . $importer_id . '-' . feeds_tamper_make_machine('a /T~!@#$%^&*()_+`<>;:itle✈') . '-convert_case][enabled]' => FALSE,
'1[table][' . $importer_id . '-' . feeds_tamper_make_machine('a Body.') . '-convert_case][enabled]' => FALSE,
);
$this
->drupalPost('admin/structure/feeds/' . $importer_id . '/tamper', $edit, t('Save'));
$this
->drupalPost('node/' . $nid . '/import', array(), 'Import');
$this
->assertText('Updated 2 nodes.');
$this
->drupalGet('node');
$this
->assertText('Hello world');
$this
->assertText('This is a great body.');
$this
->assertText('World does not respond');
$this
->assertText('This is a sad body.');
}
protected function addTamperPlugin($importer_id, $source, $plugin_id, $settings = array(), $description = NULL, $id = NULL) {
$plugin = feeds_tamper_get_plugin($plugin_id);
$default_description = !empty($plugin['default description']) ? $plugin['default description'] : $plugin['name'];
$url = 'admin/structure/feeds/' . $importer_id . '/tamper/add/' . bin2hex($source);
$this
->drupalPost($url, array(
'plugin_id' => $plugin_id,
), t('Choose'));
// Check that default values were added to form.
$this
->assertFieldByName('description', $default_description);
// Set settings.
$edit = array(
'plugin_id' => $plugin_id,
);
if (!empty($description)) {
$edit['description'] = $description;
}
if (!empty($id)) {
$edit['id'] = $id;
}
$this
->drupalPost(NULL, $edit + $settings, 'Add');
$description = !empty($description) ? $description : $default_description;
$id = $importer_id . '-' . feeds_tamper_make_machine($source) . '-' . $plugin_id;
$instance = feeds_tamper_load_instance($id);
$source_name = feeds_tamper_ui_source_name($instance);
$this
->assertText('Plugin ' . $description . ' was successfully added to ' . $source_name . '.');
return $id;
}
protected function toggleTamperPlugin($importer_id, $delta, $id, $enable = FALSE) {
$url = 'admin/structure/feeds/' . $importer_id . '/tamper';
$name = $delta . '[table][' . $id . '][enabled]';
$this
->drupalPost($url, array(
$name => $enable,
), 'Save');
$this
->assertFieldByName($name, $enable);
$this
->assertText('Your changes have been saved.');
}
protected function setTamperPluginWeight($importer_id, $delta, $id, $weight) {
$url = 'admin/structure/feeds/' . $importer_id . '/tamper';
$name = $delta . '[table][' . $id . '][weight]';
$this
->drupalPost($url, array(
$name => $weight,
), 'Save');
$this
->assertFieldByName($name, $weight);
$this
->assertText('Your changes have been saved.');
}
protected function deleteTamperPlugin($id) {
$instance = feeds_tamper_load_instance($id);
$url = 'admin/structure/feeds/' . $instance->importer . '/tamper/' . $id . '/delete';
$this
->drupalGet($url);
$this
->assertText('Would you really like to delete the plugin ' . $instance->description . '?');
$this
->assertText('This action cannot be undone.');
$this
->drupalPost(NULL, array(), 'Delete');
$source_name = feeds_tamper_ui_source_name($instance);
$this
->assertText('The plugin ' . $instance->description . ' has been deleted from ' . $source_name . '.');
$result = db_query("SELECT * FROM {feeds_tamper} WHERE id = :id", array(
':id' => $instance->id,
))
->fetchObject();
$this
->assertFalse($result);
}
}