2011-08-29 09:33:22 +02:00
|
|
|
<?php
|
|
|
|
/**
|
2012-04-12 08:02:46 +02:00
|
|
|
* @package framework
|
2011-08-29 09:33:22 +02:00
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
|
|
|
|
class DataDifferencerTest extends SapphireTest {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
protected static $fixture_file = 'DataDifferencerTest.yml';
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2011-08-29 22:23:22 +02:00
|
|
|
protected $extraDataObjects = array(
|
|
|
|
'DataDifferencerTest_Object',
|
|
|
|
'DataDifferencerTest_HasOneRelationObject',
|
|
|
|
'DataDifferencerTest_MockImage',
|
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testArrayValues() {
|
2011-08-29 09:33:22 +02:00
|
|
|
$obj1 = $this->objFromFixture('DataDifferencerTest_Object', 'obj1');
|
|
|
|
// create a new version
|
|
|
|
$obj1->Choices = array('a');
|
|
|
|
$obj1->write();
|
2011-08-29 22:23:22 +02:00
|
|
|
$obj1v1 = Versioned::get_version('DataDifferencerTest_Object', $obj1->ID, $obj1->Version-1);
|
|
|
|
$obj1v2 = Versioned::get_version('DataDifferencerTest_Object', $obj1->ID, $obj1->Version);
|
2011-08-29 09:33:22 +02:00
|
|
|
$differ = new DataDifferencer($obj1v1, $obj1v2);
|
|
|
|
$obj1Diff = $differ->diffedData();
|
|
|
|
// TODO Using getter would split up field again, bug only caused by simulating
|
|
|
|
// an array-based value in the first place.
|
2012-02-10 23:26:46 +01:00
|
|
|
$this->assertContains('<ins>a</ins><del>a,b</del>', str_replace(' ','',$obj1Diff->getField('Choices')));
|
2011-08-29 22:23:22 +02:00
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function testHasOnes() {
|
2011-08-29 22:23:22 +02:00
|
|
|
$obj1 = $this->objFromFixture('DataDifferencerTest_Object', 'obj1');
|
|
|
|
$image1 = $this->objFromFixture('DataDifferencerTest_MockImage', 'image1');
|
|
|
|
$image2 = $this->objFromFixture('DataDifferencerTest_MockImage', 'image2');
|
|
|
|
$relobj1 = $this->objFromFixture('DataDifferencerTest_HasOneRelationObject', 'relobj1');
|
|
|
|
$relobj2 = $this->objFromFixture('DataDifferencerTest_HasOneRelationObject', 'relobj2');
|
|
|
|
|
2012-04-14 09:56:13 +02:00
|
|
|
// in order to ensure the Filename path is correct, append the correct FRAMEWORK_DIR to the start
|
|
|
|
// this is only really necessary to make the test pass when FRAMEWORK_DIR is not "framework"
|
|
|
|
$image1->Filename = FRAMEWORK_DIR . substr($image1->Filename, 9);
|
|
|
|
$image2->Filename = FRAMEWORK_DIR . substr($image2->Filename, 9);
|
2013-03-21 19:48:54 +01:00
|
|
|
$origUpdateFilesystem = Config::inst()->get('File', 'update_filesystem');
|
2012-09-26 23:34:00 +02:00
|
|
|
// we don't want the filesystem being updated on write, as we're only dealing with mock files
|
2013-03-21 19:48:54 +01:00
|
|
|
Config::inst()->update('File', 'update_filesystem', false);
|
2012-04-14 09:56:13 +02:00
|
|
|
$image1->write();
|
|
|
|
$image2->write();
|
2013-03-21 19:48:54 +01:00
|
|
|
Config::inst()->update('File', 'update_filesystem', $origUpdateFilesystem);
|
2012-04-14 09:56:13 +02:00
|
|
|
|
2011-08-29 22:23:22 +02:00
|
|
|
// create a new version
|
|
|
|
$obj1->ImageID = $image2->ID;
|
|
|
|
$obj1->HasOneRelationID = $relobj2->ID;
|
|
|
|
$obj1->write();
|
|
|
|
$obj1v1 = Versioned::get_version('DataDifferencerTest_Object', $obj1->ID, $obj1->Version-1);
|
|
|
|
$obj1v2 = Versioned::get_version('DataDifferencerTest_Object', $obj1->ID, $obj1->Version);
|
|
|
|
$differ = new DataDifferencer($obj1v1, $obj1v2);
|
|
|
|
$obj1Diff = $differ->diffedData();
|
2012-04-14 09:56:13 +02:00
|
|
|
|
2011-08-29 22:23:22 +02:00
|
|
|
$this->assertContains($image1->Filename, $obj1Diff->getField('Image'));
|
|
|
|
$this->assertContains($image2->Filename, $obj1Diff->getField('Image'));
|
2012-09-26 23:34:00 +02:00
|
|
|
$this->assertContains('<ins>obj2</ins><del>obj1</del>',
|
|
|
|
str_replace(' ','',$obj1Diff->getField('HasOneRelationID')));
|
2011-08-29 09:33:22 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class DataDifferencerTest_Object extends DataObject implements TestOnly {
|
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $extensions = array('Versioned("Stage", "Live")');
|
2011-08-29 09:33:22 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $db = array(
|
2011-08-29 09:33:22 +02:00
|
|
|
'Choices' => "Varchar",
|
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $has_one = array(
|
2011-08-29 22:23:22 +02:00
|
|
|
'Image' => 'DataDifferencerTest_MockImage',
|
|
|
|
'HasOneRelation' => 'DataDifferencerTest_HasOneRelationObject'
|
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function getCMSFields() {
|
2012-04-13 15:46:47 +02:00
|
|
|
$fields = parent::getCMSFields();
|
2011-08-29 09:33:22 +02:00
|
|
|
$choices = array(
|
|
|
|
'a' => 'a',
|
|
|
|
'b' => 'b',
|
|
|
|
'c' => 'c',
|
|
|
|
);
|
|
|
|
$listField = new ListboxField('Choices', 'Choices', $choices);
|
|
|
|
$fields->push($listField);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2011-08-29 09:33:22 +02:00
|
|
|
return $fields;
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function getChoices() {
|
2011-08-29 09:33:22 +02:00
|
|
|
return explode(',', $this->getField('Choices'));
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2012-09-19 12:07:39 +02:00
|
|
|
public function setChoices($val) {
|
2011-08-29 09:33:22 +02:00
|
|
|
$this->setField('Choices', (is_array($val)) ? implode(',', $val) : $val);
|
|
|
|
}
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2011-08-29 22:23:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
class DataDifferencerTest_HasOneRelationObject extends DataObject implements TestOnly {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $db = array(
|
2011-08-29 22:23:22 +02:00
|
|
|
'Title' => 'Varchar'
|
|
|
|
);
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $has_many = array(
|
2011-08-29 22:23:22 +02:00
|
|
|
'Objects' => 'DataDifferencerTest_Object'
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
class DataDifferencerTest_MockImage extends Image implements TestOnly {
|
2012-09-19 12:07:39 +02:00
|
|
|
public function generateFormattedImage($format, $arg1 = null, $arg2 = null) {
|
2011-08-29 22:23:22 +02:00
|
|
|
$cacheFile = $this->cacheFilename($format, $arg1, $arg2);
|
2013-06-21 00:32:08 +02:00
|
|
|
$gd = new GDBackend(Director::baseFolder()."/" . $this->Filename);
|
2011-08-29 22:23:22 +02:00
|
|
|
// Skip aktual generation
|
|
|
|
return $gd;
|
|
|
|
}
|
2012-03-27 06:04:11 +02:00
|
|
|
}
|