Skip to content

Commit d00db30

Browse files
committed
MC-37543: Create automated test for "Add static block on a category page"
1 parent 6cd35e9 commit d00db30

File tree

4 files changed

+252
-0
lines changed

4 files changed

+252
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Catalog\Block\Category;
9+
10+
use Magento\Catalog\Api\CategoryRepositoryInterface;
11+
use Magento\Catalog\Api\Data\CategoryInterface;
12+
use Magento\Framework\ObjectManagerInterface;
13+
use Magento\Framework\Registry;
14+
use Magento\Framework\View\LayoutInterface;
15+
use Magento\TestFramework\Catalog\Model\GetCategoryByName;
16+
use Magento\TestFramework\Helper\Bootstrap;
17+
use PHPUnit\Framework\TestCase;
18+
19+
/**
20+
* Test for view category block.
21+
*
22+
* @magentoAppArea frontend
23+
* @magentoDbIsolation enabled
24+
*/
25+
class ViewTest extends TestCase
26+
{
27+
/** @var ObjectManagerInterface */
28+
private $objectManager;
29+
30+
/** @var Registry */
31+
private $registry;
32+
33+
/** @var GetCategoryByName */
34+
private $getCategoryByName;
35+
36+
/** @var CategoryRepositoryInterface */
37+
private $categoryRepository;
38+
39+
/** @var LayoutInterface */
40+
private $layout;
41+
42+
/**
43+
* @inheritdoc
44+
*/
45+
protected function setUp(): void
46+
{
47+
parent::setUp();
48+
49+
$this->objectManager = Bootstrap::getObjectManager();
50+
$this->registry = $this->objectManager->get(Registry::class);
51+
$this->getCategoryByName = $this->objectManager->get(GetCategoryByName::class);
52+
$this->categoryRepository = $this->objectManager->get(CategoryRepositoryInterface::class);
53+
$this->layout = $this->objectManager->get(LayoutInterface::class);
54+
}
55+
56+
/**
57+
* @inheritdoc
58+
*/
59+
protected function tearDown(): void
60+
{
61+
$this->registry->unregister('current_category');
62+
63+
parent::tearDown();
64+
}
65+
66+
/**
67+
* @magentoDataFixture Magento/Catalog/_files/category_with_cms_block.php
68+
*
69+
* @return void
70+
*/
71+
public function testCmsBlockDisplayedOnCategory(): void
72+
{
73+
$categoryId = $this->getCategoryByName->execute('Category with cms block')->getId();
74+
$category = $this->categoryRepository->get($categoryId, 1);
75+
$this->registerCategory($category);
76+
$block = $this->layout->createBlock(View::class)->setTemplate('Magento_Catalog::category/cms.phtml');
77+
$this->assertStringContainsString('<h1>Fixture Block Title</h1>', $block->toHtml());
78+
}
79+
80+
/**
81+
* Register category in registry
82+
*
83+
* @param CategoryInterface $category
84+
* @return void
85+
*/
86+
private function registerCategory(CategoryInterface $category): void
87+
{
88+
$this->registry->unregister('current_category');
89+
$this->registry->register('current_category', $category);
90+
}
91+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Catalog\Controller\Adminhtml\Category\Save;
9+
10+
use Magento\Catalog\Api\CategoryRepositoryInterface;
11+
use Magento\Catalog\Api\Data\CategoryInterface;
12+
use Magento\Catalog\Model\Category;
13+
use Magento\Cms\Api\GetBlockByIdentifierInterface;
14+
use Magento\Framework\Exception\NoSuchEntityException;
15+
16+
/**
17+
* Test cases related to save category with enabled category flat.
18+
*
19+
* @magentoAppArea adminhtml
20+
* @magentoDbIsolation disabled
21+
*/
22+
class SaveCategoryTest extends AbstractSaveCategoryTest
23+
{
24+
/** @var CategoryRepositoryInterface */
25+
private $categoryRepository;
26+
27+
/** @var GetBlockByIdentifierInterface */
28+
private $getBlockByIdentifier;
29+
30+
/** @var string */
31+
private $createdCategoryId;
32+
33+
/**
34+
* @inheritdoc
35+
*/
36+
protected function setUp(): void
37+
{
38+
parent::setUp();
39+
40+
$this->categoryRepository = $this->_objectManager->get(CategoryRepositoryInterface::class);
41+
$this->getBlockByIdentifier = $this->_objectManager->get(GetBlockByIdentifierInterface::class);
42+
}
43+
44+
/**
45+
* @inheritdoc
46+
*/
47+
protected function tearDown(): void
48+
{
49+
try {
50+
$this->categoryRepository->deleteByIdentifier($this->createdCategoryId);
51+
} catch (NoSuchEntityException $e) {
52+
//Category already deleted.
53+
}
54+
$this->createdCategoryId = null;
55+
56+
parent::tearDown();
57+
58+
}
59+
60+
/**
61+
* @magentoDataFixture Magento/Cms/_files/block.php
62+
*
63+
* @return void
64+
*/
65+
public function testCreateCategoryWithCmsBlock(): void
66+
{
67+
$blockId = $this->getBlockByIdentifier->execute('fixture_block', 1)->getId();
68+
$postData = [
69+
CategoryInterface::KEY_NAME => 'Category with cms block',
70+
CategoryInterface::KEY_IS_ACTIVE => 1,
71+
CategoryInterface::KEY_INCLUDE_IN_MENU => 1,
72+
'display_mode' => Category::DM_MIXED,
73+
'landing_page' => $blockId,
74+
'available_sort_by' => 1,
75+
'default_sort_by' => 1,
76+
];
77+
$responseData = $this->performSaveCategoryRequest($postData);
78+
$this->assertRequestIsSuccessfullyPerformed($responseData);
79+
$this->createdCategoryId = $responseData['category']['entity_id'];
80+
$category = $this->categoryRepository->get($this->createdCategoryId);
81+
$this->assertEquals($blockId, $category->getLandingPage());
82+
}
83+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Catalog\Api\CategoryRepositoryInterface;
9+
use Magento\Catalog\Api\Data\CategoryInterfaceFactory;
10+
use Magento\Catalog\Model\Category;
11+
use Magento\Cms\Api\GetBlockByIdentifierInterface;
12+
use Magento\Store\Model\Store;
13+
use Magento\Store\Model\StoreManagerInterface;
14+
use Magento\TestFramework\Helper\Bootstrap;
15+
use Magento\Catalog\Helper\DefaultCategory;
16+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
17+
18+
Resolver::getInstance()->requireDataFixture('Magento/Cms/_files/block.php');
19+
20+
$objectManager = Bootstrap::getObjectManager();
21+
/** @var StoreManagerInterface $storeManager */
22+
$storeManager = $objectManager->get(StoreManagerInterface::class);
23+
/** @var CategoryInterfaceFactory $categoryFactory */
24+
$categoryFactory = $objectManager->get(CategoryInterfaceFactory::class);
25+
/** @var CategoryRepositoryInterface $categoryRepository */
26+
$categoryRepository = $objectManager->get(CategoryRepositoryInterface::class);
27+
/** @var DefaultCategory $categoryHelper */
28+
$categoryHelper = $objectManager->get(DefaultCategory::class);
29+
$currentStoreId = (int)$storeManager->getStore()->getId();
30+
/** @var GetBlockByIdentifierInterface $getBlockByIdentifierInterface */
31+
$getBlockByIdentifier = $objectManager->get(GetBlockByIdentifierInterface::class);
32+
$block = $getBlockByIdentifier->execute('fixture_block', $currentStoreId);
33+
34+
$storeManager->setCurrentStore(Store::DEFAULT_STORE_ID);
35+
$category = $categoryFactory->create();
36+
$category->setName('Category with cms block')
37+
->setParentId($categoryHelper->getId())
38+
->setLevel(2)
39+
->setAvailableSortBy('name')
40+
->setDefaultSortBy('name')
41+
->setIsActive(true)
42+
->setPosition(1)
43+
->setDisplayMode(Category::DM_MIXED)
44+
->setLandingPage($block->getId());
45+
$categoryRepository->save($category);
46+
$storeManager->setCurrentStore($currentStoreId);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Catalog\Api\CategoryRepositoryInterface;
9+
use Magento\Framework\Registry;
10+
use Magento\TestFramework\Catalog\Model\GetCategoryByName;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
13+
14+
$objectManager = Bootstrap::getObjectManager();
15+
/** @var Registry $registry */
16+
$registry = $objectManager->get(Registry::class);
17+
/** @var CategoryRepositoryInterface $categoryRepository */
18+
$categoryRepository = $objectManager->get(CategoryRepositoryInterface::class);
19+
/** @var GetCategoryByName $getCategoryByName */
20+
$getCategoryByName = $objectManager->get(GetCategoryByName::class);
21+
$registry->unregister('isSecureArea');
22+
$registry->register('isSecureArea', true);
23+
24+
$category = $getCategoryByName->execute('Category with cms block');
25+
if ($category->getId()) {
26+
$categoryRepository->delete($category);
27+
}
28+
29+
$registry->unregister('isSecureArea');
30+
$registry->register('isSecureArea', false);
31+
32+
Resolver::getInstance()->requireDataFixture('Magento/Cms/_files/block_rollback.php');

0 commit comments

Comments
 (0)