diff --git a/core/lib/Thelia/Core/Template/Element/BaseLoop.php b/core/lib/Thelia/Core/Template/Element/BaseLoop.php index debc022b6..7c9740ee0 100755 --- a/core/lib/Thelia/Core/Template/Element/BaseLoop.php +++ b/core/lib/Thelia/Core/Template/Element/BaseLoop.php @@ -117,6 +117,9 @@ abstract class BaseLoop $faultActor = array(); $faultDetails = array(); + $loopType = isset($nameValuePairs['type']) ? $nameValuePairs['type'] : "undefined"; + $loopName = isset($nameValuePairs['name']) ? $nameValuePairs['name'] : "undefined"; + while (($argument = $this->args->current()) !== false) { $this->args->next(); @@ -125,17 +128,17 @@ abstract class BaseLoop /* check if mandatory */ if($value === null && $argument->mandatory) { $faultActor[] = $argument->name; - $faultDetails[] = sprintf('"%s" parameter is missing', $argument->name); + $faultDetails[] = sprintf('"%s" parameter is missing in loop type: %s, name: %s', $argument->name, $loopType, $loopName); } else if($value === '' && !$argument->empty) { /* check if empty */ $faultActor[] = $argument->name; - $faultDetails[] = sprintf('"%s" parameter cannot be empty', $argument->name); + $faultDetails[] = sprintf('"%s" parameter cannot be empty in loop type: %s, name: %s', $argument->name, $loopType, $loopName); } else if($value !== null && !$argument->type->isValid($value)) { /* check type */ $faultActor[] = $argument->name; - $faultDetails[] = sprintf('Invalid value for "%s" argument', $argument->name); + $faultDetails[] = sprintf('Invalid value for "%s" argument in loop type: %s, name: %s', $argument->name, $loopType, $loopName); } else { /* set default */ diff --git a/core/lib/Thelia/Core/Template/Loop/FeatureValue.php b/core/lib/Thelia/Core/Template/Loop/FeatureValue.php index 67aa7b402..403baf37a 100755 --- a/core/lib/Thelia/Core/Template/Loop/FeatureValue.php +++ b/core/lib/Thelia/Core/Template/Loop/FeatureValue.php @@ -87,7 +87,7 @@ class FeatureValue extends BaseLoop $search->filterByProductId($product, Criteria::EQUAL); - $featureAvailable = $this->geFeature_available(); + $featureAvailable = $this->getFeature_available(); if (null !== $featureAvailable) { $search->filterByFeatureAvId($featureAvailable, Criteria::IN); diff --git a/core/lib/Thelia/Core/Template/Loop/Product.php b/core/lib/Thelia/Core/Template/Loop/Product.php index 57028d632..817419ff4 100755 --- a/core/lib/Thelia/Core/Template/Loop/Product.php +++ b/core/lib/Thelia/Core/Template/Loop/Product.php @@ -86,7 +86,7 @@ class Product extends BaseLoop new TypeCollection( new Type\EnumListType(array('alpha', 'alpha_reverse', /*'min_price', 'max_price',*/ 'manual', 'manual_reverse', 'ref', /*'promo', 'new',*/ 'random', 'given_id')) ), - 'manual' + 'alpha' ), Argument::createIntListTypeArgument('exclude'), Argument::createIntListTypeArgument('exclude_category'), diff --git a/core/lib/Thelia/Tests/Core/Template/Element/BaseLoopTestor.php b/core/lib/Thelia/Tests/Core/Template/Element/BaseLoopTestor.php new file mode 100755 index 000000000..bad6dc428 --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Element/BaseLoopTestor.php @@ -0,0 +1,86 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Element; + +use Symfony\Component\EventDispatcher\EventDispatcher; +use Thelia\Core\HttpFoundation\Request; +use Thelia\Core\Security\SecurityContext; +use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; +use Thelia\Core\HttpFoundation\Session\Session; + +/** + * + * @author Etienne Roudeix + * + */ +abstract class BaseLoopTestor extends \PHPUnit_Framework_TestCase +{ + protected $request; + protected $dispatcher; + protected $securityContext; + + protected $instance; + + abstract public function getTestedClassName(); + abstract public function getTestedInstance(); + abstract public function getMandatoryArguments(); + + protected function getMethod($name) { + $class = new \ReflectionClass($this->getTestedClassName()); + $method = $class->getMethod($name); + $method->setAccessible(true); + return $method; + } + + public function setUp() + { + $this->request = new Request(); + $this->request->setSession(new Session(new MockArraySessionStorage())); + + $this->dispatcher = new EventDispatcher(); + + $this->securityContext = new SecurityContext($this->request); + + $this->instance = $this->getTestedInstance(); + $this->instance->initializeArgs($this->getMandatoryArguments()); + } + + public function testGetArgDefinitions() + { + $method = $this->getMethod('getArgDefinitions'); + + $methodReturn = $method->invoke($this->instance); + + $this->assertInstanceOf('Thelia\Core\Template\Loop\Argument\ArgumentCollection', $methodReturn); + } + + public function testExec() + { + $method = $this->getMethod('exec'); + + $methodReturn = $method->invokeArgs($this->instance, array(null)); + + $this->assertInstanceOf('\Thelia\Core\Template\Element\LoopResult', $methodReturn); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/AccessoryTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/AccessoryTest.php new file mode 100755 index 000000000..99f5a0310 --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/AccessoryTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\Accessory; + +/** + * + * @author Etienne Roudeix + * + */ +class AccessoryTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\Accessory'; + } + + public function getTestedInstance() + { + return new Accessory($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array('product' => 1); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/AddressTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/AddressTest.php new file mode 100755 index 000000000..7ca5c094b --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/AddressTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\Address; + +/** + * + * @author Etienne Roudeix + * + */ +class AddressTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\Address'; + } + + public function getTestedInstance() + { + return new Address($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array(); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/CategoryTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/CategoryTest.php new file mode 100755 index 000000000..f33d07868 --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/CategoryTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\Category; + +/** + * + * @author Etienne Roudeix + * + */ +class CategoryTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\Category'; + } + + public function getTestedInstance() + { + return new Category($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array(); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/CountryTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/CountryTest.php new file mode 100755 index 000000000..389d0bc5d --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/CountryTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\Country; + +/** + * + * @author Etienne Roudeix + * + */ +class CountryTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\Country'; + } + + public function getTestedInstance() + { + return new Country($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array(); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/CustomerTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/CustomerTest.php new file mode 100755 index 000000000..62bcaa3be --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/CustomerTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\Customer; + +/** + * + * @author Etienne Roudeix + * + */ +class CustomerTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\Customer'; + } + + public function getTestedInstance() + { + return new Customer($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array(); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/FeatureAvailableTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/FeatureAvailableTest.php new file mode 100755 index 000000000..e93b05a69 --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/FeatureAvailableTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\FeatureAvailable; + +/** + * + * @author Etienne Roudeix + * + */ +class FeatureAvailableTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\FeatureAvailable'; + } + + public function getTestedInstance() + { + return new FeatureAvailable($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array(); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/FeatureTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/FeatureTest.php new file mode 100755 index 000000000..155088173 --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/FeatureTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\Feature; + +/** + * + * @author Etienne Roudeix + * + */ +class FeatureTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\Feature'; + } + + public function getTestedInstance() + { + return new Feature($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array(); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/FeatureValueTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/FeatureValueTest.php new file mode 100755 index 000000000..3f6a14a16 --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/FeatureValueTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\FeatureValue; + +/** + * + * @author Etienne Roudeix + * + */ +class FeatureValueTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\FeatureValue'; + } + + public function getTestedInstance() + { + return new FeatureValue($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array('product' => 1, 'feature' => 1); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/ProductTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/ProductTest.php new file mode 100755 index 000000000..58eaf55fd --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/ProductTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\Product; + +/** + * + * @author Etienne Roudeix + * + */ +class ProductTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\Product'; + } + + public function getTestedInstance() + { + return new Product($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array(); + } +} diff --git a/core/lib/Thelia/Tests/Core/Template/Loop/TitleTest.php b/core/lib/Thelia/Tests/Core/Template/Loop/TitleTest.php new file mode 100755 index 000000000..392e97930 --- /dev/null +++ b/core/lib/Thelia/Tests/Core/Template/Loop/TitleTest.php @@ -0,0 +1,51 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Tests\Core\Template\Loop; + +use Thelia\Tests\Core\Template\Element\BaseLoopTestor; + +use Thelia\Core\Template\Loop\Title; + +/** + * + * @author Etienne Roudeix + * + */ +class TitleTest extends BaseLoopTestor +{ + public function getTestedClassName() + { + return 'Thelia\Core\Template\Loop\Title'; + } + + public function getTestedInstance() + { + return new Title($this->request, $this->dispatcher, $this->securityContext); + } + + public function getMandatoryArguments() + { + return array(); + } +} diff --git a/install/faker.php b/install/faker.php index 52572dc81..85a338ebe 100755 --- a/install/faker.php +++ b/install/faker.php @@ -62,14 +62,14 @@ try { $product->setRef($faker->text(255)); $product->save(); - $stock = new \Thelia\Model\Stock(); + $stock = new \Thelia\Model\ProductSaleElements(); $stock->setProduct($product); $stock->setQuantity($faker->randomNumber(1,50)); $stock->setPromo($faker->randomNumber(0,1)); $stock->save(); $productPrice = new \Thelia\Model\ProductPrice(); - $productPrice->setStock($stock); + $productPrice->setProductSaleElements($stock); $productPrice->setCurrency($currency); $productPrice->setPrice($faker->randomFloat(2, 20, 2500)); $productPrice->save(); @@ -88,14 +88,14 @@ try { $product->setRef($faker->text(255)); $product->save(); - $stock = new \Thelia\Model\Stock(); + $stock = new \Thelia\Model\ProductSaleElements(); $stock->setProduct($product); $stock->setQuantity($faker->randomNumber(1,50)); $stock->setPromo($faker->randomNumber(0,1)); $stock->save(); $productPrice = new \Thelia\Model\ProductPrice(); - $productPrice->setStock($stock); + $productPrice->setProductSaleElements($stock); $productPrice->setCurrency($currency); $productPrice->setPrice($faker->randomFloat(2, 20, 2500)); $productPrice->save(); diff --git a/templates/default/bug.html b/templates/default/bug.html new file mode 100644 index 000000000..a1bc296ac --- /dev/null +++ b/templates/default/bug.html @@ -0,0 +1,4 @@ +{loop name="cat" type="category" id="99999"} + {loop name="prod" type="product" category="#ID"} + {/loop} +{/loop} \ No newline at end of file