mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
API Enable config files to be loaded for behat tests
This commit is contained in:
parent
c0211927aa
commit
c14233f743
@ -94,8 +94,8 @@
|
|||||||
"thirdparty/"
|
"thirdparty/"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "phpcs src/ tests/php",
|
"lint": "phpcs src/ tests/php/ tests/behat/src/",
|
||||||
"lint-clean": "phpcbf src/ tests/php",
|
"lint-clean": "phpcbf src/ tests/php/ tests/behat/src/",
|
||||||
"php-peg": "php thirdparty/php-peg/cli.php src/View/SSTemplateParser.peg > src/View/SSTemplateParser.php"
|
"php-peg": "php thirdparty/php-peg/cli.php src/View/SSTemplateParser.peg > src/View/SSTemplateParser.php"
|
||||||
},
|
},
|
||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
|
@ -352,5 +352,4 @@ JS;
|
|||||||
// Destroy cookie to detach session
|
// Destroy cookie to detach session
|
||||||
$this->getMainContext()->getSession()->setCookie('PHPSESSID', null);
|
$this->getMainContext()->getSession()->setCookie('PHPSESSID', null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
133
tests/behat/src/ConfigContext.php
Normal file
133
tests/behat/src/ConfigContext.php
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Framework\Tests\Behaviour;
|
||||||
|
|
||||||
|
use Behat\Behat\Context\Context;
|
||||||
|
use Behat\Behat\Hook\Scope\AfterScenarioScope;
|
||||||
|
use InvalidArgumentException;
|
||||||
|
use SilverStripe\BehatExtension\Context\MainContextAwareTrait;
|
||||||
|
use SilverStripe\Core\Injector\Injector;
|
||||||
|
use SilverStripe\Core\Kernel;
|
||||||
|
use SilverStripe\Core\Manifest\ModuleLoader;
|
||||||
|
use SilverStripe\Core\Manifest\ModuleManifest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides custom config abilities.
|
||||||
|
*/
|
||||||
|
class ConfigContext implements Context
|
||||||
|
{
|
||||||
|
use MainContextAwareTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path to yml config fixtures
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $configPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Track all config files installed into mysite/_config/behat*.yml
|
||||||
|
*
|
||||||
|
* @var string[]
|
||||||
|
*/
|
||||||
|
protected $activatedConfigFiles = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new ConfigContext
|
||||||
|
*
|
||||||
|
* @param string $configPath Path to config files. E.g.
|
||||||
|
* `%paths.modules.framework%/tests/behat/features/configs/`
|
||||||
|
*/
|
||||||
|
public function __construct($configPath = null)
|
||||||
|
{
|
||||||
|
if (empty($configPath)) {
|
||||||
|
throw new InvalidArgumentException("filesPath is required");
|
||||||
|
}
|
||||||
|
$this->setConfigPath($configPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getConfigPath()
|
||||||
|
{
|
||||||
|
return $this->configPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $configPath
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setConfigPath($configPath)
|
||||||
|
{
|
||||||
|
$this->configPath = $configPath;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up all files after scenario
|
||||||
|
*
|
||||||
|
* @AfterScenario
|
||||||
|
* @param AfterScenarioScope $event
|
||||||
|
*/
|
||||||
|
public function afterResetAssets(AfterScenarioScope $event)
|
||||||
|
{
|
||||||
|
// No files to cleanup
|
||||||
|
if (empty($this->activatedConfigFiles)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->activatedConfigFiles as $configFile) {
|
||||||
|
if (file_exists($configFile)) {
|
||||||
|
unlink($configFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->activatedConfigFiles = [];
|
||||||
|
|
||||||
|
// Flush
|
||||||
|
$this->stepIFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When /^(?:|I )go flush the website$/
|
||||||
|
*/
|
||||||
|
public function stepIFlush()
|
||||||
|
{
|
||||||
|
$this->getMainContext()->visit('/?flush=all');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup a config file. The $filename should be a yml filename
|
||||||
|
* placed in the directory specified by configPaths argument
|
||||||
|
* to fixture constructor.
|
||||||
|
*
|
||||||
|
* @When /^(?:|I )have a config file "([^"]+)"$/
|
||||||
|
* @param string $filename
|
||||||
|
*/
|
||||||
|
public function stepIHaveConfigFile($filename)
|
||||||
|
{
|
||||||
|
// Ensure site is in dev mode
|
||||||
|
/** @var Kernel $kernel */
|
||||||
|
$kernel = Injector::inst()->get(Kernel::class);
|
||||||
|
assertEquals(Kernel::DEV, $kernel->getEnvironment(), "Site is in dev mode");
|
||||||
|
|
||||||
|
// Ensure file exists in specified fixture dir
|
||||||
|
$sourceDir = $this->getConfigPath();
|
||||||
|
$sourcePath = "{$sourceDir}/{$filename}";
|
||||||
|
assertFileExists($sourcePath, "Config file {$filename} exists");
|
||||||
|
|
||||||
|
// Get destination
|
||||||
|
$project = ModuleManifest::config()->get('project') ?: 'mysite';
|
||||||
|
$mysite = ModuleLoader::getModule($project);
|
||||||
|
assertNotNull($mysite, 'Project exists');
|
||||||
|
$destPath = $mysite->getResourcePath("_config/{$filename}");
|
||||||
|
assertFileNotExists($destPath, "Config file {$filename} hasn't aleady been loaded");
|
||||||
|
|
||||||
|
// Load
|
||||||
|
$this->activatedConfigFiles[] = $destPath;
|
||||||
|
copy($sourcePath, $destPath);
|
||||||
|
|
||||||
|
// Flush website
|
||||||
|
$this->stepIFlush();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user