function RowTest::testHashing

Same name and namespace in other branches
  1. 9 core/modules/migrate/tests/src/Unit/RowTest.php \Drupal\Tests\migrate\Unit\RowTest::testHashing()
  2. 8.9.x core/modules/migrate/tests/src/Unit/RowTest.php \Drupal\Tests\migrate\Unit\RowTest::testHashing()
  3. 11.x core/modules/migrate/tests/src/Unit/RowTest.php \Drupal\Tests\migrate\Unit\RowTest::testHashing()

Tests hashing.

File

core/modules/migrate/tests/src/Unit/RowTest.php, line 153

Class

RowTest
@coversDefaultClass \Drupal\migrate\Row[[api-linebreak]] @group migrate

Namespace

Drupal\Tests\migrate\Unit

Code

public function testHashing() : void {
  $row = new Row($this->testValues, $this->testSourceIds);
  $this->assertSame('', $row->getHash(), 'No hash at creation');
  $row->rehash();
  $this->assertSame($this->testHash, $row->getHash(), 'Correct hash.');
  $row->rehash();
  $this->assertSame($this->testHash, $row->getHash(), 'Correct hash even doing it twice.');
  // Set the map to needs update.
  $test_id_map = [
    'original_hash' => '',
    'hash' => '',
    'source_row_status' => MigrateIdMapInterface::STATUS_NEEDS_UPDATE,
  ];
  $row->setIdMap($test_id_map);
  $this->assertTrue($row->needsUpdate());
  $row->rehash();
  $this->assertSame($this->testHash, $row->getHash(), 'Correct hash even if id_mpa have changed.');
  $row->setSourceProperty('title', 'new title');
  $row->rehash();
  $this->assertSame($this->testHashMod, $row->getHash(), 'Hash changed correctly.');
  // Check hash calculation algorithm.
  $hash = hash('sha256', serialize($row->getSource()));
  $this->assertSame($hash, $row->getHash());
  // Check length of generated hash used for mapping schema.
  $this->assertSame(64, strlen($row->getHash()));
  // Set the map to successfully imported.
  $test_id_map = [
    'original_hash' => '',
    'hash' => '',
    'source_row_status' => MigrateIdMapInterface::STATUS_IMPORTED,
  ];
  $row->setIdMap($test_id_map);
  $this->assertFalse($row->needsUpdate());
  // Set the same hash value and ensure it was not changed.
  $random = $this->randomMachineName();
  $test_id_map = [
    'original_hash' => $random,
    'hash' => $random,
    'source_row_status' => MigrateIdMapInterface::STATUS_NEEDS_UPDATE,
  ];
  $row->setIdMap($test_id_map);
  $this->assertFalse($row->changed());
  // Set different has values to ensure it is marked as changed.
  $test_id_map = [
    'original_hash' => $this->randomMachineName(),
    'hash' => $this->randomMachineName(),
    'source_row_status' => MigrateIdMapInterface::STATUS_NEEDS_UPDATE,
  ];
  $row->setIdMap($test_id_map);
  $this->assertTrue($row->changed());
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.