From bb92e494d765985c367ea6d9e58d1877da2aba8e Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Tue, 4 Jun 2013 17:30:13 +0200 Subject: [PATCH] Behat fixture refactoring (shared factory instance) --- .../features/bootstrap/FeatureContext.php | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/tests/behat/features/bootstrap/FeatureContext.php b/tests/behat/features/bootstrap/FeatureContext.php index a522e8a7c..636306f8a 100644 --- a/tests/behat/features/bootstrap/FeatureContext.php +++ b/tests/behat/features/bootstrap/FeatureContext.php @@ -5,6 +5,7 @@ namespace SilverStripe\Framework\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; @@ -20,6 +21,12 @@ require_once 'PHPUnit/Framework/Assert/Functions.php'; */ class FeatureContext extends SilverStripeContext { + + /** + * @var FixtureFactory + */ + protected $fixtureFactory; + /** * Initializes context. * Every scenario gets it's own context object. @@ -28,11 +35,38 @@ class FeatureContext extends SilverStripeContext */ public function __construct(array $parameters) { + parent::__construct($parameters); + $this->useContext('BasicContext', new BasicContext($parameters)); $this->useContext('LoginContext', new LoginContext($parameters)); $this->useContext('CmsFormsContext', new CmsFormsContext($parameters)); $this->useContext('CmsUiContext', new CmsUiContext($parameters)); - parent::__construct($parameters); + $fixtureContext = new FixtureContext($parameters); + $fixtureContext->setFixtureFactory($this->getFixtureFactory()); + $this->useContext('FixtureContext', $fixtureContext); + } + + public function setMinkParameters(array $parameters) + { + parent::setMinkParameters($parameters); + + if(isset($parameters['files_path'])) { + $this->getSubcontext('FixtureContext')->setFilesPath($parameters['files_path']); + } + } + + /** + * @return FixtureFactory + */ + public function getFixtureFactory() { + if(!$this->fixtureFactory) { + $this->fixtureFactory = \Injector::inst()->get('FixtureFactory', 'FixtureContextFactory'); + } + return $this->fixtureFactory; + } + + public function setFixtureFactory(FixtureFactory $factory) { + $this->fixtureFactory = $factory; } }