public function testGetTreeHasLevelField() { $rootId = \Magento\Catalog\Model\Category::TREE_ROOT_ID; $storeGroups = []; $storeId = 1; $rootLevel = 2; $level = 3; $this->collection->expects($this->any())->method('addAttributeToSelect')->willReturnMap([['url_key', false, $this->collection], ['is_anchor', false, $this->collection]]); $this->childNode->expects($this->atLeastOnce())->method('getLevel')->willReturn($level); $this->rootNode->expects($this->atLeastOnce())->method('getLevel')->willReturn($rootLevel); $this->rootNode->expects($this->once())->method('hasChildren')->willReturn(true); $this->rootNode->expects($this->once())->method('getChildren')->willReturn([$this->childNode]); $this->categoryTree->expects($this->once())->method('load')->with(null, 3)->willReturnSelf(); $this->categoryTree->expects($this->atLeastOnce())->method('addCollectionData')->with($this->collection)->willReturnSelf(); $this->categoryTree->expects($this->once())->method('getNodeById')->with($rootId)->willReturn($this->rootNode); $this->store->expects($this->atLeastOnce())->method('getId')->willReturn($storeId); $this->storeManager->expects($this->once())->method('getGroups')->willReturn($storeGroups); $this->storeManager->expects($this->atLeastOnce())->method('getStore')->willReturn($this->store); $this->context->expects($this->once())->method('getStoreManager')->willReturn($this->storeManager); $this->context->expects($this->once())->method('getRequest')->willReturn($this->request); $this->context->expects($this->once())->method('getEscaper')->willReturn($this->escaper); $this->context->expects($this->once())->method('getEventManager')->willReturn($this->eventManager); /** @var \Magento\Widget\Block\Adminhtml\Widget\Catalog\Category\Chooser $chooser */ $chooser = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))->getObject('Magento\\Widget\\Block\\Adminhtml\\Widget\\Catalog\\Category\\Chooser', ['categoryTree' => $this->categoryTree, 'context' => $this->context]); $chooser->setData('category_collection', $this->collection); $result = $chooser->getTree(); $this->assertEquals($level, $result[0]['level']); }
protected function _toOptionArray() { if (is_null($this->options)) { // Create options $this->options = array(); $categories = $this->categoryCollection->getItems(); foreach ($categories as $category) { $pathIds = $category->getPathIds(); // skip root and default categories if (count($pathIds) < 3) { continue; } // remove root and default from path $pathIds = array_slice($pathIds, 2); $path = []; foreach ($pathIds as $pathId) { if (isset($categories[$pathId])) { $path[] = $categories[$pathId]->getName(); } } $fullName = implode('/', $path); $this->options[] = ['value' => $category->getId(), 'label' => $fullName]; } // Sort options usort($this->options, function ($option1, $option2) { return strcmp($option1['label'], $option2['label']); }); } return $this->options; }
/** * @return \Magento\Catalog\Model\ResourceModel\Category\Collection */ public function getCategoryCollection() { if (is_null($this->categoryCollection)) { $this->categoryCollection = $this->getArticle()->getSelectedCategoriesCollection()->setStore($this->_storeManager->getStore())->addAttributeToSelect(array('name', 'url_key', 'url_path'))->addAttributeToFilter('is_active', 1); $this->categoryCollection->getSelect()->order('at_position.position'); } return $this->categoryCollection; }
public function testToOptionArray() { $expect = [['label' => __('-- Please Select a Category --'), 'value' => ''], ['label' => 'name', 'value' => 3]]; $this->categoryCollection->expects($this->once())->method('addAttributeToSelect')->with($this->equalTo('name'))->will($this->returnValue($this->categoryCollection)); $this->categoryCollection->expects($this->once())->method('addRootLevelFilter')->will($this->returnValue($this->categoryCollection)); $this->categoryCollection->expects($this->once())->method('load'); $this->categoryCollection->expects($this->any())->method('getIterator')->will($this->returnValue(new \ArrayIterator([$this->category]))); $this->category->expects($this->once())->method('getName')->will($this->returnValue('name')); $this->category->expects($this->once())->method('getId')->will($this->returnValue(3)); $this->assertEquals($expect, $this->model->toOptionArray()); }
protected function setUp() { parent::setUp(); $this->categoryCollectionFactoryMock = $this->getMockBuilder(CategoryCollectionFactory::class)->setMethods(['create'])->disableOriginalConstructor()->getMock(); $this->dbHelperMock = $this->getMockBuilder(DbHelper::class)->disableOriginalConstructor()->getMock(); $this->urlBuilderMock = $this->getMockBuilder(UrlInterface::class)->getMockForAbstractClass(); $this->storeMock = $this->getMockBuilder(Store::class)->disableOriginalConstructor()->getMock(); $this->categoryCollectionMock = $this->getMockBuilder(CategoryCollection::class)->disableOriginalConstructor()->getMock(); $this->categoryCollectionFactoryMock->expects($this->any())->method('create')->willReturn($this->categoryCollectionMock); $this->categoryCollectionMock->expects($this->any())->method('addAttributeToSelect')->willReturnSelf(); $this->categoryCollectionMock->expects($this->any())->method('addAttributeToFilter')->willReturnSelf(); $this->categoryCollectionMock->expects($this->any())->method('setStoreId')->willReturnSelf(); $this->categoryCollectionMock->expects($this->any())->method('getIterator')->willReturn(new \ArrayIterator([])); }
/** * @SuppressWarnings(PHPMD.CamelCaseMethodName) * {@inheritDoc} */ protected function _afterLoad() { parent::_afterLoad(); foreach ($this->_items as $item) { $this->getVirtualAttributeBackend()->afterLoad($item); } return $this; }
/** * Test method */ public function testSkipGenerationForNotStoreRootCategory() { $this->product->expects($this->any())->method('getStoreId')->will($this->returnValue(1)); $this->product->expects($this->never())->method('getStoreIds'); $category = $this->getMock('Magento\\Catalog\\Model\\Category', [], [], '', false); $category->expects($this->any())->method('getParentIds')->will($this->returnValue(['root-id', 'root-for-store-id'])); $store = $this->getMockBuilder('Magento\\Store\\Model\\Store')->disableOriginalConstructor()->getMock(); $store->expects($this->any())->method('getRootCategoryId')->will($this->returnValue('not-root-id')); $this->storeManager->expects($this->any())->method('getStore')->will($this->returnValue($store)); $this->categoriesCollection->expects($this->any())->method('getIterator')->willReturn(new \ArrayIterator([$category])); $this->initObjectRegistryFactory([]); $canonical = new \Magento\UrlRewrite\Service\V1\Data\UrlRewrite(); $canonical->setTargetPath('category-1')->setStoreId(1); $this->canonicalUrlRewriteGenerator->expects($this->any())->method('generate')->will($this->returnValue([$canonical])); $this->categoriesUrlRewriteGenerator->expects($this->any())->method('generate')->will($this->returnValue([])); $this->currentUrlRewritesRegenerator->expects($this->any())->method('generate')->will($this->returnValue([])); $this->assertEquals(['category-1-1' => $canonical], $this->productUrlRewriteGenerator->generate($this->product)); }
/** * Initialize categories ID to text-path hash. * * @return $this */ protected function initCategories() { $collection = $this->_categoryColFactory->create()->addNameToResult(); /* @var $collection \Magento\Catalog\Model\ResourceModel\Category\Collection */ foreach ($collection as $category) { $structure = preg_split('#/+#', $category->getPath()); $pathSize = count($structure); if ($pathSize > 1) { $path = []; for ($i = 1; $i < $pathSize; $i++) { $path[] = $collection->getItemById($structure[$i])->getName(); } $this->_rootCategories[$category->getId()] = array_shift($path); if ($pathSize > 2) { $this->_categories[$category->getId()] = implode('/', $path); } } } return $this; }
/** * Retrieve inactive category item ids * * @param Collection $collection * @param int $storeId * @return array */ protected function _getInactiveItemIds($collection, $storeId) { $linkField = $this->metadataPool->getMetadata(CategoryInterface::class)->getLinkField(); $intTable = $this->_coreResource->getTableName('catalog_category_entity_int'); $select = $collection->getAllIdsSql()->joinInner(['d' => $intTable], "e.{$linkField} = d.{$linkField}", [])->joinLeft(['c' => $intTable], "c.attribute_id = :attribute_id AND c.store_id = :store_id AND c.{$linkField} = d.{$linkField}", [])->where('d.attribute_id = :attribute_id')->where('d.store_id = :zero_store_id')->where($this->_conn->getCheckSql('c.value_id > 0', 'c.value', 'd.value') . ' = :cond'); return $this->_conn->fetchCol($select, ['attribute_id' => $this->_catalogCategory->getIsActiveAttributeId(), 'store_id' => $storeId, 'zero_store_id' => 0, 'cond' => 0]); }
/** * @SuppressWarnings(PHPMD.CamelCaseMethodName) * * {@inheritDoc} */ protected function _afterLoad() { // Resort items according the search response. $originalItems = $this->_items; $this->_items = []; foreach ($this->queryResponse->getIterator() as $document) { $documentId = $document->getId(); if (isset($originalItems[$documentId])) { $originalItems[$documentId]->setDocumentScore($document->getScore()); $originalItems[$documentId]->setDocumentSource($document->getSource()); $this->_items[$documentId] = $originalItems[$documentId]; } } return parent::_afterLoad(); }
/** * @return void */ protected function prepareCollection() { $storeId = $this->storeManager->getStore()->getId(); $this->categoryCollection->addAttributeToSelect('name')->addAttributeToSelect('is_active')->setProductStoreId($storeId)->setLoadProductCount(true)->setStoreId($storeId); }