Beispiel #1
0
 public 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());
 }
 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.');
     }
 }
 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.');
     }
 }
 /**
  * @var bool
  *
  * @throws Exception
  */
 public static function requireRecords($force = false)
 {
     if (self::$ran && !$force) {
         return true;
     }
     self::$ran = true;
     if (!(Director::isDev() || Director::isTest())) {
         throw new Exception('requireRecords can only be run in development or test environments');
     }
     $factory = Injector::inst()->create('PopulateFactory');
     foreach (self::config()->get('truncate_objects') as $objName) {
         $versions = array();
         if (class_exists($objName)) {
             foreach (DataList::create($objName) as $obj) {
                 // if the object has the versioned extension, make sure we delete
                 // that as well
                 if ($obj->hasExtension('Versioned')) {
                     foreach ($obj->getVersionedStages() as $stage) {
                         $versions[$stage] = true;
                         $obj->deleteFromStage($stage);
                     }
                 }
                 try {
                     @$obj->delete();
                 } catch (Exception $e) {
                     // notice
                 }
             }
         }
         if ($versions) {
             self::truncate_versions($objName, $versions);
         }
         foreach ((array) ClassInfo::getValidSubClasses($objName) as $table) {
             self::truncate_table($table);
             self::truncate_versions($table, $versions);
         }
         self::truncate_table($objName);
     }
     foreach (self::config()->get('include_yaml_fixtures') as $fixtureFile) {
         $fixture = new YamlFixture($fixtureFile);
         $fixture->writeInto($factory);
         $fixture = null;
     }
     // hook allowing extensions to clean up records, modify the result or
     // export the data to a SQL file (for importing performance).
     $static = !(isset($this) && get_class($this) == __CLASS__);
     if ($static) {
         $populate = Injector::inst()->create('Populate');
     } else {
         $populate = $this;
     }
     $populate->extend('onAfterPopulateRecords');
     return true;
 }
 function run($request = null)
 {
     if (!DataObject::get_one('ZonedShippingMethod')) {
         $factory = Injector::inst()->create('FixtureFactory');
         $fixture = new YamlFixture('silvershop-shipping/tests/fixtures/ZonedShippingMethod.yml');
         $fixture->writeInto($factory);
         DB::alteration_message('Created zoned shipping methods', 'created');
     } else {
         DB::alteration_message('Some zoned shipping methods already exist. None were created.');
     }
 }
	/**
	 * 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();
	}
 /**
  * @var bool
  *
  * @throws Exception
  */
 public static function requireRecords($force = false)
 {
     if (self::$ran && !$force) {
         return true;
     }
     self::$ran = true;
     if (!(Director::isDev() || Director::isTest())) {
         throw new Exception('requireRecords can only be run in development or test environments');
     }
     $factory = Injector::inst()->create('PopulateFactory');
     foreach (self::config()->get('truncate_objects') as $objName) {
         $versions = array();
         if (class_exists($objName)) {
             foreach (DataList::create($objName) as $obj) {
                 // if the object has the versioned extension, make sure we delete
                 // that as well
                 if ($obj->hasExtension('Versioned')) {
                     foreach ($obj->getVersionedStages() as $stage) {
                         $versions[$stage] = true;
                         $obj->deleteFromStage($stage);
                     }
                 }
                 try {
                     @$obj->delete();
                 } catch (Exception $e) {
                     // notice
                 }
             }
         }
         if ($versions) {
             self::truncate_versions($objName, $versions);
         }
         foreach (ClassInfo::getValidSubClasses($objName) as $table) {
             self::truncate_table($table);
             self::truncate_versions($table, $versions);
         }
         self::truncate_table($objName);
     }
     foreach (self::config()->get('include_yaml_fixtures') as $fixtureFile) {
         $fixture = new YamlFixture($fixtureFile);
         $fixture->writeInto($factory);
         $fixture = null;
     }
     return true;
 }
 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);
     }
 }
Beispiel #9
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>";
    }
 /**
  * Accepts YAML fixture definitions similar to the ones used in SilverStripe unit testing.
  * 
  * Example: Given there are the following member records:
  *  member1:
  *    Email: member1@test.com
  *  member2:
  *    Email: member2@test.com
  * 
  * @Given /^there are the following ([^\s]*) records$/
  */
 public function stepThereAreTheFollowingRecords($dataObject, PyStringNode $string)
 {
     $yaml = array_merge(array($dataObject . ':'), $string->getLines());
     $yaml = implode("\n  ", $yaml);
     // Save fixtures into database
     // TODO Run prepareAsset() for each File and Folder record
     $yamlFixture = new \YamlFixture($yaml);
     $yamlFixture->writeInto($this->getFixtureFactory());
 }
Beispiel #11
0
	/**
	 * 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>";
		}
	}
Beispiel #12
0
	function testRelativeFixturePath() {
		$relPath = FRAMEWORK_DIR . '/tests/testing/YamlFixtureTest.yml';
		$obj = new YamlFixture($relPath);
		$this->assertEquals(Director::baseFolder() . '/' . $relPath, $obj->getFixtureFile());
	}
 public function run($request)
 {
     if ($request->getVar('createintzone')) {
         $this->populateInternationalZone();
         DB::alteration_message('Created an international zone', 'created');
         return;
     }
     $this->extend("beforePopulate");
     $factory = Injector::inst()->create('FixtureFactory');
     $parentid = 0;
     //create products
     if (!DataObject::get_one('Product')) {
         $fixture = new YamlFixture(SHOP_DIR . "/tests/fixtures/dummyproducts.yml");
         $fixture->writeInto($factory);
         //needs to be a data model
         $shoppage = ProductCategory::get()->filter('URLSegment', 'shop')->first();
         $parentid = $shoppage->ID;
         $categoriestopublish = array('products', 'electronics', 'apparel', 'entertainment', 'music', 'movies', 'drama', 'toys', 'food', 'books', 'jewellery', 'furniture', 'kitchen', 'bedroom', 'stationery');
         foreach ($categoriestopublish as $categoryname) {
             $factory->get("ProductCategory", $categoryname)->publish('Stage', 'Live');
         }
         $productstopublish = array('mp3player', 'hdtv', 'socks', 'tshirt', 'beachball', 'hoop', 'kite', 'genericmovie', 'lemonchicken', 'ring', 'book', 'lamp', 'paper', 'pens');
         foreach ($productstopublish as $productname) {
             $factory->get("Product", $productname)->publish('Stage', 'Live');
         }
         DB::alteration_message('Created dummy products and categories', 'created');
     } else {
         echo "<p style=\"color:orange;\">Products and categories were not created because some already exist.</p>";
     }
     //cart page
     if (!($page = DataObject::get_one('CartPage'))) {
         $fixture = new YamlFixture(SHOP_DIR . "/tests/fixtures/pages/Cart.yml");
         $fixture->writeInto($factory);
         $page = $factory->get("CartPage", "cart");
         $page->ParentID = $parentid;
         $page->writeToStage('Stage');
         $page->publish('Stage', 'Live');
         DB::alteration_message('Cart page created', 'created');
     }
     //checkout page
     if (!($page = DataObject::get_one('CheckoutPage'))) {
         $fixture = new YamlFixture(SHOP_DIR . "/tests/fixtures/pages/Checkout.yml");
         $fixture->writeInto($factory);
         $page = $factory->get("CheckoutPage", "checkout");
         $page->ParentID = $parentid;
         $page->writeToStage('Stage');
         $page->publish('Stage', 'Live');
         DB::alteration_message('Checkout page created', 'created');
     }
     //account page
     if (!DataObject::get_one('AccountPage')) {
         $fixture = new YamlFixture(SHOP_DIR . "/tests/fixtures/pages/Account.yml");
         $fixture->writeInto($factory);
         $page = $factory->get("AccountPage", "account");
         $page->ParentID = $parentid;
         $page->writeToStage('Stage');
         $page->publish('Stage', 'Live');
         DB::alteration_message('Account page \'Account\' created', 'created');
     }
     //terms page
     if (!($termsPage = DataObject::get_one('Page', "\"URLSegment\" = 'terms-and-conditions'"))) {
         $fixture = new YamlFixture(SHOP_DIR . "/tests/fixtures/pages/TermsConditions.yml");
         $fixture->writeInto($factory);
         $page = $factory->get("Page", "termsconditions");
         $page->ParentID = $parentid;
         $page->writeToStage('Stage');
         $page->publish('Stage', 'Live');
         //set terms page id in config
         $config = SiteConfig::current_site_config();
         $config->TermsPageID = $page->ID;
         $config->write();
         DB::alteration_message("Terms and conditions page created", 'created');
     }
     //countries config - removes some countries
     $siteconfig = SiteConfig::current_site_config();
     if (empty($siteconfig->AllowedCountries)) {
         $siteconfig->AllowedCountries = "AF,AL,DZ,AS,AD,AO,AG,AR,AM,AU,AT,AZ,BS,BH,\n\t\t\tBD,BB,BY,BE,BZ,BJ,BT,BO,BA,BW,BR,BN,BG,BF,BI,\n\t\t\tKH,CM,CA,CV,CF,TD,CL,CN,CO,KM,CG,CR,CI,HR,CU,\n\t\t\tCY,CZ,DK,DJ,DM,DO,EC,EG,SV,GQ,ER,EE,ET,FJ,FI,\n\t\t\tFR,GA,GM,GE,DE,GH,GR,GD,GT,GN,GW,GY,HT,HN,HK,\n\t\t\tHU,IS,IN,ID,IR,IQ,IE,IL,IT,JM,JP,JO,KZ,KE,KI,\n\t\t\tKP,KR,KW,KG,LA,LV,LB,LS,LR,LY,LI,LT,LU,MG,MW,\n\t\t\tMY,MV,ML,MT,MH,MR,MU,MX,FM,MD,MC,MN,MS,MA,MZ,\n\t\t\tMM,NA,NR,NP,NL,NZ,NI,NE,NG,NO,OM,PK,PW,PA,PG,\n\t\t\tPY,PE,PH,PL,PT,QA,RO,RU,RW,KN,LC,VC,WS,SM,ST,\n\t\t\tSA,SN,SC,SL,SG,SK,SI,SB,SO,ZA,ES,LK,SD,SR,SZ,\n\t\t\tSE,CH,SY,TJ,TZ,TH,TG,TO,TT,TN,TR,TM,TV,UG,UA,\n\t\t\tAE,GB,US,UY,UZ,VU,VE,VN,YE,YU,ZM,ZW";
         $siteconfig->write();
     }
     $this->extend("afterPopulate");
 }