mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
Merge remote-tracking branch 'origin/3.1'
This commit is contained in:
commit
3aa95f4c83
@ -36,6 +36,9 @@ class FeatureContext extends \SilverStripe\Framework\Test\Behaviour\FeatureConte
|
|||||||
$fixtureContext->setFixtureFactory($this->getFixtureFactory());
|
$fixtureContext->setFixtureFactory($this->getFixtureFactory());
|
||||||
$this->useContext('FixtureContext', $fixtureContext);
|
$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
|
// Use blueprints which auto-publish all subclasses of SiteTree
|
||||||
$factory = $fixtureContext->getFixtureFactory();
|
$factory = $fixtureContext->getFixtureFactory();
|
||||||
foreach(\ClassInfo::subclassesFor('SiteTree') as $id => $class) {
|
foreach(\ClassInfo::subclassesFor('SiteTree') as $id => $class) {
|
||||||
|
@ -0,0 +1,109 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Cms\Test\Behaviour;
|
||||||
|
|
||||||
|
use Behat\Behat\Context\ClosuredContextInterface,
|
||||||
|
Behat\Behat\Context\TranslatedContextInterface,
|
||||||
|
Behat\Behat\Context\BehatContext,
|
||||||
|
Behat\Behat\Context\Step,
|
||||||
|
Behat\Behat\Event\StepEvent,
|
||||||
|
Behat\Behat\Exception\PendingException,
|
||||||
|
Behat\Mink\Driver\Selenium2Driver,
|
||||||
|
Behat\Gherkin\Node\PyStringNode,
|
||||||
|
Behat\Gherkin\Node\TableNode;
|
||||||
|
|
||||||
|
// PHPUnit
|
||||||
|
require_once 'PHPUnit/Autoload.php';
|
||||||
|
require_once 'PHPUnit/Framework/Assert/Functions.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Context used to create fixtures in the SilverStripe ORM.
|
||||||
|
*/
|
||||||
|
class ThemeContext extends BehatContext {
|
||||||
|
|
||||||
|
protected $restoreFiles = array();
|
||||||
|
protected $restoreDirectories = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a test theme
|
||||||
|
*
|
||||||
|
* @Given /^a theme "(?<theme>[^"]+)"/
|
||||||
|
*/
|
||||||
|
public function stepCreateTheme($theme) {
|
||||||
|
if(!preg_match('/^[0-9a-zA-Z_-]+$/', $theme)) throw new \InvalidArgumentException("Bad theme '$theme'");
|
||||||
|
|
||||||
|
$this->requireDir(BASE_PATH . '/themes');
|
||||||
|
$this->requireDir(BASE_PATH . '/themes/' . $theme);
|
||||||
|
$this->requireDir(BASE_PATH . '/themes/' . $theme . '/templates');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a template within a test theme
|
||||||
|
*
|
||||||
|
* @Given /^a template "(?<template>[^"]+)" in theme "(?<theme>[^"]+)" with content "(?<content>[^"]+)"/
|
||||||
|
*/
|
||||||
|
public function stepCreateTemplate($template, $theme, $content) {
|
||||||
|
if(!preg_match('/^[0-9a-zA-Z_-]+$/', $theme)) throw new \InvalidArgumentException("Bad theme '$theme'");
|
||||||
|
if(!preg_match('/^(Layout\/)?[0-9a-zA-Z_-]+\.ss$/', $template)) throw new \InvalidArgumentException("Bad template '$template'");
|
||||||
|
|
||||||
|
$this->stepCreateTheme($theme);
|
||||||
|
$this->requireFile(BASE_PATH . '/themes/' . $theme . '/templates/' . $template, $content);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function requireFile($filename, $content) {
|
||||||
|
// Already exists
|
||||||
|
if(file_exists($filename)) {
|
||||||
|
// If the content is different, remember old content for restoration
|
||||||
|
$origContent = file_get_contents($filename);
|
||||||
|
if($origContent != $content) {
|
||||||
|
file_put_contents($filename, $content);
|
||||||
|
$this->restoreFiles[$filename] = $origContent;
|
||||||
|
}
|
||||||
|
// Doesn't exist, mark it for deletion after test
|
||||||
|
} else {
|
||||||
|
file_put_contents($filename, $content);
|
||||||
|
$this->restoreFiles[$filename] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function requireDir($dirname) {
|
||||||
|
// Directory doesn't exist, create it and mark it for deletion
|
||||||
|
if(!file_exists($dirname)) {
|
||||||
|
mkdir($dirname);
|
||||||
|
$this->restoreDirectories[] = $dirname;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up any theme manipulation
|
||||||
|
*
|
||||||
|
* @AfterScenario
|
||||||
|
*/
|
||||||
|
public function cleanThemesAfterScenario() {
|
||||||
|
// Restore any created/modified files.
|
||||||
|
// - If modified, revert then to original contnet
|
||||||
|
// - If created, delete them
|
||||||
|
if($this->restoreFiles) {
|
||||||
|
foreach($this->restoreFiles as $file => $origContent) {
|
||||||
|
if($origContent === null) {
|
||||||
|
unlink($file);
|
||||||
|
} else {
|
||||||
|
file_put_contents($file, $origContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->restoreFiles = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore any created directories: that is, delete them
|
||||||
|
if($this->restoreDirectories) {
|
||||||
|
// Flip the order so that nested direcotires are unlinked() first
|
||||||
|
$this->restoreDirectories = array_reverse($this->restoreDirectories);
|
||||||
|
foreach($this->restoreDirectories as $dir) {
|
||||||
|
rmdir($dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->restoreDirectories = array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -25,12 +25,13 @@ Feature: Edit site wide settings
|
|||||||
And I should see "Site is under construction"
|
And I should see "Site is under construction"
|
||||||
|
|
||||||
Scenario: I can change the theme of the website
|
Scenario: I can change the theme of the website
|
||||||
Given I should see an edit page form
|
Given a theme "behattest"
|
||||||
|
And a template "Page.ss" in theme "behattest" with content "<h1>This is the behat test theme</h1>"
|
||||||
|
When I go to "/admin/settings"
|
||||||
|
Then I should see an edit page form
|
||||||
And I should see "Theme"
|
And I should see "Theme"
|
||||||
|
|
||||||
When I select "tutorial" from "Theme"
|
When I select "behattest" from "Theme"
|
||||||
And I press the "Save" button
|
And I press the "Save" button
|
||||||
And I reload the page
|
And I go to "/home?flush=1"
|
||||||
|
Then I should see "This is the behat test theme"
|
||||||
When I go to "/home"
|
|
||||||
Then I should see "Visit www.silverstripe.com to download the CMS"
|
|
Loading…
Reference in New Issue
Block a user