diff --git a/core/lib/Thelia/Constraint/Rule/AvailableForTotalAmountManager.php b/core/lib/Thelia/Constraint/Rule/AvailableForTotalAmountManager.php index 98663fd4a..3fe051a20 100644 --- a/core/lib/Thelia/Constraint/Rule/AvailableForTotalAmountManager.php +++ b/core/lib/Thelia/Constraint/Rule/AvailableForTotalAmountManager.php @@ -74,36 +74,36 @@ class AvailableForTotalAmountManager extends CouponRuleAbstract // /** @var RuleValidator Price Validator */ // protected $priceValidator = null; - /** - * Check if backoffice inputs are relevant or not - * - * @throws InvalidRuleOperatorException if Operator is not allowed - * @throws InvalidRuleValueException if Value is not allowed - * @return bool - */ - public function checkBackOfficeInput() - { - if (!isset($this->validators) - || empty($this->validators) - ||!isset($this->validators[self::PARAM1_PRICE]) - ||!isset($this->validators[self::PARAM1_PRICE]) - ) { - throw new InvalidRuleValueException(get_class(), self::PARAM1_PRICE); - } - - /** @var RuleValidator $ruleValidator */ - $ruleValidator = $this->validators[self::PARAM1_PRICE]; - /** @var PriceParam $price */ - $price = $ruleValidator->getParam(); - - if (!$price instanceof PriceParam) { - throw new InvalidRuleValueException(get_class(), self::PARAM1_PRICE); - } - - $this->checkBackOfficeInputsOperators(); - - return $this->isPriceValid($price->getPrice(), $price->getCurrency()); - } +// /** +// * Check if backoffice inputs are relevant or not +// * +// * @throws InvalidRuleOperatorException if Operator is not allowed +// * @throws InvalidRuleValueException if Value is not allowed +// * @return bool +// */ +// public function checkBackOfficeInput() +// { +// if (!isset($this->validators) +// || empty($this->validators) +// ||!isset($this->validators[self::PARAM1_PRICE]) +// ||!isset($this->validators[self::PARAM1_PRICE]) +// ) { +// throw new InvalidRuleValueException(get_class(), self::PARAM1_PRICE); +// } +// +// /** @var RuleValidator $ruleValidator */ +// $ruleValidator = $this->validators[self::PARAM1_PRICE]; +// /** @var PriceParam $price */ +// $price = $ruleValidator->getParam(); +// +// if (!$price instanceof PriceParam) { +// throw new InvalidRuleValueException(get_class(), self::PARAM1_PRICE); +// } +// +// $this->checkBackOfficeInputsOperators(); +// +// return $this->isPriceValid($price->getPrice(), $price->getCurrency()); +// } // /** // * Check if Checkout inputs are relevant or not @@ -247,33 +247,33 @@ class AvailableForTotalAmountManager extends CouponRuleAbstract return false; } - /** - * Check if a price is valid - * - * @param float $price Price to check - * @param string $currency Price currency - * - * @throws InvalidRuleValueException if Value is not allowed - * @return bool - */ - protected function isPriceValid($price, $currency) - { - $priceValidator = $this->priceValidator; - - /** @var PriceParam $param */ - $param = $priceValidator->getParam(); - if ($currency == $param->getCurrency()) { - try { - $priceValidator->getParam()->compareTo($price); - } catch(\InvalidArgumentException $e) { - throw new InvalidRuleValueException(get_class(), self::PARAM1_PRICE); - } - } else { - throw new InvalidRuleValueException(get_class(), self::PARAM1_CURRENCY); - } - - return true; - } +// /** +// * Check if a price is valid +// * +// * @param float $price Price to check +// * @param string $currency Price currency +// * +// * @throws InvalidRuleValueException if Value is not allowed +// * @return bool +// */ +// protected function isPriceValid($price, $currency) +// { +// $priceValidator = $this->priceValidator; +// +// /** @var PriceParam $param */ +// $param = $priceValidator->getParam(); +// if ($currency == $param->getCurrency()) { +// try { +// $priceValidator->getParam()->compareTo($price); +// } catch(\InvalidArgumentException $e) { +// throw new InvalidRuleValueException(get_class(), self::PARAM1_PRICE); +// } +// } else { +// throw new InvalidRuleValueException(get_class(), self::PARAM1_CURRENCY); +// } +// +// return true; +// } // /** // * Generate current Rule param to be validated from adapter @@ -312,15 +312,15 @@ class AvailableForTotalAmountManager extends CouponRuleAbstract public function getToolTip() { $i18nOperator = Operators::getI18n( - $this->translator, $this->priceValidator->getOperator() + $this->translator, $this->operators[self::INPUT1] ); $toolTip = $this->translator->trans( 'If cart total amount is %operator% %amount% %currency%', array( '%operator%' => $i18nOperator, - '%amount%' => $this->priceValidator->getParam()->getPrice(), - '%currency%' => $this->priceValidator->getParam()->getCurrency() + '%amount%' => $this->values[self::INPUT1], + '%currency%' => $this->values[self::INPUT2] ), 'constraint' ); @@ -361,21 +361,7 @@ class AvailableForTotalAmountManager extends CouponRuleAbstract // return $this; // } - /** - * Return a serializable Rule - * - * @return SerializableRule - */ - public function getSerializableRule() - { - $serializableRule = new SerializableRule(); - $serializableRule->ruleServiceId = $this->serviceId; - $serializableRule->operators = $this->operators; - $serializableRule->values = $this->values; - - return $serializableRule; - } diff --git a/core/lib/Thelia/Constraint/Rule/AvailableForXArticlesManager.php b/core/lib/Thelia/Constraint/Rule/AvailableForXArticlesManager.php index f56596bc2..d726447eb 100644 --- a/core/lib/Thelia/Constraint/Rule/AvailableForXArticlesManager.php +++ b/core/lib/Thelia/Constraint/Rule/AvailableForXArticlesManager.php @@ -63,56 +63,56 @@ class AvailableForXArticlesManager extends CouponRuleAbstract ) ); - /** @var QuantityParam Quantity Validator */ - protected $quantityValidator = null; +// /** @var QuantityParam Quantity Validator */ +// protected $quantityValidator = null; - /** - * Check if backoffice inputs are relevant or not - * - * @throws InvalidRuleOperatorException if Operator is not allowed - * @throws InvalidRuleValueException if Value is not allowed - * @return bool - */ - public function checkBackOfficeInput() - { - if (!isset($this->validators) - || empty($this->validators) - ||!isset($this->validators[self::PARAM1_QUANTITY]) - ||!isset($this->validators[self::PARAM1_QUANTITY]) - ) { - throw new InvalidRuleValueException(get_class(), self::PARAM1_QUANTITY); - } +// /** +// * Check if backoffice inputs are relevant or not +// * +// * @throws InvalidRuleOperatorException if Operator is not allowed +// * @throws InvalidRuleValueException if Value is not allowed +// * @return bool +// */ +// public function checkBackOfficeInput() +// { +// if (!isset($this->validators) +// || empty($this->validators) +// ||!isset($this->validators[self::PARAM1_QUANTITY]) +// ||!isset($this->validators[self::PARAM1_QUANTITY]) +// ) { +// throw new InvalidRuleValueException(get_class(), self::PARAM1_QUANTITY); +// } +// +// /** @var RuleValidator $ruleValidator */ +// $ruleValidator = $this->validators[self::PARAM1_QUANTITY]; +// /** @var QuantityParam $quantity */ +// $quantity = $ruleValidator->getParam(); +// +// if (!$quantity instanceof QuantityParam) { +// throw new InvalidRuleValueException(get_class(), self::PARAM1_QUANTITY); +// } +// +// $this->checkBackOfficeInputsOperators(); +// +// return $this->isQuantityValid($quantity->getInteger()); +// } - /** @var RuleValidator $ruleValidator */ - $ruleValidator = $this->validators[self::PARAM1_QUANTITY]; - /** @var QuantityParam $quantity */ - $quantity = $ruleValidator->getParam(); - - if (!$quantity instanceof QuantityParam) { - throw new InvalidRuleValueException(get_class(), self::PARAM1_QUANTITY); - } - - $this->checkBackOfficeInputsOperators(); - - return $this->isQuantityValid($quantity->getInteger()); - } - - /** - * Generate current Rule param to be validated from adapter - * - * @param CouponAdapterInterface $adapter allowing to gather - * all necessary Thelia variables - * - * @return $this - */ - protected function setParametersToValidate() - { - $this->paramsToValidate = array( - self::PARAM1_QUANTITY => $this->adapter->getNbArticlesInCart() - ); - - return $this; - } +// /** +// * Generate current Rule param to be validated from adapter +// * +// * @param CouponAdapterInterface $adapter allowing to gather +// * all necessary Thelia variables +// * +// * @return $this +// */ +// protected function setParametersToValidate() +// { +// $this->paramsToValidate = array( +// self::PARAM1_QUANTITY => $this->adapter->getNbArticlesInCart() +// ); +// +// return $this; +// } // /** // * Check if Checkout inputs are relevant or not @@ -210,25 +210,25 @@ class AvailableForXArticlesManager extends CouponRuleAbstract return false; } - /** - * Check if a quantity is valid - * - * @param int $quantity Quantity to check - * - * @throws InvalidRuleValueException if Value is not allowed - * @return bool - */ - protected function isQuantityValid($quantity) - { - $quantityValidator = $this->quantityValidator; - try { - $quantityValidator->getParam()->compareTo($quantity); - } catch(InvalidArgumentException $e) { - throw new InvalidRuleValueException(get_class(), self::PARAM1_QUANTITY); - } - - return true; - } +// /** +// * Check if a quantity is valid +// * +// * @param int $quantity Quantity to check +// * +// * @throws InvalidRuleValueException if Value is not allowed +// * @return bool +// */ +// protected function isQuantityValid($quantity) +// { +// $quantityValidator = $this->quantityValidator; +// try { +// $quantityValidator->getParam()->compareTo($quantity); +// } catch(InvalidArgumentException $e) { +// throw new InvalidRuleValueException(get_class(), self::PARAM1_QUANTITY); +// } +// +// return true; +// } /** * Get I18n name @@ -252,14 +252,14 @@ class AvailableForXArticlesManager extends CouponRuleAbstract public function getToolTip() { $i18nOperator = Operators::getI18n( - $this->translator, $this->priceValidator->getOperator() + $this->translator, $this->operators[self::INPUT1] ); $toolTip = $this->translator->trans( 'If cart products quantity is %operator% %quantity%', array( '%operator%' => $i18nOperator, - '%quantity%' => $this->quantityValidator->getParam()->getInteger(), + '%quantity%' => $this->values[self::INPUT1] ), 'constraint' ); @@ -297,24 +297,4 @@ class AvailableForXArticlesManager extends CouponRuleAbstract // return $this; // } - /** - * Return a serializable Rule - * - * @return SerializableRule - */ - public function getSerializableRule() - { - $serializableRule = new SerializableRule(); - $serializableRule->ruleServiceId = $this->serviceId; - $serializableRule->operators = array( - self::PARAM1_QUANTITY => $this->quantityValidator->getOperator() - ); - - $serializableRule->values = array( - self::PARAM1_QUANTITY => $this->quantityValidator->getInteger() - ); - - return $serializableRule; - } - } \ No newline at end of file diff --git a/core/lib/Thelia/Constraint/Rule/CouponRuleAbstract.php b/core/lib/Thelia/Constraint/Rule/CouponRuleAbstract.php index 1c781d97f..7465633bf 100644 --- a/core/lib/Thelia/Constraint/Rule/CouponRuleAbstract.php +++ b/core/lib/Thelia/Constraint/Rule/CouponRuleAbstract.php @@ -44,10 +44,10 @@ use Thelia\Exception\InvalidRuleOperatorException; */ abstract class CouponRuleAbstract implements CouponRuleInterface { - /** Operator key in $validators */ - CONST OPERATOR = 'operator'; - /** Value key in $validators */ - CONST VALUE = 'value'; +// /** Operator key in $validators */ +// CONST OPERATOR = 'operator'; +// /** Value key in $validators */ +// CONST VALUE = 'value'; /** @var string Service Id from Resources/config.xml */ protected $serviceId = null; @@ -58,8 +58,8 @@ abstract class CouponRuleAbstract implements CouponRuleInterface /** @var array Parameters validating parameters against */ protected $validators = array(); - /** @var array Parameters to be validated */ - protected $paramsToValidate = array(); +// /** @var array Parameters to be validated */ +// protected $paramsToValidate = array(); /** @var CouponAdapterInterface Provide necessary value from Thelia */ protected $adapter = null; @@ -150,25 +150,25 @@ abstract class CouponRuleAbstract implements CouponRuleInterface return $this->availableOperators; } - /** - * Check if Operators set for this Rule in the BackOffice are legit - * - * @throws InvalidRuleOperatorException if Operator is not allowed - * @return bool - */ - protected function checkBackOfficeInputsOperators() - { - /** @var RuleValidator $param */ - foreach ($this->validators as $key => $param) { - $operator = $param->getOperator(); - if (!isset($operator) - ||!in_array($operator, $this->availableOperators) - ) { - throw new InvalidRuleOperatorException(get_class(), $key); - } - } - return true; - } +// /** +// * Check if Operators set for this Rule in the BackOffice are legit +// * +// * @throws InvalidRuleOperatorException if Operator is not allowed +// * @return bool +// */ +// protected function checkBackOfficeInputsOperators() +// { +// /** @var RuleValidator $param */ +// foreach ($this->validators as $key => $param) { +// $operator = $param->getOperator(); +// if (!isset($operator) +// ||!in_array($operator, $this->availableOperators) +// ) { +// throw new InvalidRuleOperatorException(get_class(), $key); +// } +// } +// return true; +// } // /** // * Generate current Rule param to be validated from adapter @@ -183,13 +183,15 @@ abstract class CouponRuleAbstract implements CouponRuleInterface /** * Return all validators - * Serialization purpose * * @return array */ public function getValidators() { - return $this->validators; + return array( + $this->operators, + $this->values + ); } /** @@ -215,4 +217,20 @@ abstract class CouponRuleAbstract implements CouponRuleInterface return in_array($operator, $availableOperators); } + /** + * Return a serializable Rule + * + * @return SerializableRule + */ + public function getSerializableRule() + { + $serializableRule = new SerializableRule(); + $serializableRule->ruleServiceId = $this->serviceId; + $serializableRule->operators = $this->operators; + + $serializableRule->values = $this->values; + + return $serializableRule; + } + } \ No newline at end of file diff --git a/core/lib/Thelia/Constraint/Rule/CouponRuleInterface.php b/core/lib/Thelia/Constraint/Rule/CouponRuleInterface.php index 4c5575159..79a48aff9 100644 --- a/core/lib/Thelia/Constraint/Rule/CouponRuleInterface.php +++ b/core/lib/Thelia/Constraint/Rule/CouponRuleInterface.php @@ -53,12 +53,12 @@ interface CouponRuleInterface */ public function getServiceId(); - /** - * Check if backoffice inputs are relevant or not - * - * @return bool - */ - public function checkBackOfficeInput(); +// /** +// * Check if backoffice inputs are relevant or not +// * +// * @return bool +// */ +// public function checkBackOfficeInput(); // /** // * Check if Checkout inputs are relevant or not @@ -115,7 +115,7 @@ interface CouponRuleInterface public function getToolTip(); /** - * Get validators + * Return all validators * * @return array */ diff --git a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php index d7b7523aa..3247e4b9a 100644 --- a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php +++ b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php @@ -25,6 +25,7 @@ namespace Thelia\Coupon; use Thelia\Constraint\Rule\AvailableForXArticlesManager; use Thelia\Constraint\Rule\Operators; +use Thelia\Constraint\Rule\SerializableRule; /** * Created by JetBrains PhpStorm. @@ -565,6 +566,101 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expected, $actual); } + public function testGetSerializableRule() + { + $stubAdapter = $this->getMockBuilder('\Thelia\Coupon\CouponBaseAdapter') + ->disableOriginalConstructor() + ->getMock(); + + $stubAdapter->expects($this->any()) + ->method('getNbArticlesInCart') + ->will($this->returnValue(4)); + + $rule1 = new AvailableForXArticlesManager($stubAdapter); + $operators = array( + AvailableForXArticlesManager::INPUT1 => Operators::SUPERIOR + ); + $values = array( + AvailableForXArticlesManager::INPUT1 => 4 + ); + $rule1->setValidatorsFromForm($operators, $values); + + $serializableRule = $rule1->getSerializableRule(); + + $expected = new SerializableRule(); + $expected->ruleServiceId = $rule1->getServiceId(); + $expected->operators = $operators; + $expected->values = $values; + + $actual = $serializableRule; + + $this->assertEquals($expected, $actual); + + } + + public function testGetAvailableOperators() + { + $stubAdapter = $this->getMockBuilder('\Thelia\Coupon\CouponBaseAdapter') + ->disableOriginalConstructor() + ->getMock(); + + $stubAdapter->expects($this->any()) + ->method('getNbArticlesInCart') + ->will($this->returnValue(4)); + + $rule1 = new AvailableForXArticlesManager($stubAdapter); + $operators = array( + AvailableForXArticlesManager::INPUT1 => Operators::SUPERIOR + ); + $values = array( + AvailableForXArticlesManager::INPUT1 => 4 + ); + $rule1->setValidatorsFromForm($operators, $values); + + $expected = array( + AvailableForXArticlesManager::INPUT1 => array( + Operators::INFERIOR, + Operators::INFERIOR_OR_EQUAL, + Operators::EQUAL, + Operators::SUPERIOR_OR_EQUAL, + Operators::SUPERIOR + ) + ); + $actual = $rule1->getAvailableOperators(); + + $this->assertEquals($expected, $actual); + + } + + public function testGetValidators() + { + $stubAdapter = $this->getMockBuilder('\Thelia\Coupon\CouponBaseAdapter') + ->disableOriginalConstructor() + ->getMock(); + + $stubAdapter->expects($this->any()) + ->method('getNbArticlesInCart') + ->will($this->returnValue(4)); + + $rule1 = new AvailableForXArticlesManager($stubAdapter); + $operators = array( + AvailableForXArticlesManager::INPUT1 => Operators::SUPERIOR + ); + $values = array( + AvailableForXArticlesManager::INPUT1 => 4 + ); + $rule1->setValidatorsFromForm($operators, $values); + + $expected = array( + $operators, + $values + ); + $actual = $rule1->getValidators(); + + $this->assertEquals($expected, $actual); + + } + /** * Tears down the fixture, for example, closes a network connection.