/** * Load a YAML fixture file into the database. * Once loaded, you can use idFromFixture() and objFromFixture() to get items from the fixture * @param $fixtureFile The location of the .yml fixture file, relative to the site base dir */ function loadFixture($fixtureFile) { $parser = new Spyc(); $fixtureContent = $parser->load(Director::baseFolder().'/'.$fixtureFile); $this->fixture = new YamlFixture($fixtureFile); $this->fixture->saveIntoDatabase(); }
function run($request = null) { if (!DataObject::get_one('ZonedShippingMethod')) { $fixture = new YamlFixture('shop_shippingframework/tests/fixtures/ZonedShippingMethod.yml'); $fixture->saveIntoDatabase(); DB::alteration_message('Created zoned shipping methods', 'created'); } else { DB::alteration_message('Some zoned shipping methods already exist. None were created.'); } }
function run($request = null) { if (!DataObject::get_one('TaxClass')) { $fixture = new YamlFixture('shop_taxframework/tests/fixtures/TaxClasses.yml'); $fixture->saveIntoDatabase(); DB::alteration_message('Created tax classes', 'created'); } else { DB::alteration_message('Some tax classes already exist. None were created.'); } }
public function loadFixtures() { if (ClassInfo::exists('Subsite')) { $currentSubsite = Subsite::currentSubsiteID(); } foreach (self::$preload_fixtures as $desc) { $fixtureFile = $desc['file']; if (file_exists(Director::baseFolder() . '/' . $fixtureFile)) { $siteID = null; if (isset($desc['subsite'])) { $site = DataObject::get_one('Subsite', '"Title" = \'' . Convert::raw2sql($desc['subsite']) . '\''); if ($site && $site->ID) { $siteID = $site->ID; } if (!$siteID) { // no site, so just skip this file load continue; } } // need to disable the filter when running dev/build so that it actually searches // within the relevant subsite, not the 'current' one. if (ClassInfo::exists('Subsite')) { Subsite::$disable_subsite_filter = true; } $filter = $desc['filter'] . ($siteID ? ' AND "SubsiteID"=' . $siteID : ''); $existing = DataObject::get_one($desc['type'], $filter); if (ClassInfo::exists('Subsite')) { Subsite::$disable_subsite_filter = false; } if (!$existing) { if ($siteID) { Subsite::changeSubsite($siteID); } $fixture = new YamlFixture($fixtureFile); $fixture->saveIntoDatabase(); DB::alteration_message('YAML bootstrap loaded from ' . $fixtureFile, 'created'); } } } if (ClassInfo::exists('Subsite')) { Subsite::changeSubsite($currentSubsite); } }
function sessionloadyml() { // Load incremental YAML fixtures // TODO: We will probably have to filter out the admin member here, // as it is supplied by Bare.yml if (Director::isLive()) { return "<p>sessionloadyml can only be used on dev and test sites</p>"; } if (!SapphireTest::using_temp_db()) { return "<p>Please load /dev/tests/startsession first</p>"; } $fixtureFile = isset($_GET['fixture']) ? $_GET['fixture'] : null; if (empty($fixtureFile)) { $me = Director::baseURL() . "/dev/tests/sessionloadyml"; return <<<HTML \t\t\t\t<form action="{$me}"> \t\t\t\t\t<p>Enter a fixture file name to load a new YAML fixture into the session.</p> \t\t\t\t\t<p>Fixture file <input id="fixture-file" name="fixture" /></p> \t\t\t\t\t<input type="hidden" name="flush" value="1"> \t\t\t\t\t<p><input id="session-load-yaml" value="Load yml fixture" type="submit" /></p> \t\t\t\t</form> HTML; } // Validate fixture file $realFile = realpath(BASE_PATH . '/' . $fixtureFile); $baseDir = realpath(Director::baseFolder()); if (!$realFile || !file_exists($realFile)) { return "<p>Fixture file doesn't exist</p>"; } else { if (substr($realFile, 0, strlen($baseDir)) != $baseDir) { return "<p>Fixture file must be inside {$baseDir}</p>"; } else { if (substr($realFile, -4) != '.yml') { return "<p>Fixture file must be a .yml file</p>"; } else { if (!preg_match('/^([^\\/.][^\\/]+)\\/tests\\//', $fixtureFile)) { return "<p>Fixture file must be inside the tests subfolder of one of your modules.</p>"; } } } } // Fixture $fixture = new YamlFixture($fixtureFile); $fixture->saveIntoDatabase(); return "<p>Loaded fixture '{$fixtureFile}' into session</p>"; }
/** * Start a test session. * Usage: visit dev/tests/startsession?fixture=(fixturefile). A test database will be constructed, and your browser session will be amended * to use this database. This can only be run on dev and test sites. */ function startsession() { if(!Director::isLive()) { if(SapphireTest::using_temp_db()) { $endLink = Director::baseURL() . "/dev/tests/endsession"; return "<p><a id=\"end-session\" href=\"$endLink\">You're in the middle of a test session; click here to end it.</a></p>"; } else if(!isset($_GET['fixture'])) { $me = Director::baseURL() . "/dev/tests/startsession"; return <<<HTML <form action="$me"> <p>Enter a fixture file name to start a new test session. Don't forget to visit dev/tests/endsession when you're done!</p> <p>Fixture file: <input id="fixture-file" name="fixture" /></p> <input type="hidden" name="flush" value="1"> <p><input id="start-session" value="Start test session" type="submit" /></p> </form> HTML; } else { $fixtureFile = $_GET['fixture']; // Validate fixture file $realFile = realpath('../' . $fixtureFile); $baseDir = realpath(Director::baseFolder()); if(!$realFile || !file_exists($realFile)) { return "<p>Fixture file doesn't exist</p>"; } else if(substr($realFile,0,strlen($baseDir)) != $baseDir) { return "<p>Fixture file must be inside $baseDir</p>"; } else if(substr($realFile,-4) != '.yml') { return "<p>Fixture file must be a .yml file</p>"; } else if(!preg_match('/^([^\/.][^\/]+)\/tests\//', $fixtureFile)) { return "<p>Fixture file must be inside the tests subfolder of one of your modules.</p>"; } $dbname = SapphireTest::create_temp_db(); DB::set_alternative_database_name($dbname); $fixture = new YamlFixture($_GET['fixture']); $fixture->saveIntoDatabase(); return "<p>Started testing session with fixture '$fixtureFile'. Time to start testing; where would you like to start?</p> <ul> <li><a id=\"home-link\" href=\"" .Director::baseURL() . "\">Homepage - published site</a></li> <li><a id=\"draft-link\" href=\"" .Director::baseURL() . "?stage=Stage\">Homepage - draft site</a></li> <li><a id=\"admin-link\" href=\"" .Director::baseURL() . "admin/\">CMS Admin</a></li> </ul>"; } } else { return "<p>startession can only be used on dev and test sites</p>"; } }