Skip to content

Commit a3bf297

Browse files
committed
32977 Added test
1 parent f724fec commit a3bf297

File tree

3 files changed

+253
-0
lines changed

3 files changed

+253
-0
lines changed
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+
7+
use Magento\Catalog\Api\CategoryLinkManagementInterface;
8+
use Magento\Catalog\Api\Data\ProductCustomOptionInterface;
9+
use Magento\Catalog\Api\Data\ProductCustomOptionInterfaceFactory;
10+
use Magento\Catalog\Api\ProductRepositoryInterface;
11+
use Magento\Catalog\Model\Product;
12+
use Magento\Catalog\Model\Product\Attribute\Source\Status;
13+
use Magento\Catalog\Model\Product\Type;
14+
use Magento\Catalog\Model\Product\Visibility;
15+
use Magento\TestFramework\Helper\Bootstrap;
16+
17+
Bootstrap::getInstance()->reinitialize();
18+
19+
/** @var \Magento\TestFramework\ObjectManager $objectManager */
20+
$objectManager = Bootstrap::getObjectManager();
21+
22+
/** @var CategoryLinkManagementInterface $categoryLinkManagement */
23+
$categoryLinkManagement = $objectManager->create(CategoryLinkManagementInterface::class);
24+
25+
/** @var $product Product */
26+
$product = $objectManager->create(Product::class);
27+
$product->isObjectNew(true);
28+
$product->setTypeId(Type::TYPE_SIMPLE)
29+
->setAttributeSetId(4)
30+
->setWebsiteIds([1])
31+
->setName('Simple Product')
32+
->setSku('simple_with_custom_option_text_area')
33+
->setPrice(10)
34+
->setWeight(1)
35+
->setShortDescription("Short description")
36+
->setTaxClassId(0)
37+
->setDescription('Description with <b>html tag</b>')
38+
->setMetaTitle('meta title')
39+
->setMetaKeyword('meta keyword')
40+
->setMetaDescription('meta description')
41+
->setVisibility(Visibility::VISIBILITY_BOTH)
42+
->setStatus(Status::STATUS_ENABLED)
43+
->setStockData(
44+
[
45+
'use_config_manage_stock' => 1,
46+
'qty' => 100,
47+
'is_qty_decimal' => 0,
48+
'is_in_stock' => 1,
49+
]
50+
)->setCanSaveCustomOptions(true)
51+
->setHasOptions(true);
52+
53+
$oldOptions = [
54+
[
55+
'title' => 'area option',
56+
'type' => 'area',
57+
'is_require' => false,
58+
'sort_order' => 1,
59+
'price' => 20.0,
60+
'price_type' => 'percent',
61+
'sku' => 'sku_test',
62+
'max_characters' => 350
63+
]
64+
];
65+
66+
$options = [];
67+
68+
/** @var ProductCustomOptionInterfaceFactory $customOptionFactory */
69+
$customOptionFactory = $objectManager->create(ProductCustomOptionInterfaceFactory::class);
70+
71+
foreach ($oldOptions as $option) {
72+
/** @var ProductCustomOptionInterface $option */
73+
$option = $customOptionFactory->create(['data' => $option]);
74+
$option->setProductSku($product->getSku());
75+
76+
$options[] = $option;
77+
}
78+
79+
$product->setOptions($options);
80+
81+
/** @var ProductRepositoryInterface $productRepositoryFactory */
82+
$productRepositoryFactory = $objectManager->create(ProductRepositoryInterface::class);
83+
$productRepositoryFactory->save($product);
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
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\Checkout\Block\Cart\Item;
9+
10+
use Magento\Catalog\Api\ProductRepositoryInterface;
11+
use Magento\Catalog\Model\Product;
12+
use Magento\Framework\Api\SearchCriteriaBuilder;
13+
use Magento\Framework\ObjectManagerInterface;
14+
use Magento\Quote\Api\CartRepositoryInterface;
15+
use Magento\Quote\Model\Quote;
16+
use Magento\Quote\Model\Quote\Item;
17+
use PHPUnit\Framework\TestCase;
18+
use Magento\TestFramework\Helper\Bootstrap;
19+
20+
/**
21+
* Class RendererTest
22+
* @package Magento\Checkout\Block\Cart\Item
23+
* @magentoAppArea frontend
24+
*/
25+
class RendererTest extends TestCase
26+
{
27+
/**
28+
* @var ObjectManagerInterface
29+
*/
30+
private $objectManager;
31+
32+
/**
33+
* @var mixed
34+
*/
35+
private $renderer;
36+
37+
/**
38+
* @var mixed
39+
*/
40+
public $productRepository;
41+
42+
/**
43+
* @inheritdoc
44+
*/
45+
protected function setUp(): void
46+
{
47+
$this->objectManager = Bootstrap::getObjectManager();
48+
$this->renderer = $this->objectManager->get(Renderer::class);
49+
$this->productRepository = $this->objectManager->get(ProductRepositoryInterface::class);
50+
}
51+
52+
/**
53+
* Gets quote by reserved order id.
54+
*
55+
* @param string $reservedOrderId
56+
* @return Quote
57+
*/
58+
private function getQuote($reservedOrderId)
59+
{
60+
/** @var SearchCriteriaBuilder $searchCriteriaBuilder */
61+
$searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class);
62+
$searchCriteria = $searchCriteriaBuilder->addFilter('reserved_order_id', $reservedOrderId)
63+
->create();
64+
65+
/** @var CartRepositoryInterface $quoteRepository */
66+
$quoteRepository = $this->objectManager->get(CartRepositoryInterface::class);
67+
68+
/** @var Quote[] $items */
69+
$items = $quoteRepository->getList($searchCriteria)->getItems();
70+
71+
return $items[0];
72+
}
73+
74+
/**
75+
* Gets \Magento\Quote\Model\Quote\Item from \Magento\Quote\Model\Quote by product id
76+
*
77+
* @param Quote $quote
78+
* @param string|int $productId
79+
*
80+
* @return Item|null
81+
*/
82+
private function _getQuoteItemIdByProductId($quote, $productId)
83+
{
84+
/** @var $quoteItems Item[] */
85+
$quoteItems = $quote->getAllItems();
86+
foreach ($quoteItems as $quoteItem) {
87+
if ($productId == $quoteItem->getProductId()) {
88+
return $quoteItem;
89+
}
90+
}
91+
return null;
92+
}
93+
94+
/**
95+
* @magentoDataFixture Magento/Checkout/_files/cart_with_simple_product_and_custom_option_text_area.php
96+
*/
97+
public function testTextAreaCustomOption()
98+
{
99+
$quote = $this->getQuote('test_order_item_with_custom_option_text_area');
100+
101+
/** @var $product Product */
102+
$product = $this->productRepository->get('simple_with_custom_option_text_area');
103+
104+
$quoteItem = $this->_getQuoteItemIdByProductId($quote, $product->getId());
105+
$this->assertNotNull($quoteItem, 'Cannot get quote item for simple product with custom option text area');
106+
107+
$template = 'Magento_Checkout::cart/item/default.phtml';
108+
$this->renderer->setTemplate($template);
109+
$this->renderer->setItem($quoteItem);
110+
111+
$priceBlock = $this->objectManager->create(\Magento\Checkout\Block\Item\Price\Renderer::class);
112+
$this->renderer->getLayout()->setBlock('checkout.item.price.unit', $priceBlock);
113+
$this->renderer->getLayout()->setBlock('checkout.item.price.row', $priceBlock);
114+
$html = $this->renderer->toHtml();
115+
116+
$this->assertMatchesRegularExpression('/Test product simple with
117+
custom option text area
118+
with more 50 characters/', $html);
119+
}
120+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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\Data\ProductCustomOptionInterface;
9+
use Magento\Catalog\Api\ProductRepositoryInterface;
10+
use Magento\Catalog\Model\Product\Option;
11+
use Magento\Checkout\Model\Session;
12+
use Magento\Framework\DataObject;
13+
use Magento\Quote\Model\Quote;
14+
use Magento\TestFramework\Helper\Bootstrap;
15+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
16+
17+
Resolver::getInstance()->requireDataFixture('Magento/Catalog/_files/product_simple_with_custom_option_text_area.php');
18+
19+
/** @var ProductRepositoryInterface $productRepository */
20+
$productRepository = Bootstrap::getObjectManager()
21+
->create(ProductRepositoryInterface::class);
22+
$product = $productRepository->get('simple_with_custom_option_text_area');
23+
24+
$options = [];
25+
/** @var $option Option */
26+
foreach ($product->getOptions() as $option) {
27+
switch ($option->getGroupByType()) {
28+
case ProductCustomOptionInterface::OPTION_GROUP_SELECT:
29+
$value = key($option->getValues());
30+
break;
31+
default:
32+
$value = 'Test product simple with
33+
custom option text area
34+
with more 50 characters';
35+
break;
36+
}
37+
$options[$option->getId()] = $value;
38+
}
39+
40+
$requestInfo = new DataObject(['qty' => 1, 'options' => $options]);
41+
42+
/** @var $cart \Magento\Checkout\Model\Cart */
43+
$quote = Bootstrap::getObjectManager()->create(Quote::class);
44+
$quote->setReservedOrderId('test_order_item_with_custom_option_text_area');
45+
$quote->addProduct($product, $requestInfo);
46+
$quote->save();
47+
48+
/** @var $objectManager \Magento\TestFramework\ObjectManager */
49+
$objectManager = Bootstrap::getObjectManager();
50+
$objectManager->removeSharedInstance(Session::class);

0 commit comments

Comments
 (0)