123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <?php
- /**
- * @file
- * Contains FeedsMapperNodeSummaryTestCase.
- */
- /**
- * Test case for mapping to node summary.
- */
- class FeedsMapperNodeSummaryTestCase extends FeedsMapperTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Mapper: Text with summary',
- 'description' => 'Test Feeds Mapper support for text with summary fields.',
- 'group' => 'Feeds',
- );
- }
- /**
- * Tests importing CSV files for text fields with summary.
- */
- public function test() {
- // Create and configure importer.
- $this->createImporterWithSummaryMapper();
- // Create a new filter format.
- $format = drupal_strtolower($this->randomName());
- $edit = array(
- 'format' => $format,
- 'name' => $this->randomName(),
- // Authenticated users.
- 'roles[2]' => TRUE,
- );
- $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
- // The "update existing" and "skip hash check" are turned on so we can test
- // later if the summaries of the nodes get overwritten with the values from
- // the source.
- $this->setSettings('syndication', 'FeedsNodeProcessor', array(
- 'update_existing' => 2,
- 'skip_hash_check' => TRUE,
- 'input_format' => $format,
- ));
- // Import CSV file.
- $this->importFile('syndication', $this->absolutePath() . '/tests/feeds/node_summary.csv');
- $this->assertText('Created 3 nodes');
- $this->assertNodeSummaryValues();
- // Check that text format is applied correctly.
- $this->drupalGet('node/1/edit');
- $this->assertNodeFieldValue('format', $format);
- // Check the teasers of the three imported nodes, assumed to be all present
- // on the front page.
- $this->assertNodeTeaserValues();
- // Set a summary and a text for each imported node.
- $edit = array(
- 'body[und][0][summary]' => 'Nam liber tempor summary',
- 'body[und][0][value]' => 'Nam liber tempor body',
- );
- $this->drupalPost('node/1/edit', $edit, t('Save'));
- $this->drupalPost('node/2/edit', $edit, t('Save'));
- $this->drupalPost('node/3/edit', $edit, t('Save'));
- // Import the same CSV file again.
- $this->importFile('syndication', $this->absolutePath() . '/tests/feeds/node_summary.csv');
- $this->assertText('Updated 3 nodes');
- $this->assertNodeSummaryValues();
- $this->assertNodeTeaserValues();
- // The previous texts of the nodes should no longer be visible.
- $this->assertNoText('Nam liber tempor summary');
- $this->assertNoText('Nam liber tempor body');
- // Check that text format is applied correctly.
- $this->drupalGet('node/1/edit');
- $this->assertNodeFieldValue('format', $format);
- $this->drupalGet('node/2/edit');
- $this->assertNodeFieldValue('format', $format);
- $this->drupalGet('node/3/edit');
- $this->assertNodeFieldValue('format', $format);
- // Remove the body mapping to check that the text format doesn't get updated
- // from the summary.
- $this->removeMappings('syndication', array(
- 2 => array(
- 'source' => 'body',
- 'target' => 'body',
- ),
- ));
- // Change the text format and remove the body mapping to ensure that the
- // text format doesn't change.
- $this->setSettings('syndication', 'FeedsNodeProcessor', array(
- 'input_format' => 'plain_text',
- ));
- $this->importFile('syndication', $this->absolutePath() . '/tests/feeds/node_summary.csv');
- $this->assertText('Updated 3 nodes');
- // Check that text format remains at its previous value.
- $this->drupalGet('node/1/edit');
- $this->assertNodeFieldValue('format', $format);
- $this->drupalGet('node/2/edit');
- $this->assertNodeFieldValue('format', $format);
- $this->drupalGet('node/3/edit');
- $this->assertNodeFieldValue('format', $format);
- }
- /**
- * Creates an importer with a summary mapper.
- *
- * @param $name
- * The natural name of the feed.
- * @param $id
- * The persistent id of the feed.
- *
- * @return void
- */
- protected function createImporterWithSummaryMapper($name = 'Syndication', $id = 'syndication') {
- // Create content type. A field named "body" which is of type "Long text and summary"
- // will be created by default, so we don't need to create a field of that type here.
- $typename = $this->createContentType(array());
- // Create and configure importer.
- $this->createImporterConfiguration($name, $id);
- $this->setSettings('syndication', NULL, array(
- 'content_type' => '',
- 'import_period' => FEEDS_SCHEDULE_NEVER,
- ));
- $this->setPlugin('syndication', 'FeedsFileFetcher');
- $this->setPlugin('syndication', 'FeedsCSVParser');
- $this->setSettings('syndication', 'FeedsNodeProcessor', array('bundle' => $typename));
- $this->addMappings('syndication', array(
- 0 => array(
- 'source' => 'title',
- 'target' => 'title',
- ),
- 1 => array(
- 'source' => 'summary',
- 'target' => 'body:summary',
- ),
- 2 => array(
- 'source' => 'body',
- 'target' => 'body',
- ),
- 3 => array(
- 'source' => 'guid',
- 'target' => 'guid',
- 'unique' => TRUE,
- ),
- ));
- }
- /**
- * Overrides FeedsMapperTestCase::getFormFieldsNames().
- *
- * Returns different form field names for:
- * - body
- * This field doesn't have the "field_" prefix.
- * - summary
- * Which is part of the body field.
- * - format
- * The format of the body field.
- */
- protected function getFormFieldsNames($field_name, $index) {
- switch ($field_name) {
- case 'body':
- return array("body[und][{$index}][value]");
- case 'summary':
- return array("body[und][{$index}][summary]");
- case 'format':
- return array("body[und][{$index}][format]");
- }
- return parent::getFormFieldsNames($field_name, $index);
- }
- /**
- * Checks that the nodes match the imported values.
- */
- protected function assertNodeSummaryValues() {
- // Check the three imported nodes.
- $this->drupalGet('node/1/edit');
- $this->assertNodeFieldValue('summary', 'Lorem ipsum summary');
- $this->assertNodeFieldValue('body', 'Lorem ipsum body');
- $this->drupalGet('node/2/edit');
- $this->assertNodeFieldValue('summary', '');
- $this->assertNodeFieldValue('body', 'Ut wisi enim ad minim veniam body');
- $this->drupalGet('node/3/edit');
- $this->assertNodeFieldValue('summary', '');
- $this->assertNodeFieldValue('body', '');
- }
- /**
- * Checks the frontpage for teaser values.
- */
- protected function assertNodeTeaserValues() {
- $this->drupalGet('');
- $this->assertText('Lorem ipsum summary');
- $this->assertNoText('Lorem ipsum body');
- $this->assertText('Ut wisi enim ad minim veniam body');
- }
- }
|