Skip to content

Commit

Permalink
ENGCOM-4576: Query category for disabled catalog with products return…
Browse files Browse the repository at this point in the history
…s the product count #476

 - Merge Pull Request magento/graphql-ce#476 from XxXgeoXxX/graphql-ce:2.3-devlop#463
 - Merged commits:
   1. d452a36
   2. 058135b
   3. 6c6047d
   4. e1aa929
   5. 53d087a
   6. 8ca4590
   7. 201cdf2
   8. 4c0b3df
   9. c47213a
   10. b676132
   11. 5287f98
   12. 10ec412
   13. f7fbc9a
   14. 525a1e9
   15. af96830
   16. 0b2bdc6
  • Loading branch information
magento-engcom-team committed Jun 24, 2019
2 parents 1e58f70 + 0b2bdc6 commit c1e2218
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\CatalogGraphQl\Model\Resolver\Category;

use Magento\Catalog\Api\Data\CategoryInterface;
use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
use Magento\Framework\EntityManager\MetadataPool;
use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;

/**
* Check if category is active.
*/
class CheckCategoryIsActive
{
/**
* @var CollectionFactory
*/
private $collectionFactory;

/**
* @var MetadataPool
*/
private $metadata;

/**
* @param CollectionFactory $collectionFactory
* @param MetadataPool $metadata
*/
public function __construct(
CollectionFactory $collectionFactory,
MetadataPool $metadata
) {
$this->collectionFactory = $collectionFactory;
$this->metadata = $metadata;
}

/**
* Check if category is active.
*
* @param int $categoryId
* @throws GraphQlNoSuchEntityException
*/
public function execute(int $categoryId): void
{
$collection = $this->collectionFactory->create();
$collection->addAttributeToFilter(CategoryInterface::KEY_IS_ACTIVE, ['eq' => 1])
->getSelect()
->where(
$collection->getSelect()
->getConnection()
->quoteIdentifier(
'e.' .
$this->metadata->getMetadata(CategoryInterface::class)->getIdentifierField()
) . ' = ?',
$categoryId
);

if ($collection->count() === 0) {
throw new GraphQlNoSuchEntityException(__('Category doesn\'t exist'));
}
}
}
15 changes: 14 additions & 1 deletion app/code/Magento/CatalogGraphQl/Model/Resolver/CategoryTree.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

namespace Magento\CatalogGraphQl\Model\Resolver;

use Magento\Catalog\Model\Category;
use Magento\CatalogGraphQl\Model\Resolver\Category\CheckCategoryIsActive;
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\ExtractDataFromCategoryTree;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
use Magento\Framework\GraphQl\Config\Element\Field;
Expand Down Expand Up @@ -34,16 +36,24 @@ class CategoryTree implements ResolverInterface
*/
private $extractDataFromCategoryTree;

/**
* @var CheckCategoryIsActive
*/
private $checkCategoryIsActive;

/**
* @param \Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree $categoryTree
* @param ExtractDataFromCategoryTree $extractDataFromCategoryTree
* @param CheckCategoryIsActive $checkCategoryIsActive
*/
public function __construct(
\Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\CategoryTree $categoryTree,
ExtractDataFromCategoryTree $extractDataFromCategoryTree
ExtractDataFromCategoryTree $extractDataFromCategoryTree,
CheckCategoryIsActive $checkCategoryIsActive
) {
$this->categoryTree = $categoryTree;
$this->extractDataFromCategoryTree = $extractDataFromCategoryTree;
$this->checkCategoryIsActive = $checkCategoryIsActive;
}

/**
Expand Down Expand Up @@ -72,6 +82,9 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
}

$rootCategoryId = $this->getCategoryId($args);
if ($rootCategoryId !== Category::TREE_ROOT_ID) {
$this->checkCategoryIsActive->execute($rootCategoryId);
}
$categoriesTree = $this->categoryTree->getTree($info, $rootCategoryId);

if (empty($categoriesTree) || ($categoriesTree->count() == 0)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,25 @@ public function testGetCategoryById()
self::assertEquals(13, $response['category']['id']);
}

/**
* @magentoApiDataFixture Magento/Catalog/_files/categories.php
* @expectedException \Exception
* @expectedExceptionMessage Category doesn't exist
*/
public function testGetDisabledCategory()
{
$categoryId = 8;
$query = <<<QUERY
{
category(id: {$categoryId}) {
id
name
}
}
QUERY;
$this->graphQlQuery($query);
}

public function testNonExistentCategoryWithProductCount()
{
$query = <<<QUERY
Expand Down

0 comments on commit c1e2218

Please sign in to comment.