PageRenderTime 24ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/magento/magento2-base/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/FlatTest.php

https://gitlab.com/yousafsyed/easternglamor
PHP | 391 lines | 218 code | 58 blank | 115 comment | 2 complexity | 2ae0c9d46f5eef6a77d686ca6865bc9d MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Catalog\Model\Indexer;
  7. class FlatTest extends \PHPUnit_Framework_TestCase
  8. {
  9. /**
  10. * @var int
  11. */
  12. protected static $categoryOne;
  13. /**
  14. * @var int
  15. */
  16. protected static $categoryTwo;
  17. /**
  18. * List of attribute codes
  19. *
  20. * @var string[]
  21. */
  22. protected static $attributeCodes = [];
  23. /**
  24. * List of attribute values
  25. * Data loaded from EAV
  26. *
  27. * @var string[]
  28. */
  29. protected static $attributeValues = [];
  30. /**
  31. * List of attributes to exclude
  32. *
  33. * @var string[]
  34. */
  35. protected static $attributesToExclude = ['url_path', 'display_mode'];
  36. /**
  37. * @var int
  38. */
  39. protected static $totalBefore = 0;
  40. public static function setUpBeforeClass()
  41. {
  42. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  43. 'Magento\Catalog\Model\Category'
  44. )->load(
  45. 2
  46. );
  47. self::loadAttributeCodes();
  48. self::loadAttributeValues($category);
  49. }
  50. public function testEntityItemsBefore()
  51. {
  52. /** @var \Magento\Catalog\Model\Category $category */
  53. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  54. 'Magento\Catalog\Model\Category'
  55. );
  56. $result = $category->getCollection()->getAllIds();
  57. $this->assertNotEmpty($result);
  58. $this->assertTrue(is_array($result));
  59. self::$totalBefore = count($result);
  60. }
  61. /**
  62. * Reindex All
  63. *
  64. * @magentoConfigFixture current_store catalog/frontend/flat_catalog_category true
  65. * @magentoAppArea frontend
  66. */
  67. public function testReindexAll()
  68. {
  69. /** @var $indexer \Magento\Framework\Indexer\IndexerInterface */
  70. $indexer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  71. 'Magento\Indexer\Model\Indexer'
  72. );
  73. $indexer->load('catalog_category_flat');
  74. $indexer->reindexAll();
  75. $this->assertTrue($indexer->isValid());
  76. /** @var \Magento\Catalog\Model\Category $category */
  77. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  78. 'Magento\Catalog\Model\Category'
  79. )->load(
  80. 2
  81. );
  82. $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
  83. $this->checkCategoryData($category);
  84. }
  85. /**
  86. * @magentoConfigFixture current_store catalog/frontend/flat_catalog_category true
  87. * @magentoAppArea frontend
  88. */
  89. public function testFlatItemsBefore()
  90. {
  91. /** @var \Magento\Catalog\Model\Category $category */
  92. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  93. 'Magento\Catalog\Model\Category'
  94. )->load(
  95. 2
  96. );
  97. $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
  98. $result = $category->getAllChildren(true);
  99. $this->assertNotEmpty($result);
  100. $this->assertCount(1, $result);
  101. }
  102. /**
  103. * Populate EAV category data
  104. *
  105. * @magentoConfigFixture current_store catalog/frontend/flat_catalog_category true
  106. */
  107. public function testCreateCategory()
  108. {
  109. /** @var \Magento\Catalog\Model\Category $category */
  110. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  111. 'Magento\Catalog\Model\Category'
  112. );
  113. $category->load(2);
  114. /** @var \Magento\Catalog\Model\Category $categoryOne */
  115. $categoryOne = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  116. 'Magento\Catalog\Model\Category'
  117. );
  118. $categoryOne->setName('Category One')->setPath($category->getPath())->setIsActive(true)->save();
  119. self::loadAttributeValues($categoryOne);
  120. self::$categoryOne = $categoryOne->getId();
  121. /** @var \Magento\Catalog\Model\Category $categoryTwo */
  122. $categoryTwo = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  123. 'Magento\Catalog\Model\Category'
  124. );
  125. $categoryTwo->setName('Category Two')->setPath($categoryOne->getPath())->setIsActive(true)->save();
  126. self::loadAttributeValues($categoryTwo);
  127. self::$categoryTwo = $categoryTwo->getId();
  128. $result = $category->getCollection()->getItems();
  129. $this->assertTrue(is_array($result));
  130. $this->assertEquals($category->getId(), $result[self::$categoryOne]->getParentId());
  131. $this->assertEquals(self::$categoryOne, $result[self::$categoryTwo]->getParentId());
  132. }
  133. /**
  134. * Test for reindex row action
  135. * Check that category data created at testCreateCategory() were syncing to flat structure
  136. *
  137. * @magentoConfigFixture current_store catalog/frontend/flat_catalog_category true
  138. * @magentoAppArea frontend
  139. *
  140. * @depends testCreateCategory
  141. */
  142. public function testFlatAfterCreate()
  143. {
  144. /** @var \Magento\Catalog\Model\Category $category */
  145. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  146. 'Magento\Catalog\Model\Category'
  147. )->load(
  148. 2
  149. );
  150. $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
  151. $result = $category->getAllChildren(true);
  152. $this->assertNotEmpty($result);
  153. $this->assertCount(3, $result);
  154. $this->assertContains(self::$categoryOne, $result);
  155. /** @var \Magento\Catalog\Model\Category $categoryOne */
  156. $categoryOne = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  157. 'Magento\Catalog\Model\Category'
  158. )->load(
  159. self::$categoryOne
  160. );
  161. $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $categoryOne->getResource());
  162. $result = $categoryOne->getAllChildren(true);
  163. $this->assertNotEmpty($result);
  164. $this->assertCount(2, $result);
  165. $this->assertContains(self::$categoryTwo, $result);
  166. $this->checkCategoryData($categoryOne);
  167. /** @var \Magento\Catalog\Model\Category $categoryTwo */
  168. $categoryTwo = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  169. 'Magento\Catalog\Model\Category'
  170. )->load(
  171. self::$categoryTwo
  172. );
  173. $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $categoryTwo->getResource());
  174. $this->assertEquals(self::$categoryOne, $categoryTwo->getParentId());
  175. $this->checkCategoryData($categoryTwo);
  176. }
  177. /**
  178. * Move category and populate EAV category data
  179. *
  180. * @magentoConfigFixture current_store catalog/frontend/flat_catalog_category true
  181. */
  182. public function testMoveCategory()
  183. {
  184. /** @var \Magento\Catalog\Model\Category $categoryTwo */
  185. $categoryTwo = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  186. 'Magento\Catalog\Model\Category'
  187. )->load(
  188. self::$categoryTwo
  189. );
  190. $this->assertEquals($categoryTwo->getData('parent_id'), self::$categoryOne);
  191. $categoryTwo->move(2, self::$categoryOne);
  192. self::loadAttributeValues($categoryTwo);
  193. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  194. 'Magento\Catalog\Model\Category'
  195. )->load(
  196. 2
  197. );
  198. self::loadAttributeValues($category);
  199. $categoryOne = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  200. 'Magento\Catalog\Model\Category'
  201. )->load(
  202. self::$categoryOne
  203. );
  204. self::loadAttributeValues($categoryOne);
  205. $this->assertEquals($categoryTwo->getData('parent_id'), 2);
  206. }
  207. /**
  208. * Test for reindex list action
  209. * Check that category data created at testMoveCategory() were syncing to flat structure
  210. *
  211. * @magentoConfigFixture current_store catalog/frontend/flat_catalog_category true
  212. * @magentoAppArea frontend
  213. *
  214. * @depends testMoveCategory
  215. */
  216. public function testFlatAfterMove()
  217. {
  218. /** @var \Magento\Catalog\Model\Category $category */
  219. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  220. 'Magento\Catalog\Model\Category'
  221. )->load(
  222. 2
  223. );
  224. $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
  225. $this->checkCategoryData($category);
  226. $result = $category->getAllChildren(true);
  227. $this->assertNotEmpty($result);
  228. $this->assertCount(3, $result);
  229. /** @var \Magento\Catalog\Model\Category $categoryTwo */
  230. $categoryTwo = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  231. 'Magento\Catalog\Model\Category'
  232. )->load(
  233. self::$categoryTwo
  234. );
  235. $this->checkCategoryData($categoryTwo);
  236. /** @var \Magento\Catalog\Model\Category $categoryOne */
  237. $categoryOne = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  238. 'Magento\Catalog\Model\Category'
  239. )->load(
  240. self::$categoryOne
  241. );
  242. $this->checkCategoryData($categoryOne);
  243. }
  244. /**
  245. * Delete created categories at testCreateCategory()
  246. *
  247. * @magentoConfigFixture current_store catalog/frontend/flat_catalog_category true
  248. * @magentoAppArea adminhtml
  249. */
  250. public function testDeleteCategory()
  251. {
  252. /** @var \Magento\Catalog\Model\Category $category */
  253. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  254. 'Magento\Catalog\Model\Category'
  255. );
  256. $category->load(self::$categoryTwo);
  257. $category->delete();
  258. $category->load(self::$categoryOne);
  259. $category->delete();
  260. $result = $category->getCollection()->getAllIds();
  261. $this->assertNotEmpty($result);
  262. $this->assertTrue(is_array($result));
  263. $this->assertCount(self::$totalBefore, $result);
  264. }
  265. /**
  266. * Test for reindex row action
  267. * Check that category data deleted at testDeleteCategory() were syncing to flat structure
  268. *
  269. * @magentoConfigFixture current_store catalog/frontend/flat_catalog_category true
  270. * @magentoAppArea frontend
  271. *
  272. * @depends testDeleteCategory
  273. */
  274. public function testFlatAfterDeleted()
  275. {
  276. /** @var \Magento\Catalog\Model\Category $category */
  277. $category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  278. 'Magento\Catalog\Model\Category'
  279. )->load(
  280. 2
  281. );
  282. $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
  283. $result = $category->getAllChildren(true);
  284. $this->assertNotEmpty($result);
  285. $this->assertCount(1, $result);
  286. }
  287. /**
  288. * Populate attribute values from category
  289. * Data loaded from EAV
  290. *
  291. * @param \Magento\Catalog\Model\Category $category
  292. */
  293. protected static function loadAttributeValues(\Magento\Catalog\Model\Category $category)
  294. {
  295. foreach (self::$attributeCodes as $attributeCode) {
  296. self::$attributeValues[$category->getId()][$attributeCode] = $category->getData($attributeCode);
  297. }
  298. }
  299. /**
  300. * Populate attribute codes for category entity
  301. * Data loaded from EAV
  302. *
  303. */
  304. protected static function loadAttributeCodes()
  305. {
  306. /** @var \Magento\Catalog\Model\Config $catalogConfig */
  307. $catalogConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  308. 'Magento\Catalog\Model\Config'
  309. );
  310. $attributeCodes = $catalogConfig->getEntityAttributeCodes(\Magento\Catalog\Model\Category::ENTITY);
  311. foreach ($attributeCodes as $attributeCode) {
  312. if (in_array($attributeCode, self::$attributesToExclude)) {
  313. continue;
  314. }
  315. self::$attributeCodes[] = $attributeCode;
  316. }
  317. }
  318. /**
  319. * Check EAV and flat data
  320. *
  321. * @param \Magento\Catalog\Model\Category $category
  322. */
  323. protected function checkCategoryData(\Magento\Catalog\Model\Category $category)
  324. {
  325. foreach (self::$attributeCodes as $attributeCode) {
  326. $this->assertEquals(
  327. self::$attributeValues[$category->getId()][$attributeCode],
  328. $category->getData($attributeCode),
  329. "Data for {$category->getId()} attribute code [{$attributeCode}] is wrong"
  330. );
  331. }
  332. }
  333. }