We will work on Apr 26th (Saturday) and will be off from Apr 30th (Wednesday) until May 2nd (Friday) for public holiday in our country

Commit 5bc5b2a8 authored by Ivan Chepurnyi's avatar Ivan Chepurnyi

+ Completed task #28 Add XML merging functionality

! Some fixes related to store configuration cache, if the same configuration changed in the test suite by different test cases
parent 03169b5b
......@@ -63,9 +63,18 @@ class EcomDev_PHPUnit_Model_Fixture extends Mage_Core_Model_Abstract
* Associative array of configuration values that was changed by fixture,
* it is used to preserve
*
* @var array
*/
protected $_originalConfiguration = array();
/**
* Associative array of configuration nodes xml that was changed by fixture,
* it is used to preserve
*
* @var array
*/
protected $_originalConfigurationXml = array();
/**
* Model constuctor, just defines wich resource model to use
* (non-PHPdoc)
......@@ -144,8 +153,79 @@ class EcomDev_PHPUnit_Model_Fixture extends Mage_Core_Model_Abstract
throw new InvalidArgumentException('Configuration part should be an associative list');
}
foreach ($configuration as $path => $value) {
$this->_originalConfiguration[$path] = Mage::getConfig()->getNode($path);
Mage::getConfig()->setNode($path, $value);
$this->_originalConfiguration[$path] = (string) Mage::getConfig()->getNode($path);
$this->_setConfigNodeValue($path, $value);
}
return $this;
}
/**
* Setting config value with applying the values to stores and websites
*
* @param string $path
* @param string $value
* @return EcomDev_PHPUnit_Model_Fixture
*/
protected function _setConfigNodeValue($path, $value)
{
$pathArray = explode('/', $path);
$scope = array_shift($pathArray);
switch ($scope) {
case 'stores':
$storeCode = array_shift($pathArray);
Mage::app()->getStore($storeCode)->setConfig(
implode('/', $pathArray), $value
);
break;
case 'websites':
$websiteCode = array_shift($pathArray);
Mage::app()->getWebsite($websiteCode)->setConfig(
implode('/', $pathArray), $value
);
break;
default:
Mage::getConfig()->setNode($path, $value);
break;
}
return $this;
}
/**
* Applies raw xml data to config node
*
* @param array $configuration
* @return EcomDev_PHPUnit_Model_Fixture
*/
protected function _applyConfigXml($configuration)
{
if (!is_array($configuration)) {
throw new InvalidArgumentException('Configuration part should be an associative list');
}
foreach ($configuration as $path => $value) {
if (!is_string($value)) {
throw new InvalidArgumentException('Configuration value should be a valid xml string');
}
try {
$xmlElement = new Varien_Simplexml_Element($value);
} catch (Exception $e) {
throw new InvalidArgumentException('Configuration value should be a valid xml string', 0, $e);
}
$node = Mage::getConfig()->getNode($path);
if (!$node) {
throw new InvalidArgumentException('Configuration value should be a valid xml string');
}
$this->_originalConfigurationXml[$path] = $node->asNiceXml();
$node->extend($xmlElement, true);
}
return $this;
......@@ -159,12 +239,30 @@ class EcomDev_PHPUnit_Model_Fixture extends Mage_Core_Model_Abstract
protected function _discardConfig()
{
foreach ($this->_originalConfiguration as $path => $value) {
Mage::getConfig()->setNode($path, $value);
$this->_setConfigNodeValue($path, $value);
}
$this->_originalConfiguration = array();
return $this;
}
/**
* Reverts fixture configuration xml values in Mage_Core_Model_Config
*
* @return EcomDev_PHPUnit_Model_Fixture
*/
protected function _discardConfigXml()
{
foreach ($this->_originalConfigurationXml as $path => $value) {
$node = Mage::getConfig()->getNode($path);
$parentNode = $node->getParent();
unset($parentNode->{$node->getName()});
$oldXml = new Varien_Simplexml_Element($value);
$parentNode->appendChild($oldXml);
}
$this->_originalConfigurationXml = array();
return $this;
}
/**
* Applies table data into test database
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment