mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge branch 'gsoc-22-yamlfixture-import-string-rc' of https://github.com/michalochman/sapphire into michalochman-gsoc-22-yamlfixture-import-string-rc
This commit is contained in:
commit
9f0cfe00b6
@ -85,18 +85,29 @@ class YamlFixture extends Object {
|
|||||||
*/
|
*/
|
||||||
protected $fixtureDictionary;
|
protected $fixtureDictionary;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing fixture
|
||||||
|
*
|
||||||
|
* @var String
|
||||||
|
*/
|
||||||
|
protected $fixtureString;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param String Absolute file path, or relative path to {@link Director::baseFolder()}
|
* @param String Absolute file path, or relative path to {@link Director::baseFolder()}
|
||||||
*/
|
*/
|
||||||
function __construct($fixtureFile) {
|
function __construct($fixture) {
|
||||||
if(!Director::is_absolute($fixtureFile)) $fixtureFile = Director::baseFolder().'/'. $fixtureFile;
|
if(false !== strpos($fixture, "\n")) {
|
||||||
|
$this->fixtureString = $fixture;
|
||||||
|
} else {
|
||||||
|
if(!Director::is_absolute($fixture)) $fixture = Director::baseFolder().'/'. $fixture;
|
||||||
|
|
||||||
if(!file_exists($fixtureFile)) {
|
if(!file_exists($fixture)) {
|
||||||
throw new InvalidArgumentException('YamlFixture::__construct(): Fixture path "' . $fixtureFile . '" not found');
|
throw new InvalidArgumentException('YamlFixture::__construct(): Fixture path "' . $fixture . '" not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fixtureFile = $fixture;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fixtureFile = $fixtureFile;
|
|
||||||
|
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,6 +118,13 @@ class YamlFixture extends Object {
|
|||||||
return $this->fixtureFile;
|
return $this->fixtureFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return String Fixture string
|
||||||
|
*/
|
||||||
|
function getFixtureString() {
|
||||||
|
return $this->fixtureString;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the ID of an object from the fixture.
|
* Get the ID of an object from the fixture.
|
||||||
* @param $className The data class, as specified in your fixture file. Parent classes won't work
|
* @param $className The data class, as specified in your fixture file. Parent classes won't work
|
||||||
@ -162,7 +180,11 @@ class YamlFixture extends Object {
|
|||||||
DataObject::set_validation_enabled(false);
|
DataObject::set_validation_enabled(false);
|
||||||
|
|
||||||
$parser = new Spyc();
|
$parser = new Spyc();
|
||||||
$fixtureContent = $parser->loadFile($this->fixtureFile);
|
if (isset($this->fixtureString)) {
|
||||||
|
$fixtureContent = $parser->load($this->fixtureString);
|
||||||
|
} else {
|
||||||
|
$fixtureContent = $parser->loadFile($this->fixtureFile);
|
||||||
|
}
|
||||||
|
|
||||||
$this->fixtureDictionary = array();
|
$this->fixtureDictionary = array();
|
||||||
foreach($fixtureContent as $dataClass => $items) {
|
foreach($fixtureContent as $dataClass => $items) {
|
||||||
@ -228,12 +250,12 @@ class YamlFixture extends Object {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$obj->write();
|
$obj->write();
|
||||||
//If LastEdited was set in the fixture, set it here
|
//If LastEdited was set in the fixture, set it here
|
||||||
if (array_key_exists('LastEdited', $fields)) {
|
if (array_key_exists('LastEdited', $fields)) {
|
||||||
$manip = array($dataClass => array("command" => "update", "id" => $obj->id,
|
$manip = array($dataClass => array("command" => "update", "id" => $obj->id,
|
||||||
"fields" => array("LastEdited" => "'".$this->parseFixtureVal($fields['LastEdited'])."'")));
|
"fields" => array("LastEdited" => "'".$this->parseFixtureVal($fields['LastEdited'])."'")));
|
||||||
DB::manipulate($manip);
|
DB::manipulate($manip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,12 +13,22 @@ class YamlFixtureTest extends SapphireTest {
|
|||||||
$absPath = FRAMEWORK_PATH . '/tests/testing/YamlFixtureTest.yml';
|
$absPath = FRAMEWORK_PATH . '/tests/testing/YamlFixtureTest.yml';
|
||||||
$obj = new YamlFixture($absPath);
|
$obj = new YamlFixture($absPath);
|
||||||
$this->assertEquals($absPath, $obj->getFixtureFile());
|
$this->assertEquals($absPath, $obj->getFixtureFile());
|
||||||
|
$this->assertNull($obj->getFixtureString());
|
||||||
}
|
}
|
||||||
|
|
||||||
function testRelativeFixturePath() {
|
function testRelativeFixturePath() {
|
||||||
$relPath = FRAMEWORK_DIR . '/tests/testing/YamlFixtureTest.yml';
|
$relPath = FRAMEWORK_DIR . '/tests/testing/YamlFixtureTest.yml';
|
||||||
$obj = new YamlFixture($relPath);
|
$obj = new YamlFixture($relPath);
|
||||||
$this->assertEquals(Director::baseFolder() . '/' . $relPath, $obj->getFixtureFile());
|
$this->assertEquals(Director::baseFolder() . '/' . $relPath, $obj->getFixtureFile());
|
||||||
|
$this->assertNull($obj->getFixtureString());
|
||||||
|
}
|
||||||
|
|
||||||
|
function testStringFixture() {
|
||||||
|
$absPath = FRAMEWORK_PATH . '/tests/testing/YamlFixtureTest.yml';
|
||||||
|
$string = file_get_contents($absPath);
|
||||||
|
$obj = new YamlFixture($string);
|
||||||
|
$this->assertEquals($string, $obj->getFixtureString());
|
||||||
|
$this->assertNull($obj->getFixtureFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user