Skip to content
Snippets Groups Projects
feeds_hooks.test 5.1 KiB
Newer Older
<?php

/**
 * Tests for hooks invoked by Feeds not related to mapping.
 */
class FeedsHooksTestCase extends FeedsWebTestCase {

  /**
   * {@inheritdoc}
   */
  public static function getInfo() {
    return array(
      'name' => 'Hooks',
      'description' => 'Tests for hooks invoked by Feeds not related to mapping.',
      'group' => 'Feeds',
    );
  }

  /**
   * Tests the hook hook_config_defaults().
   */
  public function testHookConfigDefaults() {
    // Switch on hook implementations in the feeds_tests module.
    variable_set('feeds_tests_hook_config_defaults', TRUE);

    $this->createImporterConfiguration('Config defaults test', 'config_defaults_test');

    // Load the importer and check the default value for
    // 'feeds_tests_extra_setting'.
    $importer = feeds_importer_load('config_defaults_test');
    $importer_config = $importer->getConfig();
    $this->assertFalse($importer_config['feeds_tests_extra_setting'], "Option 'Extra setting' is disabled.");

    // Assert that other configurables do not have this setting.
    $fetcher_config = $importer->fetcher->getConfig();
    $parser_config = $importer->fetcher->getConfig();
    $processor_config = $importer->fetcher->getConfig();
    $this->assertFalse(isset($fetcher_config['feeds_tests_extra_setting']));
    $this->assertFalse(isset($parser_config['feeds_tests_extra_setting']));
    $this->assertFalse(isset($processor_config['feeds_tests_extra_setting']));

    // Now change this setting.
    $this->setSettings('config_defaults_test', NULL, array(
      'feeds_tests_extra_setting' => TRUE,
    ));

    // Reload the importer and assert that the configuration option changed.
    drupal_static_reset();
    $importer = feeds_importer_load('config_defaults_test');
    $importer_config = $importer->getConfig();
    $this->assertTrue($importer_config['feeds_tests_extra_setting'], "Option 'Extra setting' is enabled.");
  }

  /**
   * Tests the hook hook_PLUGIN_TYPE_config_defaults().
   */
  public function testHookPluginTypeConfigDefaults() {
    // Switch on hook implementations in the feeds_tests module.
    variable_set('feeds_tests_hook_config_defaults', TRUE);

    $this->createImporterConfiguration('Config defaults test', 'config_defaults_test');
    // Change parser plugin to CSV as the common syndication parser does not
    // have a config form.
    $this->setPlugin('config_defaults_test', 'FeedsCSVParser');

    // Load the importer and check default values for each plugin.
    $importer = feeds_importer_load('config_defaults_test');
    $fetcher_config = $importer->fetcher->getConfig();
    $parser_config = $importer->parser->getConfig();
    $processor_config = $importer->processor->getConfig();
    $this->assertFalse($fetcher_config['feeds_tests_fetcher_extra_setting'], "Option 'Extra setting' is disabled for the fetcher.");
    $this->assertTrue($parser_config['feeds_tests_parser_extra_setting'], "Option 'Extra setting' is enabled for the parser.");
    $this->assertEqual('', $processor_config['feeds_tests_processor_extra_setting'], "Setting 'Extra setting' is empty.");

    // Assert that the setting for a particular plugin does not exists for other
    // configurables.
    $importer_config = $importer->getConfig();
    $this->assertFalse(isset($importer_config['feeds_tests_fetcher_extra_setting']));
    $this->assertFalse(isset($importer_config['feeds_tests_parser_extra_setting']));
    $this->assertFalse(isset($importer_config['feeds_tests_processor_extra_setting']));
    $this->assertFalse(isset($fetcher_config['feeds_tests_parser_extra_setting']));
    $this->assertFalse(isset($fetcher_config['feeds_tests_processor_extra_setting']));
    $this->assertFalse(isset($parser_config['feeds_tests_fetcher_extra_setting']));
    $this->assertFalse(isset($parser_config['feeds_tests_processor_extra_setting']));
    $this->assertFalse(isset($processor_config['feeds_tests_fetcher_extra_setting']));
    $this->assertFalse(isset($processor_config['feeds_tests_parser_extra_setting']));

    // Now change the settings for each plugin.
    $this->setSettings('config_defaults_test', 'FeedsHTTPFetcher', array(
      'feeds_tests_fetcher_extra_setting' => TRUE,
    ));
    $this->setSettings('config_defaults_test', 'FeedsCSVParser', array(
      'feeds_tests_parser_extra_setting' => FALSE,
    ));
    $this->setSettings('config_defaults_test', 'FeedsNodeProcessor', array(
      'feeds_tests_processor_extra_setting' => 'my setting',
    ));

    // Reload the importer and assert that the configuration changed.
    drupal_static_reset();
    $importer = feeds_importer_load('config_defaults_test');
    $fetcher_config = $importer->fetcher->getConfig();
    $parser_config = $importer->parser->getConfig();
    $processor_config = $importer->processor->getConfig();
    $this->assertTrue($fetcher_config['feeds_tests_fetcher_extra_setting'], "Option 'Extra setting' is enabled for the fetcher.");
    $this->assertFalse($parser_config['feeds_tests_parser_extra_setting'], "Option 'Extra setting' is disabled for the parser.");
    $this->assertEqual('my setting', $processor_config['feeds_tests_processor_extra_setting'], "Setting 'Extra setting' is 'my setting'.");
  }

}