WIP Coupon

Implementation Comparable Parameters
This commit is contained in:
gmorel
2013-08-20 19:05:41 +02:00
parent 2113e7a457
commit df08158cff
16 changed files with 1784 additions and 35 deletions

View File

@@ -79,4 +79,11 @@ interface CouponAdapterInterface
*/
public function getCheckoutPostagePrice();
/**
* Return the number of Products in the Cart
*
* @return int
*/
public function getNbArticlesInTheCart();
}

View File

@@ -84,4 +84,25 @@ class CouponBaseAdapter implements CouponAdapterInterface
// TODO: Implement getCheckoutPostagePrice() method.
}
/**
* Return Products total price
*
* @return float
*/
public function getCheckoutTotalPriceWithoutDiscountAndPostagePrice()
{
// TODO: Implement getCheckoutTotalPriceWithoutDiscountAndPostagePrice() method.
}
/**
* Return the number of Products in the Cart
*
* @return int
*/
public function getNbArticlesInTheCart()
{
// TODO: Implement getNbArticlesInTheCart() method.
}
}

View File

@@ -21,18 +21,28 @@
/* */
/*************************************************************************************/
namespace Thelia\Coupon\Rule;
namespace Thelia\Coupon\Parameter;
/**
* Created by JetBrains PhpStorm.
* Date: 8/19/13
* Time: 3:24 PM
*
* @package Coupon
* @author Guillaume MOREL <gmorel@openstudio.fr>
* Comparable interface that allows to compare two value objects to each other for similarity.
*
* @author Benjamin Eberlei <kontakt@beberlei.de>
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
*/
class AvailableForNbArticles extends CouponRuleAbstract
interface Comparable
{
/**
* Compare the current object to the passed $other.
*
* Returns 0 if they are semantically equal, 1 if the other object
* is less than the current one, or -1 if its more than the current one.
*
* This method should not check for identity using ===, only for semantical equality for example
* when two different DateTime instances point to the exact same Date + TZ.
*
* @param mixed $other Object
*
* @return int
*/
public function compareTo($other);
}

View File

@@ -0,0 +1,95 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Coupon\Parameter;
use Thelia\Coupon\Parameter\Comparable;
/**
* Created by JetBrains PhpStorm.
* Date: 8/19/13
* Time: 3:24 PM
*
* Represent a DateTime
*
* @package Coupon
* @author Guillaume MOREL <gmorel@openstudio.fr>
*
*/
class DateParam implements Comparable
{
/** @var \DateTime Date */
protected $dateTime = null;
/**
* Constructor
*
* @param \DateTime $dateTime DateTime
*/
public function __construct(\DateTime $dateTime)
{
$this->dateTime = $dateTime;
}
/**
* Get DateTime
*
* @return \DateTime
*/
public function getDateTime()
{
return clone $this->dateTime;
}
/**
* Compare the current object to the passed $other.
*
* Returns 0 if they are semantically equal, 1 if the other object
* is less than the current one, or -1 if its more than the current one.
*
* This method should not check for identity using ===, only for semantical equality for example
* when two different DateTime instances point to the exact same Date + TZ.
*
* @param mixed $other Object
*
* @return int
*/
public function compareTo($other)
{
if (!$other instanceof \DateTime) {
throw new \InvalidArgumentException('DateParam can compare only DateTime');
}
$ret = -1;
if ($this->dateTime == $other) {
$ret = 0;
} elseif ($this->dateTime > $other) {
$ret = 1;
} else {
$ret = -1;
}
return $ret;
}
}

View File

@@ -0,0 +1,107 @@
<?php
//*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Coupon\Parameter;
/**
* Created by JetBrains PhpStorm.
* Date: 8/19/13
* Time: 3:24 PM
*
* Represent an DateTime period
*
* @package Coupon
* @author Guillaume MOREL <gmorel@openstudio.fr>
*
*/
class IntervalParam implements Comparable
{
/** @var \DatePeriod Date period */
protected $datePeriod = null;
/**
* Constructor
*
* @param \DateTime $start Start interval
* @param \DateInterval $interval Period
*/
public function __construct(\DateTime $start, \DateInterval $interval)
{
$this->datePeriod = new \DatePeriod($start, $interval, 1);
}
/**
* Get DatePeriod
*
* @return \DatePeriod
*/
public function getDatePeriod()
{
return clone $this->datePeriod;
}
/**
* Compare the current object to the passed $other.
*
* Returns 0 if they are semantically equal, 1 if the other object
* is less than the current one, or -1 if its more than the current one.
*
* This method should not check for identity using ===, only for semantical equality for example
* when two different DateTime instances point to the exact same Date + TZ.
*
* @param mixed $other Object
*
* @return int
*/
public function compareTo($other)
{
if (!$other instanceof \DateTime) {
throw new \InvalidArgumentException('IntervalParam can compare only DateTime');
}
/** @var \DateTime Start Date */
$startDate = null;
/** @var \DateTime End Date */
$endDate = null;
foreach ($this->datePeriod as $key => $value) {
if ($key == 0) {
$startDate = $value;
}
if ($key == 1) {
$endDate = $value;
}
}
$ret = -1;
if ($startDate <= $other && $other <= $endDate) {
$ret = 0;
} elseif ($startDate > $other) {
$ret = 1;
} else {
$ret = -1;
}
return $ret;
}
}

View File

@@ -0,0 +1,89 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Coupon\Parameter;
/**
* Created by JetBrains PhpStorm.
* Date: 8/19/13
* Time: 3:24 PM
*
* Represent A repeated Date across the time
* Ex :
* A date repeated every 1 months 5 times
* ---------*---*---*---*---*---*---------------------------> time
* 1 2 3 4 5 6
* 1 : $this->from Start date of the repetition
* *--- : $this->interval Duration of a whole cycle
* x6 : $this->recurrences How many cycle
*
* @package Coupon
* @author Guillaume MOREL <gmorel@openstudio.fr>
*
*/
class RepeatedDateParam extends RepeatedParam
{
/**
* Constructor
*/
public function __construct()
{
$this->defaultConstructor();
}
/**
* Compare the current object to the passed $other.
*
* Returns 0 if they are semantically equal, 1 if the other object
* is less than the current one, or -1 if its more than the current one.
*
* This method should not check for identity using ===, only for semantical equality for example
* when two different DateTime instances point to the exact same Date + TZ.
*
* @param mixed $other Object
*
* @throws \InvalidArgumentException
* @return int
*/
public function compareTo($other)
{
if (!$other instanceof \DateTime) {
throw new \InvalidArgumentException('RepeatedDateParam can compare only DateTime');
}
$ret = -1;
$dates = array();
/** @var $value \DateTime */
foreach ($this->datePeriod as $value) {
$dates[$value->getTimestamp()] = $value;
}
foreach ($dates as $date) {
if ($date == $other) {
return 0;
}
}
return $ret;
}
}

View File

@@ -0,0 +1,122 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Coupon\Parameter;
/**
* Created by JetBrains PhpStorm.
* Date: 8/19/13
* Time: 3:24 PM
*
* Represent A repeated DateInterval across the time
* Ex :
* A duration of 1 month repeated every 2 months 5 times
* ---------****----****----****----****----****----****-----------------> time
* 1 2 3 4 5 6
* 1 : $this->from Start date of the repetition
* ****---- : $this->interval Duration of a whole cycle
* x6 : $this->recurrences How many cycle
* **** : $this->durationInDays Duration of a period
*
* @package Coupon
* @author Guillaume MOREL <gmorel@openstudio.fr>
*
*/
class RepeatedIntervalParam extends RepeatedParam
{
/** @var int duration of the param */
protected $durationInDays = 1;
/**
* Get how many day a Param is lasting
*
* @return int
*/
public function getDurationInDays()
{
return $this->durationInDays;
}
/**
* Set how many day a Param is lasting
*
* @param int $durationInDays How many day a Param is lasting
*
* @return $this
*/
public function setDurationInDays($durationInDays = 1)
{
$this->durationInDays = $durationInDays;
return $this;
}
/**
* Constructor
*/
public function __construct()
{
$this->defaultConstructor();
}
/**
* Compare the current object to the passed $other.
*
* Returns 0 if they are semantically equal, 1 if the other object
* is less than the current one, or -1 if its more than the current one.
*
* This method should not check for identity using ===, only for semantical equality for example
* when two different DateTime instances point to the exact same Date + TZ.
*
* @param mixed $other Object
*
* @return int
*/
public function compareTo($other)
{
if (!$other instanceof \DateTime) {
throw new \InvalidArgumentException('RepeatedIntervalParam can compare only DateTime');
}
$ret = -1;
$dates = array();
/** @var $value \DateTime */
foreach ($this->datePeriod as $value) {
$dates[$value->getTimestamp()]['startDate'] = $value;
$endDate = new \DateTime();
$dates[$value->getTimestamp()]['endDate'] = $endDate->setTimestamp(
$value->getTimestamp() + ($this->durationInDays * 60 *60 *24)
);
}
foreach ($dates as $date) {
if ($date['startDate'] <= $other && $other <= $date['endDate']) {
return 0;
}
}
return $ret;
}
}

View File

@@ -0,0 +1,236 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Coupon\Parameter;
use DateInterval;
use DatePeriod;
use DateTime;
/**
* Created by JetBrains PhpStorm.
* Date: 8/19/13
* Time: 3:24 PM
*
* Allow to set the way a parameter can be repeated across the time
*
* @package Coupon
* @author Guillaume MOREL <gmorel@openstudio.fr>
*
*/
abstract class RepeatedParam implements Comparable
{
/** @var DateTime The start date of the period. */
protected $from = null;
/** @var DateInterval The interval between recurrences within the period. */
protected $interval = null;
/** @var int The number of recurrences. */
protected $recurrences = null;
/** @var DatePeriod dates recurring at regular intervals, over a given period */
protected $datePeriod = null;
/**
* Generate default repetition
* Every 1 week 100 times from now
*
* @return $this
*/
protected function defaultConstructor()
{
$this->from = new \DateTime();
$this->interval = new \DateInterval('P1W'); // 1 week
$this->recurrences = 100;
$this->generateDatePeriod();
return $this;
}
/**
* Generate DatePeriod from class attributes
* Will repeat every DatePeriod
*
* @return $this
*/
protected function generateDatePeriod()
{
$this->datePeriod = new DatePeriod(
$this->from,
$this->interval,
$this->recurrences
);
return $this;
}
/**
* Set the Object to be repeated every days
* Ex : $obj->repeatEveryDay() will be repeated every days indefinitely
* $obj->repeatEveryDay(10) will be repeated every 10 days indefinitely
* $obj->repeatEveryDay(10, 4) will be repeated every 10 days only 4 times
*
* @param int $frequency Frequency the object will be repeated
* @param int $nbRepetition Time the object will be repeated (0 = infinite)
*
* @return $this
*/
public function repeatEveryDay($frequency = 1, $nbRepetition = 0)
{
$this->_repeatEveryPeriod($period = 'D', $frequency, $nbRepetition);
return $this;
}
/**
* Set the Object to be repeated every week
* Ex : $obj->repeatEveryWeek() will be repeated every week indefinitely
* $obj->repeatEveryWeek(10) will be repeated every 10 weeks (70days) indefinitely
* $obj->repeatEveryWeek(10, 4) will be repeated every 10 weeks (70days) only 4 times
*
* @param int $frequency Frequency the object will be repeated
* @param int $nbRepetition Time the object will be repeated (0 = infinite)
*
* @return $this
*/
public function repeatEveryWeek($frequency = 1, $nbRepetition = null)
{
$this->_repeatEveryPeriod($period = 'W', $frequency, $nbRepetition);
return $this;
}
/**
* Set the Object to be repeated every month
* Ex : $obj->repeatEveryWeek() will be repeated every month indefinitely
* $obj->repeatEveryWeek(10) will be repeated every 10 month (70days) indefinitely
* $obj->repeatEveryWeek(10, 4) will be repeated every 10 month (70days) only 4 times
*
* @param int $frequency Frequency the object will be repeated
* @param int $nbRepetition Time the object will be repeated (0 = infinite)
*
* @return $this
*/
public function repeatEveryMonth($frequency = 1, $nbRepetition = null)
{
$this->_repeatEveryPeriod($period = 'M', $frequency, $nbRepetition);
return $this;
}
/**
* Set the Object to be repeated every year
* Ex : $obj->repeatEveryWeek() will be repeated every year indefinitely
* $obj->repeatEveryWeek(10) will be repeated every 10 year indefinitely
* $obj->repeatEveryWeek(10, 4) will be repeated every 10 year only 4 times
*
* @param int $frequency Frequency the object will be repeated
* @param int $nbRepetition Time the object will be repeated
*
* @return $this
*/
public function repeatEveryYear($frequency = 1, $nbRepetition = null)
{
$this->_repeatEveryPeriod($period = 'Y', $frequency, $nbRepetition);
return $this;
}
/**
* Set the Object to be repeated every Period
* Ex : $obj->repeatEveryPeriod('D') will be repeated every day once
* $obj->repeatEveryPeriod('W', 10) will be repeated every 10 week once
* $obj->repeatEveryPeriod('M', 10, 4) will be repeated every 10 month only 4 times
*
* @param string $period Period Y|M||D|W
* @param int $frequency Frequency the object will be repeated
* @param int $nbRepetition Time the object will be repeated
*
* @return $this
*/
private function _repeatEveryPeriod($period, $frequency = 1, $nbRepetition = null)
{
if (is_numeric($frequency) && $frequency > 0) {
$this->interval = new \DateInterval('P' . $frequency . $period);
}
if (is_numeric($nbRepetition) && $nbRepetition > 0) {
$this->recurrences = $nbRepetition;
}
$this->generateDatePeriod();
return $this;
}
/**
* Set Start time
*
* @param \DateTime $from Start time
*
* @return $this
*/
public function setFrom($from)
{
$this->from = $from;
return $this;
}
/**
* Get Start time
*
* @return \DateTime
*/
public function getFrom()
{
return clone $this->from;
}
/**
* Set DatePeriod
*
* @param DatePeriod $datePeriod DatePeriod
*
* @return $this
*/
public function setDatePeriod(DatePeriod $datePeriod)
{
$this->datePeriod = $datePeriod;
return $this;
}
/**
* Get date DatePeriod
*
* @return DatePeriod
*/
public function getDatePeriod()
{
return clone $this->datePeriod;
}
}

View File

@@ -0,0 +1,77 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Coupon\Rule;
use Thelia\Type\IntType;
/**
* Created by JetBrains PhpStorm.
* Date: 8/19/13
* Time: 3:24 PM
*
* Check a Checkout against its Product number
*
* @package Coupon
* @author Guillaume MOREL <gmorel@openstudio.fr>
*
*/
class AvailableForXArticles extends CouponRuleAbstract
{
/**
* @inheritdoc
*/
public function checkBackOfficeIntput()
{
$ret = false;
$validator = new IntType();
$firstParam = reset($this->validators);
if ($firstParam) {
$ret = $validator->isValid($firstParam);
}
return $ret;
}
public function checkCheckoutInput()
{
$ret = false;
$validator = new IntType();
$firstParam = reset($this->validated);
if ($firstParam) {
$ret = $validator->isValid($firstParam);
}
return $ret;
}
public function isMatching()
{
if ($this->checkBackOfficeIntput() && $this->checkCheckoutInput()) {
$firstValidatorsParam = reset($this->validators);
$firstValidatedParam = reset($this->validated);
// if($firstValidatedParam >= $firstValidatedParam)
}
}
}

View File

@@ -36,6 +36,24 @@ namespace Thelia\Coupon\Rule;
*/
class CouponRuleAbstract implements CuponRuleInterface
{
/** @var array Parameters validating $validated against */
protected $validators = array();
/** @var array Parameters to be validated */
protected $validated = array();
/**
* Constructor
*
* @param array $validators Parameters validating $validated against
* @param array $validated Parameters to be validated
*/
public function __construct(array $validators, array $validated)
{
$this->validators = $validators;
$this->validated = $validated;
}
/**
* Check if backoffice inputs are relevant or not
*

View File

@@ -0,0 +1,96 @@
<?php
namespace Thelia\Coupon;
use InvalidArgumentException;
use Thelia\Coupon\Parameter\DateParam;
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2013-08-19 at 18:26:01.
*/
class DateParamTest extends \PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
}
/**
*
* @covers Thelia\Coupon\Parameter\DateParam::compareTo
*
*/
public function testInferiorDate()
{
$dateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-07");
$dateParam = new DateParam($dateValidator);
$expected = 1;
$actual = $dateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\DateParam::compareTo
*
*/
public function testEquelsDate()
{
$dateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-08");
$dateParam = new DateParam($dateValidator);
$expected = 0;
$actual = $dateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\DateParam::compareTo
*
*/
public function testSuperiorDate()
{
$dateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-09");
$dateParam = new DateParam($dateValidator);
$expected = -1;
$actual = $dateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
* @covers Thelia\Coupon\Parameter\DateParam::compareTo
* @expectedException InvalidArgumentException
*/
public function testInvalidArgumentException()
{
$dateValidator = new \DateTime("2012-07-08");
$dateToValidate = 1377012588;
$dateParam = new DateParam($dateValidator);
$dateParam->compareTo($dateToValidate);
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
}

View File

@@ -0,0 +1,121 @@
<?php
namespace Thelia\Coupon;
use InvalidArgumentException;
use Thelia\Coupon\Parameter\IntervalParam;
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2013-08-19 at 18:26:01.
*/
class IntervalParamTest extends \PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
}
/**
*
* @covers Thelia\Coupon\Parameter\IntervalParam::compareTo
*
*/
public function testInferiorDate()
{
$dateValidatorStart = new \DateTime("2012-07-08");
$dateValidatorInterval = new \DateInterval("P1M"); //1month
$dateToValidate = new \DateTime("2012-07-07");
$dateParam = new IntervalParam($dateValidatorStart, $dateValidatorInterval);
$expected = 1;
$actual = $dateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\IntervalParam::compareTo
*
*/
public function testEqualsDate()
{
$dateValidatorStart = new \DateTime("2012-07-08");
$dateValidatorInterval = new \DateInterval("P1M"); //1month
$dateToValidate = new \DateTime("2012-07-08");
echo '1 ' . date_format($dateValidatorStart, 'g:ia \o\n l jS F Y') . "\n";
echo '2 ' . date_format($dateToValidate, 'g:ia \o\n l jS F Y') . "\n";
$dateParam = new IntervalParam($dateValidatorStart, $dateValidatorInterval);
$expected = 0;
$actual = $dateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\IntervalParam::compareTo
*
*/
public function testEqualsDate2()
{
$dateValidatorStart = new \DateTime("2012-07-08");
$dateValidatorInterval = new \DateInterval("P1M"); //1month
$dateToValidate = new \DateTime("2012-08-08");
$dateParam = new IntervalParam($dateValidatorStart, $dateValidatorInterval);
$expected = 0;
$actual = $dateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\IntervalParam::compareTo
*
*/
public function testSuperiorDate()
{
$dateValidatorStart = new \DateTime("2012-07-08");
$dateValidatorInterval = new \DateInterval("P1M"); //1month
$dateToValidate = new \DateTime("2012-08-09");
$dateParam = new IntervalParam($dateValidatorStart, $dateValidatorInterval);
$expected = -1;
$actual = $dateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
* @covers Thelia\Coupon\Parameter\DateParam::compareTo
* @expectedException InvalidArgumentException
*/
public function testInvalidArgumentException()
{
$dateValidatorStart = new \DateTime("2012-07-08");
$dateValidatorInterval = new \DateInterval("P1M"); //1month
$dateToValidate = 1377012588;
$dateParam = new IntervalParam($dateValidatorStart, $dateValidatorInterval);
$dateParam->compareTo($dateToValidate);
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
}

View File

@@ -0,0 +1,238 @@
<?php
namespace Thelia\Coupon;
use InvalidArgumentException;
use Symfony\Component\Intl\Exception\NotImplementedException;
use Thelia\Coupon\Parameter\RepeatedDateParam;
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2013-08-19 at 18:26:01.
*/
class RepeatedDateParamTest extends \PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testInferiorDate()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-07");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth();
$expected = -1;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthOneTimeFirstPeriod()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-08");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth();
$expected = 0;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthOneTimeSecondPeriod()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-08-08");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth();
$expected = 0;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthTenTimesThirdPeriod()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-09-08");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth(1, 10);
$expected = 0;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthTenTimesTensPeriod()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2013-05-08");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth(1, 10);
$expected = 0;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testEqualsDateRepeatEveryFourMonthTwoTimesSecondPeriod()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-11-08");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth(4, 2);
$expected = 0;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testEqualsDateRepeatEveryFourMonthTwoTimesLastPeriod()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2013-03-08");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth(4, 2);
$expected = 0;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testNotEqualsDateRepeatEveryFourMonthTwoTimes1()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-08-08");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth(4, 2);
$expected = -1;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testNotEqualsDateRepeatEveryFourMonthTwoTimes2()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-12-08");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth(4, 2);
$expected = -1;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedDateParam::compareTo
*
*/
public function testSuperiorDateRepeatEveryFourMonthTwoTimes()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2013-03-09");
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth(4, 2);
$expected = -1;
$actual = $repeatedDateParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
* @covers Thelia\Coupon\Parameter\DateParam::compareTo
* @expectedException InvalidArgumentException
*/
public function testInvalidArgumentException()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = 1377012588;
$repeatedDateParam = new RepeatedDateParam();
$repeatedDateParam->setFrom($startDateValidator);
$repeatedDateParam->repeatEveryMonth(4, 2);
$repeatedDateParam->compareTo($dateToValidate);
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
}

View File

@@ -0,0 +1,327 @@
<?php
namespace Thelia\Coupon;
use Symfony\Component\Intl\Exception\NotImplementedException;
use Thelia\Coupon\Parameter\RepeatedIntervalParam;
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2013-08-19 at 18:26:01.
*/
class RepeatedIntervalParamTest extends \PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testInferiorDate()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-07");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth();
$expected = -1;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthOneTimeFirstPeriodBegining()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-08");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth();
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthOneTimeFirstPeriodMiddle()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-13");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth();
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthOneTimeFirstPeriodEnding()
{
$startDateValidator = new \DateTime("2012-07-08");
$dateToValidate = new \DateTime("2012-07-18");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth();
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthOneTimeSecondPeriodBegining()
{
$startDateValidator = new \DateTime("2012-08-08");
$dateToValidate = new \DateTime("2012-08-08");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth();
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthOneTimeSecondPeriodMiddle()
{
$startDateValidator = new \DateTime("2012-08-08");
$dateToValidate = new \DateTime("2012-08-13");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth();
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthOneTimeSecondPeriodEnding()
{
$startDateValidator = new \DateTime("2012-08-08");
$dateToValidate = new \DateTime("2012-08-18");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth();
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthFourTimeLastPeriodBegining()
{
$startDateValidator = new \DateTime("2012-10-08");
$dateToValidate = new \DateTime("2012-10-08");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth(1, 4);
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthFourTimeLastPeriodMiddle()
{
$startDateValidator = new \DateTime("2012-10-08");
$dateToValidate = new \DateTime("2012-10-13");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth(1, 4);
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testEqualsDateRepeatEveryMonthFourTimeLastPeriodEnding()
{
$startDateValidator = new \DateTime("2012-10-08");
$dateToValidate = new \DateTime("2012-10-18");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth(1, 4);
$expected = 0;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testNotEqualsDateRepeatEveryMonthFourTimeInTheBegining()
{
$startDateValidator = new \DateTime("2012-10-08");
$dateToValidate = new \DateTime("2012-07-19");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth(1, 4);
$expected = -1;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testNotEqualsDateRepeatEveryMonthFourTimeInTheMiddle()
{
$startDateValidator = new \DateTime("2012-10-08");
$dateToValidate = new \DateTime("2012-08-01");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth(1, 4);
$expected = -1;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testNotEqualsDateRepeatEveryMonthFourTimeInTheEnd()
{
$startDateValidator = new \DateTime("2012-10-08");
$dateToValidate = new \DateTime("2012-08-07");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth(1, 4);
$expected = -1;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Parameter\RepeatedIntervalParam::compareTo
*
*/
public function testSuperiorDateRepeatEveryMonthFourTime()
{
$startDateValidator = new \DateTime("2012-10-08");
$dateToValidate = new \DateTime("2012-10-19");
$duration = 10;
$RepeatedIntervalParam = new RepeatedIntervalParam();
$RepeatedIntervalParam->setFrom($startDateValidator);
$RepeatedIntervalParam->setDurationInDays($duration);
$RepeatedIntervalParam->repeatEveryMonth(1, 4);
$expected = -1;
$actual = $RepeatedIntervalParam->compareTo($dateToValidate);
$this->assertEquals($expected, $actual);
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
}

View File

@@ -1,26 +0,0 @@
<?php
namespace Thelia\Coupon;
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2013-08-19 at 18:26:01.
*/
class RemoveXAmountForCategoryYTest extends \PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
}

View File

@@ -0,0 +1,211 @@
<?php
namespace Thelia\Coupon;
use Thelia\Coupon\Rule\AvailableForXArticles;
/**
* Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2013-08-19 at 18:26:01.
*/
class AvailableForXArticlesTest extends \PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
}
protected function generateValidCouponBaseAdapterMock()
{
/** @var CouponAdapterInterface $stubTheliaAdapater */
$stubTheliaAdapater = $this->getMock(
'CouponBaseAdapter',
array('getNbArticlesInTheCart'),
array()
);
$stubTheliaAdapater->expects($this->any())
->method('getNbArticlesInTheCart')
->will($this->returnValue(4));
return $stubTheliaAdapater;
}
/**
*
* @covers Thelia\Coupon\Rule\AvailableForXArticles::checkBackOfficeIntput
*
*/
public function testValidBackOfficeInput()
{
/** @var CouponAdapterInterface $stubTheliaAdapater */
$stubTheliaAdapater = $this->generateValidCouponBaseAdapterMock();
$validators = array(4);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = true;
$actual = $rule->checkBackOfficeIntput();
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Rule\AvailableForXArticles::checkBackOfficeIntput
*
*/
public function testInValidBackOfficeInput()
{
/** @var CouponAdapterInterface $stubTheliaAdapater */
$stubTheliaAdapater = $this->generateValidCouponBaseAdapterMock();
$validators = array(4.5);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = false;
$actual = $rule->checkBackOfficeIntput();
$this->assertEquals($expected, $actual);
$validators = array(-1);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = false;
$actual = $rule->checkBackOfficeIntput();
$this->assertEquals($expected, $actual);
$validators = array('bad');
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = false;
$actual = $rule->checkBackOfficeIntput();
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Rule\AvailableForXArticles::checkCheckoutInput
*
*/
public function testValidCheckoutInput()
{
/** @var CouponAdapterInterface $stubTheliaAdapater */
$stubTheliaAdapater = $this->generateValidCouponBaseAdapterMock();
$validators = array(4);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = true;
$actual = $rule->checkCheckoutInput();
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Rule\AvailableForXArticles::checkCheckoutInput
*
*/
public function testInValidCheckoutInput()
{
/** @var CouponAdapterInterface $stubTheliaAdapater */
$stubTheliaAdapater = $this->generateValidCouponBaseAdapterMock();
$validators = array(4.5);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = false;
$actual = $rule->checkCheckoutInput();
$this->assertEquals($expected, $actual);
$validators = array(-1);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = false;
$actual = $rule->checkCheckoutInput();
$this->assertEquals($expected, $actual);
$validators = array('bad');
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = false;
$actual = $rule->checkCheckoutInput();
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Rule\AvailableForXArticles::isMatching
*
*/
public function testMatchingRuleEqual()
{
/** @var CouponAdapterInterface $stubTheliaAdapater */
$stubTheliaAdapater = $this->generateValidCouponBaseAdapterMock();
$validators = array(4);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = true;
$actual = $rule->isMatching();
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Rule\AvailableForXArticles::isMatching
*
*/
public function testMatchingRuleSuperior()
{
/** @var CouponAdapterInterface $stubTheliaAdapater */
$stubTheliaAdapater = $this->generateValidCouponBaseAdapterMock();
$validators = array(5);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = true;
$actual = $rule->isMatching();
$this->assertEquals($expected, $actual);
}
/**
*
* @covers Thelia\Coupon\Rule\AvailableForXArticles::isMatching
*
*/
public function testNotMatchingRule()
{
/** @var CouponAdapterInterface $stubTheliaAdapater */
$stubTheliaAdapater = $this->generateValidCouponBaseAdapterMock();
$validators = array(3);
$validated = array($stubTheliaAdapater->getNbArticlesInTheCart());
$rule = new AvailableForXArticles($validators, $validated);
$expected = false;
$actual = $rule->isMatching();
$this->assertEquals($expected, $actual);
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
}