public function testSetId() { $factory = new FixtureFactory(); $obj = new FixtureFactoryTest_DataObject(); $obj->write(); $factory->setId('FixtureFactoryTest_DataObject', 'one', $obj->ID); $this->assertEquals($obj->ID, $factory->getId('FixtureFactoryTest_DataObject', 'one')); }
public function requireDefaultRecords() { parent::requireDefaultRecords(); // get schemas that need creating $schemas = $this->config()->get('default_schemas'); require_once 'spyc/spyc.php'; foreach ($schemas as $file) { if (file_exists(Director::baseFolder() . '/' . $file)) { $parser = new Spyc(); $factory = new FixtureFactory(); $fixtureContent = $parser->loadFile(Director::baseFolder() . '/' . $file); if (isset($fixtureContent['MetadataSchema'])) { $toBuild = array(); // check if it exists or not, if so don't re-create it foreach ($fixtureContent['MetadataSchema'] as $id => $desc) { $name = isset($desc['Name']) ? $desc['Name'] : null; if (!$name) { throw new Exception("Cannot create metadata schema without a name"); } $existing = MetadataSchema::get()->filter('Name', $name)->first(); if ($existing) { $factory->setId('MetadataSchema', $id, $existing->ID); } else { $factory->createObject('MetadataSchema', $id, $desc); DB::alteration_message('Metadata schema ' . $id . ' created', 'created'); } } // don't need this now unset($fixtureContent['MetadataSchema']); // go through and unset any existing fields $toBuild = array(); foreach ($fixtureContent as $class => $items) { foreach ($items as $identifier => $data) { $nameField = isset($data['Name']) ? 'Name' : (isset($data['Key']) ? 'Key' : ''); if (!strlen($nameField)) { throw new Exception("Metadata fields must have a Name or Key field defined"); } if (!isset($data['Title'])) { $data['Title'] = $data[$nameField]; } $existing = $class::get()->filter($nameField, $data[$nameField])->first(); if ($existing) { $factory->setId($class, $identifier, $existing->ID); } else { $factory->createObject($class, $identifier, $data); DB::alteration_message('Metadata field ' . $data[$nameField] . ' created', 'created'); } } } } } } }