Skip to content

Commit

Permalink
ENHANCEMENT Add YamlFixture String argument support
Browse files Browse the repository at this point in the history
Enhanced YamlFixtureTest to cover this addition.
  • Loading branch information
michalochman committed Jun 28, 2012
1 parent 402297e commit c282190
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 15 deletions.
52 changes: 37 additions & 15 deletions dev/YamlFixture.php
Expand Up @@ -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();
}

Expand All @@ -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.
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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);
}
}
}

Expand Down
10 changes: 10 additions & 0 deletions tests/testing/YamlFixtureTest.php
Expand Up @@ -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());
}

/**
Expand Down

0 comments on commit c282190

Please sign in to comment.