You are here

public function HashTest::testIrrelevantUpdate in Feeds 8.3

Tests if items are not updated when only non-mapped data changes.

File

tests/src/Kernel/HashTest.php, line 18

Class

HashTest
Tests related to generating feeds item hashes.

Namespace

Drupal\Tests\feeds\Kernel

Code

public function testIrrelevantUpdate() {

  // Create a feed type, map to guid and title only.
  $feed_type = $this
    ->createFeedType([
    'fetcher' => 'directory',
    'fetcher_configuration' => [
      'allowed_extensions' => 'csv',
    ],
    'parser' => 'csv',
    'processor_configuration' => [
      'update_existing' => ProcessorInterface::UPDATE_EXISTING,
      'authorize' => FALSE,
      'values' => [
        'type' => 'article',
      ],
    ],
    'processor_configuration' => [
      'authorize' => FALSE,
      'update_existing' => ProcessorInterface::UPDATE_EXISTING,
      'values' => [
        'type' => 'article',
      ],
    ],
    'custom_sources' => [
      'guid' => [
        'label' => 'guid',
        'value' => 'guid',
        'machine_name' => 'guid',
      ],
      'title' => [
        'label' => 'title',
        'value' => 'title',
        'machine_name' => 'title',
      ],
    ],
  ]);

  // Create a feed and import first file.
  $feed = $this
    ->createFeed($feed_type
    ->id(), [
    'source' => $this
      ->resourcesPath() . '/csv/content.csv',
  ]);
  $feed
    ->import();

  // Assert two created nodes.
  $this
    ->assertNodeCount(2);

  // Assert the expected titles of these nodes.
  $nodes = Node::loadMultiple();
  $expected_titles = [
    1 => 'Lorem ipsum',
    2 => 'Ut wisi enim ad minim veniam',
  ];
  foreach ($expected_titles as $node_id => $expected_title) {
    $this
      ->assertEquals($expected_title, $nodes[$node_id]->title->value);
  }

  // Now manually change the titles of these nodes.
  for ($i = 1; $i <= 2; $i++) {
    $nodes[$i]->title->value = 'Node ' . $i;
    $nodes[$i]
      ->save();
  }

  // Import feed on which only non-mapped columns changed. Only values in the
  // column 'body' are different and that column is *not* mapped.
  $feed
    ->setSource($this
    ->resourcesPath() . '/csv/content_updated.csv');
  $feed
    ->save();
  $feed
    ->import();

  // Ensure that no nodes were updated.
  for ($i = 1; $i <= 2; $i++) {
    $node = $this
      ->reloadEntity($nodes[$i]);
    $this
      ->assertEquals('Node ' . $i, $node->title->value);
  }
}