<?php

namespace SilverStripe\Cms\Test\Behaviour;

use SilverStripe\BehatExtension\Context\SilverStripeContext,
	SilverStripe\BehatExtension\Context\BasicContext,
	SilverStripe\BehatExtension\Context\LoginContext,
	SilverStripe\BehatExtension\Context\FixtureContext,
	SilverStripe\Framework\Test\Behaviour\CmsFormsContext,
	SilverStripe\Framework\Test\Behaviour\CmsUiContext,
	SilverStripe\Cms\Test\Behaviour;

// PHPUnit
require_once 'PHPUnit/Autoload.php';
require_once 'PHPUnit/Framework/Assert/Functions.php';

/**
 * Features context
 *
 * Context automatically loaded by Behat.
 * Uses subcontexts to extend functionality.
 */
class FeatureContext extends \SilverStripe\Framework\Test\Behaviour\FeatureContext {

	/**
	 * Initializes context.
	 * Every scenario gets it's own context object.
	 *
	 * @param   array   $parameters     context parameters (set them up through behat.yml)
	 */
	public function __construct(array $parameters) {
		parent::__construct($parameters);

		// Override existing fixture context with more specific one
		$fixtureContext = new \SilverStripe\Cms\Test\Behaviour\FixtureContext($parameters);
		$fixtureContext->setFixtureFactory($this->getFixtureFactory());
		$this->useContext('FixtureContext', $fixtureContext);

		// Add extra contexts with more steps
		$this->useContext('ThemeContext', new \SilverStripe\Cms\Test\Behaviour\ThemeContext($parameters));

		// Use blueprints which auto-publish all subclasses of SiteTree
		$factory = $fixtureContext->getFixtureFactory();
		foreach(\ClassInfo::subclassesFor('SiteTree') as $id => $class) {
			$blueprint = \Injector::inst()->create('FixtureBlueprint', $class);
			$blueprint->addCallback('afterCreate', function($obj, $identifier, &$data, &$fixtures) {
				$obj->publish('Stage', 'Live');
			});
			$factory->define($class, $blueprint);
		} 

	}
}