public function testHasOnes()
 {
     /** @var DataDifferencerTest_Object $obj1 */
     $obj1 = $this->objFromFixture('DataDifferencerTest_Object', 'obj1');
     $image1 = $this->objFromFixture('Image', 'image1');
     $image2 = $this->objFromFixture('Image', 'image2');
     $relobj1 = $this->objFromFixture('DataDifferencerTest_HasOneRelationObject', 'relobj1');
     $relobj2 = $this->objFromFixture('DataDifferencerTest_HasOneRelationObject', 'relobj2');
     // create a new version
     $beforeVersion = $obj1->Version;
     $obj1->ImageID = $image2->ID;
     $obj1->HasOneRelationID = $relobj2->ID;
     $obj1->write();
     $afterVersion = $obj1->Version;
     $this->assertNotEquals($beforeVersion, $afterVersion);
     /** @var DataDifferencerTest_Object $obj1v1 */
     $obj1v1 = Versioned::get_version('DataDifferencerTest_Object', $obj1->ID, $beforeVersion);
     /** @var DataDifferencerTest_Object $obj1v2 */
     $obj1v2 = Versioned::get_version('DataDifferencerTest_Object', $obj1->ID, $afterVersion);
     $differ = new DataDifferencer($obj1v1, $obj1v2);
     $obj1Diff = $differ->diffedData();
     $this->assertContains($image1->Name, $obj1Diff->getField('Image'));
     $this->assertContains($image2->Name, $obj1Diff->getField('Image'));
     $this->assertContains('<ins>obj2</ins><del>obj1</del>', str_replace(' ', '', $obj1Diff->getField('HasOneRelationID')));
 }
 /**
  * @param int $from
  * @param int $to
  *
  * @return string
  */
 public function humanizedChanges($from, $to)
 {
     if (!$from) {
         return _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdmin.UPLOADEDFILE', "Uploaded file");
     }
     $fromRecord = Versioned::get_version($this->owner->class, $this->owner->ID, $from);
     $toRecord = Versioned::get_version($this->owner->class, $this->owner->ID, $to);
     $diff = new DataDifferencer($fromRecord, $toRecord);
     $changes = $diff->changedFieldNames();
     $k = array_search('LastEdited', $changes);
     if ($k !== false) {
         unset($changes[$k]);
     }
     $output = array();
     foreach ($changes as $change) {
         $human = $change;
         if ($change == "ParentID") {
             // updated folder ID
             $human = _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdminFile.MOVEDFOLDER', "Moved file");
         } elseif ($change == 'Title') {
             $human = _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdminFile.RENAMEDTITLE', "Updated title to ") . $fromRecord->Title;
         } elseif ($change == 'Name') {
             $human = _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdminFile.RENAMEDFILE', "Renamed file to ") . $fromRecord->Filename;
         } elseif ($change == 'File') {
             // check to make sure the files are actually different
             if ($fromRecord->getHash() != $toRecord->getHash()) {
                 $human = _t('SilverStripe\\AssetAdmin\\Controller\\AssetAdminFile.RENAMEDFILE', "Replaced file");
             } else {
                 $human = false;
             }
         } else {
             $human = false;
         }
         if ($human) {
             $output[] = $human;
         }
     }
     return implode(", ", $output);
 }
 /**
  * Compare two version, and return the diff between them.
  *
  * @param string $from The version to compare from.
  * @param string $to The version to compare to.
  *
  * @return DataObject
  */
 public function compareVersions($from, $to)
 {
     $owner = $this->owner;
     $fromRecord = Versioned::get_version($owner->class, $owner->ID, $from);
     $toRecord = Versioned::get_version($owner->class, $owner->ID, $to);
     $diff = new DataDifferencer($fromRecord, $toRecord);
     return $diff->diffedData();
 }