PageRenderTime 54ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/.dev/tests/Classes/Model/OrderItem.php

https://github.com/istran/core
PHP | 379 lines | 246 code | 107 blank | 26 comment | 0 complexity | 13f5ea88a95c0265f780527287ee4ae2 MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause
  1. <?php
  2. // vim: set ts=4 sw=4 sts=4 et:
  3. /**
  4. * LiteCommerce
  5. *
  6. * NOTICE OF LICENSE
  7. *
  8. * This source file is subject to the Open Software License (OSL 3.0)
  9. * that is bundled with this package in the file LICENSE.txt.
  10. * It is also available through the world-wide-web at this URL:
  11. * http://opensource.org/licenses/osl-3.0.php
  12. * If you did not receive a copy of the license and are unable to
  13. * obtain it through the world-wide-web, please send an email
  14. * to licensing@litecommerce.com so we can send you a copy immediately.
  15. *
  16. * @category LiteCommerce
  17. * @package Tests
  18. * @subpackage Classes
  19. * @author Creative Development LLC <info@cdev.ru>
  20. * @copyright Copyright (c) 2010 Creative Development LLC <info@cdev.ru>. All rights reserved
  21. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  22. * @version GIT: $Id: cfe87d80112366f9ee65bd28ab91b52277f16bf6 $
  23. * @link http://www.litecommerce.com/
  24. * @see ____file_see____
  25. * @since 3.0.0
  26. */
  27. class XLite_Tests_Model_OrderItem extends XLite_Tests_Model_OrderAbstract
  28. {
  29. public function testCreate()
  30. {
  31. $order = $this->getTestOrder();
  32. $this->assertEquals(1, $order->getItems()->count(), 'check items count');
  33. $item = $order->getItems()->get(0);
  34. $this->assertTrue(0 < $item->getItemId(), 'check items id');
  35. $this->assertEquals(
  36. $this->getProduct()->getProductId(),
  37. $item->getObject()->getId(),
  38. 'check product id'
  39. );
  40. $this->assertEquals(
  41. $this->getProduct()->getName(),
  42. $item->getName(),
  43. 'check name'
  44. );
  45. $this->assertEquals(
  46. $this->getProduct()->getSKU(),
  47. $item->getSKU(),
  48. 'check sku'
  49. );
  50. $this->assertEquals(
  51. $this->getProduct()->getPrice(),
  52. $item->getPrice(),
  53. 'check price'
  54. );
  55. $this->assertEquals(
  56. 1,
  57. $item->getAmount(),
  58. 'check amount'
  59. );
  60. // Saved modifiers
  61. $sm = new \XLite\Model\OrderItemModifier;
  62. $item->addSavedModifiers($sm);
  63. $count = count($item->getSavedModifiers());
  64. $this->assertEquals($sm, $item->getSavedModifiers()->get($count - 1), 'check saved modifier');
  65. }
  66. public function testUpdate()
  67. {
  68. $order = $this->getTestOrder();
  69. $item = $order->getItems()->get(0);
  70. $id = $item->getItemId();
  71. $item->setAmount(2);
  72. \XLite\Core\Database::getEM()->persist($item);
  73. \XLite\Core\Database::getEM()->flush();
  74. \XLite\Core\Database::getEM()->clear();
  75. $item = \XLite\Core\Database::getRepo('XLite\Model\OrderItem')->find($id);
  76. $this->assertEquals(2, $item->getAmount(), 'check amount');
  77. $list = \XLite\Core\Database::getRepo('XLite\Model\Product')->findByEnabled(true);
  78. $p = $list[1];
  79. $item->setProduct($p);
  80. \XLite\Core\Database::getEM()->persist($item);
  81. \XLite\Core\Database::getEM()->flush();
  82. \XLite\Core\Database::getEM()->clear();
  83. $item = \XLite\Core\Database::getRepo('XLite\Model\OrderItem')->find($id);
  84. $this->assertEquals($p->getProductId(), $item->getObject()->getId(), 'check object id');
  85. }
  86. public function testDelete()
  87. {
  88. $order = $this->getTestOrder();
  89. $item = $order->getItems()->get(0);
  90. $order->getItems()->removeElement($item);
  91. \XLite\Core\Database::getEM()->remove($item);
  92. $id = $item->getItemId();
  93. \XLite\Core\Database::getEM()->flush();
  94. $item = \XLite\Core\Database::getRepo('XLite\Model\OrderItem')
  95. ->find($id);
  96. $this->assertTrue(is_null($item), 'check removed item');
  97. }
  98. public function testGetProduct()
  99. {
  100. $order = $this->getTestOrder();
  101. $item = $order->getItems()->get(0);
  102. $id = $item->getItemId();
  103. $this->assertEquals($this->getProduct(), $item->getProduct(), 'check object');
  104. $item = new \XLite\Model\OrderItem();
  105. $this->assertTrue(is_null($item->getProduct()), 'check empty object #2');
  106. \XLite\Core\Database::getEM()->clear();
  107. $item = \XLite\Core\Database::getRepo('XLite\Model\OrderItem')->find($id);
  108. $this->assertEquals($this->getProduct(), $item->getProduct(), 'check object #2');
  109. $item = \XLite\Core\Database::getRepo('XLite\Model\OrderItem')->find($id);
  110. \XLite\Core\Database::getEM()->remove($this->getProduct());
  111. \XLite\Core\Database::getEM()->flush();
  112. \XLite\Core\Database::getEM()->clear();
  113. $item = \XLite\Core\Database::getRepo('XLite\Model\OrderItem')->find($id);
  114. $this->assertFalse(is_null($item), 'check item from DB');
  115. $this->assertFalse(is_null($item->getProduct()), 'check dump object #2');
  116. }
  117. public function testsetObject()
  118. {
  119. $order = $this->getTestOrder();
  120. $item = $order->getItems()->get(0);
  121. $this->assertNotEquals(0, $item->getPrice(), 'check non-empty price');
  122. $this->assertNotEquals('', $item->getName(), 'check non-empty name');
  123. $this->assertNotEquals('', $item->getSku(), 'check non-empty sku');
  124. $item->setProduct(null);
  125. $this->assertEquals(0, $item->getPrice(), 'check empty price');
  126. $this->assertEquals('', $item->getName(), 'check empty name');
  127. $this->assertEquals('', $item->getSku(), 'check empty sku');
  128. }
  129. public function testSetAmount()
  130. {
  131. $order = $this->getTestOrder();
  132. $item = $order->getItems()->get(0);
  133. $this->assertEquals(1, $item->getAmount(), 'check amount');
  134. $id = $item->getItemId();
  135. $item->setAmount(2);
  136. \XLite\Core\Database::getEM()->persist($item);
  137. \XLite\Core\Database::getEM()->flush();
  138. \XLite\Core\Database::getEM()->clear();
  139. $item = \XLite\Core\Database::getRepo('XLite\Model\OrderItem')->find($id);
  140. $this->assertEquals(2, $item->getAmount(), 'check amount #2');
  141. $item->setAmount(0);
  142. $this->assertEquals(1, $item->getAmount(), 'check amount #3');
  143. $item->setAmount(99999);
  144. $this->assertEquals(9999, $item->getAmount(), 'check amount #4');
  145. }
  146. public function testGetWeight()
  147. {
  148. $order = $this->getTestOrder();
  149. $item = $order->getItems()->get(0);
  150. $this->assertEquals($this->getProduct()->getWeight(), $item->getWeight(), 'check weight');
  151. $item->setAmount(2);
  152. $this->assertEquals(2 * $this->getProduct()->getWeight(), $item->getWeight(), 'check weight #2');
  153. $item = new \XLite\Model\OrderItem();
  154. $this->assertEquals(0, $item->getWeight(), 'check weight #3');
  155. }
  156. public function testHasImage()
  157. {
  158. $order = $this->getTestOrder();
  159. $item = $order->getItems()->get(0);
  160. $this->assertEquals(
  161. (bool)$this->getProduct()->getImage(),
  162. $item->hasImage(),
  163. 'check thumbnail'
  164. );
  165. }
  166. public function testGetImageURL()
  167. {
  168. $order = $this->getTestOrder();
  169. $item = $order->getItems()->get(0);
  170. $this->assertEquals(
  171. $this->getProduct()->getImage()->getURL(),
  172. $item->getImageURL(),
  173. 'check thumbnail url'
  174. );
  175. }
  176. public function testGetImage()
  177. {
  178. $order = $this->getTestOrder();
  179. $item = $order->getItems()->get(0);
  180. $this->assertEquals(
  181. $this->getProduct()->getImage(),
  182. $item->getImage(),
  183. 'check thumbnail'
  184. );
  185. }
  186. public function testGetDescription()
  187. {
  188. $order = $this->getTestOrder();
  189. $item = $order->getItems()->get(0);
  190. $this->assertEquals(
  191. $this->getProduct()->getName() . ' (1)',
  192. $item->getDescription(),
  193. 'check description'
  194. );
  195. }
  196. public function testGetURL()
  197. {
  198. $order = $this->getTestOrder();
  199. $item = $order->getItems()->get(0);
  200. $this->assertEquals(
  201. $this->getProduct()->getURL(),
  202. $item->getURL(),
  203. 'check object page URL'
  204. );
  205. }
  206. public function testIsShipped()
  207. {
  208. $order = $this->getTestOrder();
  209. $item = $order->getItems()->get(0);
  210. $this->assertEquals(
  211. !$this->getProduct()->getFreeShipping(),
  212. $item->isShipped(),
  213. 'check shipped status'
  214. );
  215. }
  216. public function testGetKey()
  217. {
  218. $order = $this->getTestOrder();
  219. $item = $order->getItems()->get(0);
  220. $this->assertEquals(
  221. 'product.' . $this->getProduct()->getProductId(),
  222. $item->getKey(),
  223. 'check key'
  224. );
  225. }
  226. public function testIsValid()
  227. {
  228. $order = $this->getTestOrder();
  229. $item = $order->getItems()->get(0);
  230. $this->assertTrue(
  231. $item->isValid(),
  232. 'check validate status'
  233. );
  234. }
  235. public function testGetDiscountablePrice()
  236. {
  237. $order = $this->getTestOrder();
  238. $item = $order->getItems()->get(0);
  239. $this->assertEquals(
  240. $item->getDiscountablePrice(),
  241. $item->getPrice(),
  242. 'check discountable price'
  243. );
  244. }
  245. public function testGettaxableTotal()
  246. {
  247. $order = $this->getTestOrder();
  248. $item = $order->getItems()->get(0);
  249. $this->assertEquals(
  250. $item->getTaxableTotal(),
  251. $item->getTotal(),
  252. 'check taxable total'
  253. );
  254. }
  255. public function testGetEventCell()
  256. {
  257. $order = $this->getTestOrder();
  258. $item = $order->getItems()->get(0);
  259. $etalon = array(
  260. 'item_id' => $item->getItemId(),
  261. 'key' => 'product.' . $this->getProduct()->getProductId(),
  262. 'object_type' => 'product',
  263. 'object_id' => $this->getProduct()->getProductId(),
  264. 'options' => array(),
  265. );
  266. $this->assertEquals(
  267. $etalon,
  268. $item->getEventCell(),
  269. 'check event item info'
  270. );
  271. }
  272. }