You are here

class FeedsTamperUIWebTestCase in Feeds Tamper 7

Same name and namespace in other branches
  1. 8.2 legacy/feeds_tamper_ui/tests/feeds_tamper_ui.test \FeedsTamperUIWebTestCase
  2. 6 feeds_tamper_ui/tests/feeds_tamper_ui.test \FeedsTamperUIWebTestCase

Test Feeds Tamper UI.

Hierarchy

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);
  }

}

Members