View source
<?php
namespace Drupal\Tests\feeds\Kernel;
use Drupal\feeds\Plugin\Type\Processor\ProcessorInterface;
use Drupal\node\Entity\Node;
class SourcePluginsTest extends FeedsKernelTestBase {
public static $modules = [
'field',
'node',
'feeds',
'text',
'filter',
'feeds_test_extra_sources',
];
protected $feedType;
protected function setUp() {
parent::setUp();
$this
->setUpBodyField();
$config = \Drupal::service('config.factory')
->getEditable('system.site');
$config
->set('name', 'Feeds test site');
$config
->set('slogan', 'It feeds!');
$config
->save();
$this
->createFieldWithStorage('field_name');
$this
->createFieldWithStorage('field_slogan');
}
public function testUpdateOnChangeInExtraSource() {
$feed_type = $this
->createFeedType([
'fetcher' => 'directory',
'fetcher_configuration' => [
'allowed_extensions' => 'atom rss rss1 rss2 opml xml',
],
'processor_configuration' => [
'authorize' => FALSE,
'update_existing' => ProcessorInterface::UPDATE_EXISTING,
'values' => [
'type' => 'article',
],
],
'mappings' => array_merge($this
->getDefaultMappings(), [
[
'target' => 'field_name',
'map' => [
'value' => 'site:name',
],
'settings' => [
'format' => 'plain_text',
],
],
[
'target' => 'field_slogan',
'map' => [
'value' => 'site:slogan',
],
'settings' => [
'format' => 'plain_text',
],
],
]),
]);
$feed = $this
->createFeed($feed_type
->id(), [
'source' => $this
->resourcesPath() . '/rss/googlenewstz.rss2',
]);
$feed
->import();
static::assertEquals(6, $feed
->getItemCount());
$this
->assertNodeCount(6);
for ($i = 1; $i <= 6; $i++) {
$node = Node::load($i);
$this
->assertEquals('Feeds test site', $node->field_name->value);
$this
->assertEquals('It feeds!', $node->field_slogan->value);
}
$config = \Drupal::service('config.factory')
->getEditable('system.site');
$config
->set('slogan', 'Feeds is awesome!');
$config
->save();
$feed
->import();
for ($i = 1; $i <= 6; $i++) {
$node = Node::load($i);
$this
->assertEquals('Feeds test site', $node->field_name->value);
$this
->assertEquals('Feeds is awesome!', $node->field_slogan->value);
}
}
public function testAlterExtraSource() {
$feed_type = $this
->createFeedType([
'id' => 'my_feed',
'fetcher' => 'directory',
'fetcher_configuration' => [
'allowed_extensions' => 'atom rss rss1 rss2 opml xml',
],
'processor_configuration' => [
'authorize' => FALSE,
'update_existing' => ProcessorInterface::UPDATE_EXISTING,
'values' => [
'type' => 'article',
],
],
'mappings' => array_merge($this
->getDefaultMappings(), [
[
'target' => 'field_slogan',
'map' => [
'value' => 'site:slogan',
],
'settings' => [
'format' => 'plain_text',
],
],
]),
]);
$feed = $this
->createFeed($feed_type
->id(), [
'source' => $this
->resourcesPath() . '/rss/googlenewstz.rss2',
]);
$feed
->import();
static::assertEquals(6, $feed
->getItemCount());
$this
->assertNodeCount(6);
$titles = [
1 => 'first thoughts: dems\' black tuesday - msnbc.com',
2 => 'obama wants to fast track a final health care bill - usa today',
3 => 'why the nexus one makes other android phones obsolete - pc world',
4 => 'newsmaker-new japan finance minister a fiery battler - reuters',
5 => 'yemen detains al-qaeda suspects after embassy threats - bloomberg',
6 => 'egypt, hamas exchange fire on gaza frontier, 1 dead - reuters',
];
$slogans = [
1 => 'First feeds!',
2 => 'Obama feeds!',
3 => 'Why feeds!',
4 => 'NEWSMAKER-New feeds!',
5 => 'Yemen feeds!',
6 => 'Egypt feeds!',
];
for ($i = 1; $i <= 6; $i++) {
$node = Node::load($i);
$this
->assertEquals($titles[$i], $node->title->value);
$this
->assertEquals($slogans[$i], $node->field_slogan->value);
}
}
}