Skip to content

Commit f9df4da

Browse files
committed
#312:default store breadcrumbs returned for another store - added tests
1 parent f39a5d9 commit f9df4da

File tree

3 files changed

+203
-0
lines changed

3 files changed

+203
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\GraphQl\Catalog\Product;
10+
11+
use Magento\Framework\ObjectManagerInterface;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use Magento\TestFramework\TestCase\GraphQlAbstract;
14+
15+
/**
16+
* Test for product categories
17+
*/
18+
class ProductCategoriesTest extends GraphQlAbstract
19+
{
20+
/**
21+
* @var ObjectManagerInterface
22+
*/
23+
private $objectManager;
24+
25+
/**
26+
* @inheritdoc
27+
*/
28+
protected function setUp(): void
29+
{
30+
$this->objectManager = Bootstrap::getObjectManager();
31+
}
32+
33+
/**
34+
* @magentoApiDataFixture Magento/Catalog/_files/product_in_two_root_categories.php
35+
*/
36+
public function testProductCategoriesInDefaultStore(): void
37+
{
38+
$response = $this->graphQlQuery(
39+
$this->getQuery('in-stock-product'),
40+
[],
41+
'',
42+
['Store' => 'default']
43+
);
44+
45+
$product = current($response['products']['items']);
46+
$categories = $product['categories'];
47+
48+
self::assertCount(1, $categories);
49+
self::assertEquals('Category 1', $categories[0]['name']);
50+
self::assertEquals('category-1', $categories[0]['url_path']);
51+
self::assertEquals('category-1', $categories[0]['url_path']);
52+
self::assertNull($categories[0]['breadcrumbs']);
53+
}
54+
55+
/**
56+
* @magentoApiDataFixture Magento/Catalog/_files/product_in_two_root_categories.php
57+
*/
58+
public function testProductCategoriesInNonDefaultStore(): void
59+
{
60+
$response = $this->graphQlQuery(
61+
$this->getQuery('in-stock-product'),
62+
[],
63+
'',
64+
['Store' => 'test_store_1']
65+
);
66+
67+
$product = current($response['products']['items']);
68+
$categories = $product['categories'];
69+
70+
self::assertCount(2, $categories);
71+
self::assertEquals('Second Root Subcategory', $categories[0]['name']);
72+
self::assertEquals('second-root-subcategory', $categories[0]['url_path']);
73+
self::assertNull($categories[0]['breadcrumbs']);
74+
self::assertEquals('Second Root Subcategory', $categories[1]['name']);
75+
self::assertEquals('second-root-subcategory/second-root-subsubcategory', $categories[1]['url_path']);
76+
self::assertNotNull($categories[1]['breadcrumbs']);
77+
self::assertEquals('Second Root Subcategory', $categories[1]['category_name']);
78+
self::assertEquals('Second Root Subcategory', $categories[1]['category_name']);
79+
self::assertEquals(2, $categories[1]['category_level']);
80+
}
81+
82+
/**
83+
* Get query
84+
*
85+
* @param string $sku
86+
* @return string
87+
*/
88+
private function getQuery(string $sku): string
89+
{
90+
return <<<QUERY
91+
{
92+
products(filter: { sku: { eq: "{$sku}"} }){
93+
items {
94+
categories {
95+
name
96+
id
97+
url_path
98+
breadcrumbs {
99+
category_id
100+
category_name
101+
category_level
102+
}
103+
}
104+
}
105+
}
106+
}
107+
QUERY;
108+
}
109+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Magento\Catalog\Api\CategoryRepositoryInterface;
10+
use Magento\Catalog\Api\Data\ProductInterface;
11+
use Magento\Catalog\Api\ProductRepositoryInterface;
12+
use Magento\Catalog\Model\CategoryFactory;
13+
use Magento\Catalog\Model\ResourceModel\Category\Collection;
14+
use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
15+
use Magento\Store\Api\WebsiteRepositoryInterface;
16+
use Magento\TestFramework\Helper\Bootstrap;
17+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
18+
19+
Resolver::getInstance()->requireDataFixture('Magento/Store/_files/store_with_second_root_category.php');
20+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_with_category.php');
21+
22+
$objectManager = Bootstrap::getObjectManager();
23+
$productRepository = $objectManager->get(ProductRepositoryInterface::class);
24+
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
25+
$categoryRepository = $objectManager->get(CategoryRepositoryInterface::class);
26+
$categoryCollectionFactory = $objectManager->get(CollectionFactory::class);
27+
$categoryFactory = $objectManager->get(CategoryFactory::class);
28+
29+
$defaultWebsiteId = $websiteRepository->get('base')->getId();
30+
$secondWebsiteId = $websiteRepository->get('test')->getId();
31+
32+
/** @var $categoryCollection Collection */
33+
$categoryCollection = $categoryCollectionFactory->create();
34+
$categoryCollection->addFieldToFilter('name', ['eq' => 'Second Root Category']);
35+
$secondRootCategory = $categoryCollection->getFirstItem();
36+
37+
$subCategory = $categoryFactory->create();
38+
$subCategory
39+
->setName('Second Root Subcategory')
40+
->setParentId($secondRootCategory->getEntityId())
41+
->setLevel(2)
42+
->setAvailableSortBy(['position', 'name'])
43+
->setDefaultSortBy('name')
44+
->setIsActive(true)
45+
->setPosition(1);
46+
$subCategory = $categoryRepository->save($subCategory);
47+
48+
$subSubCategory = $categoryFactory->create();
49+
$subSubCategory
50+
->setName('Second Root Subsubcategory')
51+
->setParentId($subCategory->getEntityId())
52+
->setLevel(2)
53+
->setAvailableSortBy(['position', 'name'])
54+
->setDefaultSortBy('name')
55+
->setIsActive(true)
56+
->setPosition(1);
57+
$subSubCategory = $categoryRepository->save($subSubCategory);
58+
59+
/** @var $product ProductInterface */
60+
$product = $productRepository->get('in-stock-product');
61+
$product
62+
->setUrlKey('in-stock-product')
63+
->setWebsiteIds([$defaultWebsiteId, $secondWebsiteId])
64+
->setCategoryIds(
65+
[2, 333, $secondRootCategory->getEntityId(), $subCategory->getEntityId(), $subSubCategory->getEntityId()]
66+
);
67+
$productRepository->save($product);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Magento\Catalog\Api\CategoryRepositoryInterface;
10+
use Magento\Catalog\Model\ResourceModel\Category\Collection;
11+
use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
14+
15+
//$objectManager = Bootstrap::getObjectManager();
16+
17+
//$categoryRepository = $objectManager->get(CategoryRepositoryInterface::class);
18+
//$categoryCollectionFactory = $objectManager->get(CollectionFactory::class);
19+
20+
///** @var $categoryCollection Collection */
21+
//$categoryCollection = $categoryCollectionFactory->create();
22+
//$categoryCollection->addFieldToFilter('name', ['eq' => 'Second Root Category']);
23+
//$secondRootCategory = $categoryCollection->getFirstItem();
24+
//$categoryRepository->delete($secondRootCategory);
25+
26+
Resolver::getInstance()->requireDataFixture('Magento/Store/_files/store_with_second_root_category_rollback.php');
27+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_with_category_rollback.php');

0 commit comments

Comments
 (0)