/**
	 * 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);
     }
 }
Exemple #5
0
    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>";
		}
	}