FIX: Fixed testing of theme switching.

The previous theme test relied on the existence of the tutorial theme, which has been removed.
I'ved added a couple of behat rules for scaffolding fake themes, and altered the test to use these.
This commit is contained in:
Sam Minnee 2014-02-13 18:54:44 +13:00
parent 0d34b68061
commit ab4b72d486
3 changed files with 57 additions and 4 deletions

View File

@ -36,6 +36,9 @@ class FeatureContext extends \SilverStripe\Framework\Test\Behaviour\FeatureConte
$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) {

View File

@ -0,0 +1,47 @@
<?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 {
/**
* 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'");
if(!file_exists(BASE_PATH . '/themes/' . $theme)) mkdir(BASE_PATH . '/themes/' . $theme);
if(!file_exists(BASE_PATH . '/themes/' . $theme . '/templates')) mkdir(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'");
file_put_contents(BASE_PATH . '/themes/' . $theme . '/templates/' . $template, $content);
}
}

View File

@ -25,12 +25,15 @@ Feature: Edit site wide settings
And I should see "Site is under construction"
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"
When I select "tutorial" from "Theme"
When I select "behattest" from "Theme"
And I press the "Save" button
And I reload the page
When I go to "/home"
Then I should see "Visit www.silverstripe.com to download the CMS"
When I go to "/home?flush=1"
Then I should see "This is the behat test theme"