diff --git a/dev/YamlFixture.php b/dev/YamlFixture.php index d0e2a9e5325..f7e13b74ddc 100644 --- a/dev/YamlFixture.php +++ b/dev/YamlFixture.php @@ -84,19 +84,30 @@ class YamlFixture extends Object { * @var array */ protected $fixtureDictionary; - + + /** + * String containing fixture + * + * @var String + */ + protected $fixtureString; + /** * @param String Absolute file path, or relative path to {@link Director::baseFolder()} */ - function __construct($fixtureFile) { - if(!Director::is_absolute($fixtureFile)) $fixtureFile = Director::baseFolder().'/'. $fixtureFile; - - if(!file_exists($fixtureFile)) { - throw new InvalidArgumentException('YamlFixture::__construct(): Fixture path "' . $fixtureFile . '" not found'); + function __construct($fixture) { + if(false !== strpos($fixture, "\n")) { + $this->fixtureString = $fixture; + } else { + if(!Director::is_absolute($fixture)) $fixture = Director::baseFolder().'/'. $fixture; + + if(!file_exists($fixture)) { + throw new InvalidArgumentException('YamlFixture::__construct(): Fixture path "' . $fixture . '" not found'); + } + + $this->fixtureFile = $fixture; } - $this->fixtureFile = $fixtureFile; - parent::__construct(); } @@ -106,6 +117,13 @@ function __construct($fixtureFile) { function getFixtureFile() { return $this->fixtureFile; } + + /** + * @return String Fixture string + */ + function getFixtureString() { + return $this->fixtureString; + } /** * Get the ID of an object from the fixture. @@ -162,7 +180,11 @@ public function saveIntoDatabase(DataModel $model) { DataObject::set_validation_enabled(false); $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(); foreach($fixtureContent as $dataClass => $items) { @@ -228,12 +250,12 @@ protected function writeDataObject($model, $dataClass, $items) { } } $obj->write(); - //If LastEdited was set in the fixture, set it here - if (array_key_exists('LastEdited', $fields)) { - $manip = array($dataClass => array("command" => "update", "id" => $obj->id, - "fields" => array("LastEdited" => "'".$this->parseFixtureVal($fields['LastEdited'])."'"))); - DB::manipulate($manip); - } + //If LastEdited was set in the fixture, set it here + if (array_key_exists('LastEdited', $fields)) { + $manip = array($dataClass => array("command" => "update", "id" => $obj->id, + "fields" => array("LastEdited" => "'".$this->parseFixtureVal($fields['LastEdited'])."'"))); + DB::manipulate($manip); + } } } diff --git a/tests/testing/YamlFixtureTest.php b/tests/testing/YamlFixtureTest.php index 7943ad79bfb..d495222e275 100644 --- a/tests/testing/YamlFixtureTest.php +++ b/tests/testing/YamlFixtureTest.php @@ -13,12 +13,22 @@ function testAbsoluteFixturePath() { $absPath = FRAMEWORK_PATH . '/tests/testing/YamlFixtureTest.yml'; $obj = new YamlFixture($absPath); $this->assertEquals($absPath, $obj->getFixtureFile()); + $this->assertNull($obj->getFixtureString()); } function testRelativeFixturePath() { $relPath = FRAMEWORK_DIR . '/tests/testing/YamlFixtureTest.yml'; $obj = new YamlFixture($relPath); $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()); } /**