diff --git a/core/lib/Thelia/Constraint/Rule/AvailableForXArticles.php b/core/lib/Thelia/Constraint/Rule/AvailableForXArticles.php index 1a8e17da2..9de10b2bb 100644 --- a/core/lib/Thelia/Constraint/Rule/AvailableForXArticles.php +++ b/core/lib/Thelia/Constraint/Rule/AvailableForXArticles.php @@ -41,7 +41,7 @@ use Thelia\Exception\InvalidRuleValueException; */ class AvailableForXArticles extends CouponRuleAbstract { - /** Rule 1st parameter : price */ + /** Rule 1st parameter : quantity */ CONST PARAM1_QUANTITY = 'quantity'; /** @var array Available Operators (Operators::CONST) */ @@ -121,7 +121,7 @@ class AvailableForXArticles extends CouponRuleAbstract protected function setParametersToValidate() { $this->paramsToValidate = array( - self::PARAM1_QUANTITY => $this->adapter->getCartTotalPrice() + self::PARAM1_QUANTITY => $this->adapter->getNbArticlesInCart() ); return $this; @@ -130,11 +130,21 @@ class AvailableForXArticles extends CouponRuleAbstract /** * Check if Checkout inputs are relevant or not * + * @throws \Thelia\Exception\InvalidRuleValueException * @return bool */ public function checkCheckoutInput() { - // TODO: Implement checkCheckoutInput() method. + if (!isset($this->paramsToValidate) + || empty($this->paramsToValidate) + ||!isset($this->paramsToValidate[self::PARAM1_QUANTITY]) + ) { + throw new InvalidRuleValueException(get_class(), self::PARAM1_QUANTITY); + } + + $price = $this->paramsToValidate[self::PARAM1_QUANTITY]; + + return $this->isQuantityValid($price); } /** diff --git a/core/lib/Thelia/Constraint/Rule/CouponRuleAbstract.php b/core/lib/Thelia/Constraint/Rule/CouponRuleAbstract.php index d7a966a13..ff97ee3a0 100644 --- a/core/lib/Thelia/Constraint/Rule/CouponRuleAbstract.php +++ b/core/lib/Thelia/Constraint/Rule/CouponRuleAbstract.php @@ -100,6 +100,12 @@ abstract class CouponRuleAbstract implements CouponRuleInterface if (!$validator instanceof RuleValidator) { throw new InvalidRuleException(get_class()); } + if (!in_array($validator->getOperator(), $this->availableOperators)) { + throw new InvalidRuleOperatorException( + get_class(), + $validator->getOperator() + ); + } } $this->validators = $validators; diff --git a/core/lib/Thelia/Constraint/Validator/QuantityParam.php b/core/lib/Thelia/Constraint/Validator/QuantityParam.php index 5d5132e5b..ac6fcf851 100644 --- a/core/lib/Thelia/Constraint/Validator/QuantityParam.php +++ b/core/lib/Thelia/Constraint/Validator/QuantityParam.php @@ -47,9 +47,6 @@ class QuantityParam extends IntegerParam */ public function __construct(CouponAdapterInterface $adapter, $integer) { - if ($integer < 0) { - $integer = 0; - } $this->integer = $integer; $this->adapter = $adapter; } diff --git a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForTotalAmountTest.php b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForTotalAmountTest.php index 303970e90..f13e59238 100644 --- a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForTotalAmountTest.php +++ b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForTotalAmountTest.php @@ -43,6 +43,8 @@ use Thelia\Exception\InvalidRuleValueException; */ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase { + /** @var CouponAdapterInterface $stubTheliaAdapter */ + protected $stubTheliaAdapter = null; /** * Sets up the fixture, for example, opens a network connection. @@ -51,30 +53,33 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase protected function setUp() { /** @var CouponAdapterInterface $stubTheliaAdapter */ - $stubTheliaAdapter = $this->generateValidCouponBaseAdapterMock(); + $this->stubTheliaAdapter = $this->generateValidCouponBaseAdapterMock(); } /** * Generate valid CouponBaseAdapter * + * @param float $cartTotalPrice Total amount of the current Cart + * * @return CouponAdapterInterface */ - protected function generateValidCouponBaseAdapterMock() + protected function generateValidCouponBaseAdapterMock($cartTotalPrice = 421.23) { /** @var CouponAdapterInterface $stubTheliaAdapter */ - $stubTheliaAdapter = $this->getMock( - 'CouponBaseAdapter', - array('getCartTotalPrice'), - array() - ); + $stubTheliaAdapter = $this->getMock( + 'Thelia\Coupon\CouponBaseAdapter', + array('getCartTotalPrice'), + array() + ); $stubTheliaAdapter->expects($this->any()) ->method('getCartTotalPrice') - ->will($this->returnValue(421.23)); + ->will($this->returnValue($cartTotalPrice)); return $stubTheliaAdapter; } /** + * Check if validity test on BackOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::checkBackOfficeInput * @@ -91,10 +96,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => $adapter->getCartTotalPrice() - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = true; $actual = $rule->checkBackOfficeInput(); @@ -102,6 +104,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if validity test on BackOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::checkBackOfficeInput * @expectedException \Thelia\Exception\InvalidRuleOperatorException @@ -120,10 +123,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => $adapter->getCartTotalPrice() - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = false; $actual = $rule->checkBackOfficeInput(); @@ -131,6 +131,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if validity test on BackOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::checkBackOfficeInput * @expectedException \ErrorException @@ -138,7 +139,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase */ public function testInValidBackOfficeInputValue() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->generateValidCouponBaseAdapterMock(); $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -147,10 +148,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => $adapter->getCartTotalPrice() - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = false; $actual = $rule->checkBackOfficeInput(); @@ -160,13 +158,14 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase /** + * Check if validity test on FrontOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::checkCheckoutInput * */ public function testValidCheckoutInput() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->stubTheliaAdapter; $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -177,10 +176,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => $adapter->getCartTotalPrice() - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = true; $actual = $rule->checkCheckoutInput(); @@ -188,6 +184,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if validity test on FrontOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::checkCheckoutInput * @expectedException \Thelia\Exception\InvalidRuleValueException @@ -195,7 +192,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase */ public function testInValidCheckoutInputValue() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->generateValidCouponBaseAdapterMock(421); $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -206,10 +203,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => 421 - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = false; $actual = $rule->checkCheckoutInput(); @@ -217,6 +211,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if validity test on FrontOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::checkCheckoutInput * @expectedException \Thelia\Exception\InvalidRuleValueException @@ -224,7 +219,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase */ public function testInValidCheckoutInputType() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->generateValidCouponBaseAdapterMock(421); $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -235,10 +230,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => 421 - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = false; $actual = $rule->checkCheckoutInput(); @@ -246,13 +238,14 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if test inferior operator is working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::isMatching * */ public function testMatchingRuleInferior() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->generateValidCouponBaseAdapterMock(421.22); $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -263,10 +256,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => 421.22 - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = true; $actual = $rule->isMatching(); @@ -274,13 +264,14 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if test inferior operator is working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::isMatching * */ public function testNotMatchingRuleInferior() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->generateValidCouponBaseAdapterMock(421.23); $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -291,10 +282,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => 421.23 - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = false; $actual = $rule->isMatching(); @@ -302,13 +290,14 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if test equals operator is working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::isMatching * */ public function testMatchingRuleEqual() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->stubTheliaAdapter; $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -319,10 +308,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => $adapter->getCartTotalPrice() - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = true; $actual = $rule->isMatching(); @@ -330,13 +316,14 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if test equals operator is working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::isMatching * */ public function testNotMatchingRuleEqual() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->generateValidCouponBaseAdapterMock(421.22); $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -347,10 +334,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => 421.22 - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = false; $actual = $rule->isMatching(); @@ -358,13 +342,14 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if test superior operator is working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::isMatching * */ public function testMatchingRuleSuperior() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->generateValidCouponBaseAdapterMock(421.24); $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -375,10 +360,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => 421.24 - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = true; $actual = $rule->isMatching(); @@ -386,13 +368,14 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase } /** + * Check if test superior operator is working * * @covers Thelia\Coupon\Rule\AvailableForTotalAmount::isMatching * */ public function testNotMatchingRuleSuperior() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->generateValidCouponBaseAdapterMock(421.23); $validators = array( AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( @@ -403,10 +386,7 @@ class AvailableForTotalAmountTest extends \PHPUnit_Framework_TestCase ) ); - $validated = array( - AvailableForTotalAmount::PARAM1_PRICE => 421.23 - ); - $rule = new AvailableForTotalAmount($adapter, $validators, $validated); + $rule = new AvailableForTotalAmount($adapter, $validators); $expected = false; $actual = $rule->isMatching(); diff --git a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php index 9c5808010..6b024ed9e 100644 --- a/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php +++ b/core/lib/Thelia/Tests/Constraint/Rule/AvailableForXArticlesTest.php @@ -24,6 +24,10 @@ namespace Thelia\Coupon; use Thelia\Constraint\Rule\AvailableForXArticles; +use Thelia\Constraint\Rule\Operators; +use Thelia\Constraint\Validator\QuantityParam; +use Thelia\Constraint\Validator\RuleValidator; +use Thelia\Exception\InvalidRuleOperatorException; /** * Created by JetBrains PhpStorm. @@ -39,6 +43,9 @@ use Thelia\Constraint\Rule\AvailableForXArticles; class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase { + /** @var CouponAdapterInterface $stubTheliaAdapter */ + protected $stubTheliaAdapter = null; + /** * Sets up the fixture, for example, opens a network connection. * This method is called before a test is executed. @@ -46,41 +53,51 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase protected function setUp() { /** @var CouponAdapterInterface $stubTheliaAdapter */ - $stubTheliaAdapter = $this->generateValidCouponBaseAdapterMock(); + $this->stubTheliaAdapter = $this->generateValidCouponBaseAdapterMock(); } /** - * Return an Adapter Mock wick 4 products int the Cart + * Generate valid CouponBaseAdapter + * + * @param int $nbArticlesInCart Total articles in the current Cart * * @return CouponAdapterInterface */ - protected function generateValidCouponBaseAdapterMock() + protected function generateValidCouponBaseAdapterMock($nbArticlesInCart = 4) { /** @var CouponAdapterInterface $stubTheliaAdapter */ $stubTheliaAdapter = $this->getMock( - 'CouponBaseAdapter', + 'Thelia\Coupon\CouponBaseAdapter', array('getNbArticlesInCart'), array() ); $stubTheliaAdapter->expects($this->any()) ->method('getNbArticlesInCart') - ->will($this->returnValue(4)); + ->will($this->returnValue($nbArticlesInCart)); return $stubTheliaAdapter; } /** + * Check if validity test on BackOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForXArticles::checkBackOfficeInput * */ public function testValidBackOfficeInput() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->stubTheliaAdapter; - $validators = array(4); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + 4 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = true; $actual = $rule->checkBackOfficeInput(); @@ -88,33 +105,77 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase } /** + * Check if validity test on BackOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForXArticles::checkBackOfficeInput - * + * @expectedException \Thelia\Exception\InvalidRuleValueException */ - public function testInValidBackOfficeInput() + public function testInValidBackOfficeInputFloat() { - $adapter = new CouponBaseAdapter(); + $adapter = $this->stubTheliaAdapter; - $validators = array(4.5); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + 4.5 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = false; $actual = $rule->checkBackOfficeInput(); $this->assertEquals($expected, $actual); + } - $validators = array(-1); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + /** + * Check if validity test on BackOffice inputs are working + * + * @covers Thelia\Coupon\Rule\AvailableForXArticles::checkBackOfficeInput + * @expectedException \Thelia\Exception\InvalidRuleValueException + */ + public function testInValidBackOfficeInputNegative() + { + $adapter = $this->stubTheliaAdapter; + + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + -1 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = false; $actual = $rule->checkBackOfficeInput(); $this->assertEquals($expected, $actual); + } - $validators = array('bad'); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + /** + * Check if validity test on BackOffice inputs are working + * + * @covers Thelia\Coupon\Rule\AvailableForXArticles::checkBackOfficeInput + * @expectedException \Thelia\Exception\InvalidRuleValueException + */ + public function testInValidBackOfficeInputString() + { + $adapter = $this->stubTheliaAdapter; + + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + 'bad' + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = false; $actual = $rule->checkBackOfficeInput(); @@ -123,17 +184,26 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase + + /** + * Check if validity test on FrontOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForXArticles::checkCheckoutInput - * */ public function testValidCheckoutInput() { - $adapter = new CouponBaseAdapter(); - $validators = array(4); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + $adapter = $this->stubTheliaAdapter; + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + 4 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = true; $actual = $rule->checkCheckoutInput(); @@ -141,32 +211,24 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase } /** + * Check if validity test on FrontOffice inputs are working * * @covers Thelia\Coupon\Rule\AvailableForXArticles::checkCheckoutInput - * + * @expectedException \Thelia\Exception\InvalidRuleValueException */ - public function testInValidCheckoutInput() + public function testInValidCheckoutInputFloat() { - $adapter = new CouponBaseAdapter(); - $validators = array(4.5); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); - - $expected = false; - $actual = $rule->checkCheckoutInput(); - $this->assertEquals($expected, $actual); - - $validators = array(-1); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); - - $expected = false; - $actual = $rule->checkCheckoutInput(); - $this->assertEquals($expected, $actual); - - $validators = array('bad'); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + $adapter = $this->generateValidCouponBaseAdapterMock(4.5); + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + 4 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = false; $actual = $rule->checkCheckoutInput(); @@ -174,16 +236,101 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase } /** + * Check if validity test on FrontOffice inputs are working + * + * @covers Thelia\Coupon\Rule\AvailableForXArticles::checkCheckoutInput + * @expectedException \Thelia\Exception\InvalidRuleValueException + */ + public function testInValidCheckoutInputNegative() + { + $adapter = $this->generateValidCouponBaseAdapterMock(-1); + + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + 4 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); + + $expected = false; + $actual = $rule->checkCheckoutInput(); + $this->assertEquals($expected, $actual); + } + + /** + * Check if validity test on FrontOffice inputs are working + * + * @covers Thelia\Coupon\Rule\AvailableForXArticles::checkCheckoutInput + * @expectedException \Thelia\Exception\InvalidRuleValueException + */ + public function testInValidCheckoutInputString() + { + $adapter = $this->generateValidCouponBaseAdapterMock('bad'); + + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + 4 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); + + $expected = false; + $actual = $rule->checkCheckoutInput(); + $this->assertEquals($expected, $actual); + } + + /** + * Check if test inferior operator is working + * + * @covers Thelia\Coupon\Rule\AvailableForXArticles::isMatching + * + */ + public function testMatchingRuleInferior() + { + $adapter = $this->stubTheliaAdapter; + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::INFERIOR, + new QuantityParam( + $adapter, + 5 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); + + $expected = true; + $actual = $rule->isMatching(); + $this->assertEquals($expected, $actual); + } + + /** + * Check if test equals operator is working * * @covers Thelia\Coupon\Rule\AvailableForXArticles::isMatching * */ public function testMatchingRuleEqual() { - $adapter = new CouponBaseAdapter(); - $validators = array(4); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + $adapter = $this->stubTheliaAdapter; + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::EQUAL, + new QuantityParam( + $adapter, + 4 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = true; $actual = $rule->isMatching(); @@ -191,16 +338,24 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase } /** + * Check if test superior operator is working * * @covers Thelia\Coupon\Rule\AvailableForXArticles::isMatching * */ public function testMatchingRuleSuperior() { - $adapter = new CouponBaseAdapter(); - $validators = array(5); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + $adapter = $this->stubTheliaAdapter; + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::SUPERIOR, + new QuantityParam( + $adapter, + 3 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = true; $actual = $rule->isMatching(); @@ -208,16 +363,25 @@ class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase } /** + * Check if test unavailable operator is working * * @covers Thelia\Coupon\Rule\AvailableForXArticles::isMatching + * @expectedException \Thelia\Exception\InvalidRuleOperatorException * */ public function testNotMatchingRule() { - $adapter = new CouponBaseAdapter(); - $validators = array(3); - $validated = array($adapter->getNbArticlesInCart()); - $rule = new AvailableForXArticles($adapter, $validators, $validated); + $adapter = $this->stubTheliaAdapter; + $validators = array( + AvailableForXArticles::PARAM1_QUANTITY => new RuleValidator( + Operators::DIFFERENT, + new QuantityParam( + $adapter, + 3 + ) + ) + ); + $rule = new AvailableForXArticles($adapter, $validators); $expected = false; $actual = $rule->isMatching();