/** * Tests hashing. */ public function testHashing() { $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 = array('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 = array('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 = array('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 = array('original_hash' => $this->randomMachineName(), 'hash' => $this->randomMachineName(), 'source_row_status' => MigrateIdMapInterface::STATUS_NEEDS_UPDATE); $row->setIdMap($test_id_map); $this->assertTrue($row->changed()); }