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:
Ingo Schommer 2012-06-29 14:34:17 +02:00
commit 9f0cfe00b6
2 changed files with 47 additions and 15 deletions

View File

@ -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);
} }
} }
} }

View File

@ -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());
} }
/** /**