Skip to content

Commit

Permalink
Merge branch '2.3-develop' of github.com:magento/magento2 into issue-…
Browse files Browse the repository at this point in the history
…22771-remove-hardcoded-height-for-admin-textarea
  • Loading branch information
Serhiy Zhovnir committed May 10, 2019
2 parents b630601 + 72aebb7 commit d592f06
Show file tree
Hide file tree
Showing 138 changed files with 5,119 additions and 150 deletions.
22 changes: 16 additions & 6 deletions app/code/Magento/Catalog/Model/Product/Option/Type/Select.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

/**
* Catalog product option select type
*
* @SuppressWarnings(PHPMD.CookieAndSessionMisuse)
*/
class Select extends \Magento\Catalog\Model\Product\Option\Type\DefaultType
{
Expand All @@ -30,23 +32,35 @@ class Select extends \Magento\Catalog\Model\Product\Option\Type\DefaultType
*/
protected $string;

/**
* @var array
*/
private $singleSelectionTypes;

/**
* @param \Magento\Checkout\Model\Session $checkoutSession
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
* @param \Magento\Framework\Stdlib\StringUtils $string
* @param \Magento\Framework\Escaper $escaper
* @param array $data
* @param array $singleSelectionTypes
*/
public function __construct(
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Framework\Stdlib\StringUtils $string,
\Magento\Framework\Escaper $escaper,
array $data = []
array $data = [],
array $singleSelectionTypes = []
) {
$this->string = $string;
$this->_escaper = $escaper;
parent::__construct($checkoutSession, $scopeConfig, $data);

$this->singleSelectionTypes = $singleSelectionTypes ?: [
'drop_down' => \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DROP_DOWN,
'radio' => \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_RADIO,
];
}

/**
Expand Down Expand Up @@ -310,10 +324,6 @@ public function getOptionSku($optionValue, $skuDelimiter)
*/
protected function _isSingleSelection()
{
$single = [
\Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DROP_DOWN,
\Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_RADIO,
];
return in_array($this->getOption()->getType(), $single);
return in_array($this->getOption()->getType(), $this->singleSelectionTypes, true);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
-->

<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
<actionGroup name="StorefrontAssertProductSpecialPriceOnProductPageActionGroup">
<arguments>
<argument name="product" type="entity"/>
<argument name="specialPrice" type="string"/>
</arguments>
<amOnPage url="{{StorefrontProductPage.url(product.name)}}" stepKey="onFirstProductPage"/>
<waitForPageLoad stepKey="waitForFirstProductPage"/>
<grabTextFrom selector="{{StorefrontProductInfoMainSection.specialPriceValue}}" stepKey="grabProductSpecialPrice"/>
<assertEquals actual="$grabProductSpecialPrice" expectedType="string" expected="{{specialPrice}}" stepKey="assertProductPriceValuesAreEqual"/>
</actionGroup>
</actionGroups>
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@
<see selector="{{StorefrontMessagesSection.success}}" userInput="You added {{productName}} to your shopping cart." stepKey="seeAddToCartSuccessMessage"/>
</actionGroup>

<actionGroup name="AddProductWithQtyToCartFromStorefrontProductPage" extends="addToCartFromStorefrontProductPage">
<arguments>
<argument name="productName" type="string"/>
<argument name="productQty" type="string"/>
</arguments>
<fillField selector="{{StorefrontProductActionSection.quantity}}" userInput="{{productQty}}" stepKey="fillProductQuantity" before="addToCart"/>
</actionGroup>

<!--Verify text length validation hint with multiple inputs-->
<actionGroup name="testDynamicValidationHint">
<arguments>
Expand Down
75 changes: 75 additions & 0 deletions app/code/Magento/Catalog/Test/Mftf/Data/ProductData.xml
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,11 @@
<var key="sku" entityType="product" entityKey="sku" />
<requiredEntity type="product_option">ProductOptionValueDropdown</requiredEntity>
</entity>
<entity name="productWithDropdownAndFieldOptions" type="product">
<var key="sku" entityType="product" entityKey="sku" />
<requiredEntity type="product_option">ProductOptionValueDropdown</requiredEntity>
<requiredEntity type="product_option">ProductOptionField</requiredEntity>
</entity>
<entity name="ProductWithTextFieldAndAreaOptions" type="product">
<var key="sku" entityType="product" entityKey="sku" />
<requiredEntity type="product_option">ProductOptionField</requiredEntity>
Expand Down Expand Up @@ -1069,4 +1074,74 @@
<requiredEntity type="product_extension_attribute">EavStockItem</requiredEntity>
<requiredEntity type="custom_attribute_array">ApiProductDescription</requiredEntity>
</entity>
<entity name="SimpleProductWithSpecialPrice" type="product">
<data key="sku" unique="suffix">SimpleProductWithSpecialPrice</data>
<data key="type_id">simple</data>
<data key="attribute_set_id">4</data>
<data key="name" unique="suffix">SimpleProduct</data>
<data key="price">100.00</data>
<data key="special_price">90.00</data>
<data key="visibility">4</data>
<data key="status">1</data>
<data key="quantity">86</data>
<data key="urlKey" unique="suffix">simpleproduct</data>
<data key="weight">1</data>
<requiredEntity type="product_extension_attribute">EavStockItem</requiredEntity>
<requiredEntity type="custom_attribute_array">CustomAttributeCategoryIds</requiredEntity>
</entity>
<entity name="SimpleProductWithSpecialPriceSecond" type="product">
<data key="sku" unique="suffix">SimpleProductWithSpecialPriceSecond</data>
<data key="type_id">simple</data>
<data key="attribute_set_id">4</data>
<data key="name" unique="suffix">SimpleProduct</data>
<data key="price">150.00</data>
<data key="special_price">110.00</data>
<data key="visibility">4</data>
<data key="status">1</data>
<data key="quantity">86</data>
<data key="urlKey" unique="suffix">simpleproduct</data>
<data key="weight">1</data>
<requiredEntity type="product_extension_attribute">EavStockItem</requiredEntity>
<requiredEntity type="custom_attribute_array">CustomAttributeCategoryIds</requiredEntity>
</entity>
<entity name="SimpleProduct_100" type="product">
<data key="sku" unique="suffix">testSku</data>
<data key="type_id">simple</data>
<data key="attribute_set_id">4</data>
<data key="visibility">4</data>
<data key="name" unique="suffix">testProductName</data>
<data key="price">100.00</data>
<data key="urlKey" unique="suffix">testurlkey</data>
<data key="status">1</data>
<data key="quantity">777</data>
<data key="weight">1</data>
<requiredEntity type="product_extension_attribute">EavStock777</requiredEntity>
<requiredEntity type="custom_attribute_array">CustomAttributeCategoryIds</requiredEntity>
</entity>
<entity name="ApiSimpleOneQty10" type="product2">
<data key="sku" unique="suffix">api-simple-product</data>
<data key="type_id">simple</data>
<data key="attribute_set_id">4</data>
<data key="visibility">4</data>
<data key="name" unique="suffix">Api Simple Product</data>
<data key="price">40.00</data>
<data key="urlKey" unique="suffix">api-simple-product</data>
<data key="status">1</data>
<data key="quantity">10</data>
<requiredEntity type="product_extension_attribute">EavStock10</requiredEntity>
<requiredEntity type="custom_attribute">CustomAttributeProductAttribute</requiredEntity>
</entity>
<entity name="ApiSimpleTwoQty10" type="product2">
<data key="sku" unique="suffix">api-simple-product-two</data>
<data key="type_id">simple</data>
<data key="attribute_set_id">4</data>
<data key="visibility">4</data>
<data key="name" unique="suffix">Api Simple Product Two</data>
<data key="price">40.00</data>
<data key="urlKey" unique="suffix">api-simple-product-two</data>
<data key="status">1</data>
<data key="quantity">10</data>
<requiredEntity type="product_extension_attribute">EavStock10</requiredEntity>
<requiredEntity type="custom_attribute">CustomAttributeProductAttribute</requiredEntity>
</entity>
</entities>
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@
<entity name="EavStock1" type="product_extension_attribute">
<requiredEntity type="stock_item">Qty_1</requiredEntity>
</entity>
<entity name="EavStock777" type="product_extension_attribute">
<requiredEntity type="stock_item">Qty_777</requiredEntity>
</entity>
</entities>
4 changes: 4 additions & 0 deletions app/code/Magento/Catalog/Test/Mftf/Data/StockItemData.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,8 @@
<data key="qty">1</data>
<data key="is_in_stock">true</data>
</entity>
<entity name="Qty_777" type="stock_item">
<data key="qty">777</data>
<data key="is_in_stock">true</data>
</entity>
</entities>
8 changes: 8 additions & 0 deletions app/code/Magento/Catalog/etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1165,4 +1165,12 @@
</argument>
</arguments>
</type>
<type name="Magento\Catalog\Model\Product\Option\Type\Select">
<arguments>
<argument name="singleSelectionTypes" xsi:type="array">
<item name="drop_down" xsi:type="const">Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DROP_DOWN</item>
<item name="radio" xsi:type="const">Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_RADIO</item>
</argument>
</arguments>
</type>
</config>
47 changes: 8 additions & 39 deletions app/code/Magento/CatalogGraphQl/Model/Resolver/Product.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@

namespace Magento\CatalogGraphQl\Model\Resolver;

use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
use Magento\CatalogGraphQl\Model\Resolver\Product\ProductFieldsSelector;
use Magento\CatalogGraphQl\Model\Resolver\Products\DataProvider\Deferred\Product as ProductDataProvider;
use Magento\Framework\GraphQl\Config\Element\Field;
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
use Magento\Framework\GraphQl\Query\FieldTranslator;
use Magento\Framework\GraphQl\Query\Resolver\Value;
use Magento\Framework\GraphQl\Query\Resolver\ValueFactory;
use Magento\Framework\GraphQl\Query\ResolverInterface;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;

/**
* @inheritdoc
Expand All @@ -32,23 +31,23 @@ class Product implements ResolverInterface
private $valueFactory;

/**
* @var FieldTranslator
* @var ProductFieldsSelector
*/
private $fieldTranslator;
private $productFieldsSelector;

/**
* @param ProductDataProvider $productDataProvider
* @param ValueFactory $valueFactory
* @param FieldTranslator $fieldTranslator
* @param ProductFieldsSelector $productFieldsSelector
*/
public function __construct(
ProductDataProvider $productDataProvider,
ValueFactory $valueFactory,
FieldTranslator $fieldTranslator
ProductFieldsSelector $productFieldsSelector
) {
$this->productDataProvider = $productDataProvider;
$this->valueFactory = $valueFactory;
$this->fieldTranslator = $fieldTranslator;
$this->productFieldsSelector = $productFieldsSelector;
}

/**
Expand All @@ -60,7 +59,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
throw new GraphQlInputException(__('No child sku found for product link.'));
}
$this->productDataProvider->addProductSku($value['sku']);
$fields = $this->getProductFields($info);
$fields = $this->productFieldsSelector->getProductFieldsFromInfo($info);
$this->productDataProvider->addEavAttributes($fields);

$result = function () use ($value) {
Expand All @@ -86,34 +85,4 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value

return $this->valueFactory->create($result);
}

/**
* Return field names for all requested product fields.
*
* @param ResolveInfo $info
* @return string[]
*/
private function getProductFields(ResolveInfo $info) : array
{
$fieldNames = [];
foreach ($info->fieldNodes as $node) {
if ($node->name->value !== 'product') {
continue;
}
foreach ($node->selectionSet->selections as $selectionNode) {
if ($selectionNode->kind === 'InlineFragment') {
foreach ($selectionNode->selectionSet->selections as $inlineSelection) {
if ($inlineSelection->kind === 'InlineFragment') {
continue;
}
$fieldNames[] = $this->fieldTranslator->translate($inlineSelection->name->value);
}
continue;
}
$fieldNames[] = $this->fieldTranslator->translate($selectionNode->name->value);
}
}

return $fieldNames;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\CatalogGraphQl\Model\Resolver\Product;

use Magento\Framework\GraphQl\Query\FieldTranslator;
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;

/**
* Select Product Fields From Resolve Info
*/
class ProductFieldsSelector
{
/**
* @var FieldTranslator
*/
private $fieldTranslator;

/**
* @param FieldTranslator $fieldTranslator
*/
public function __construct(FieldTranslator $fieldTranslator)
{
$this->fieldTranslator = $fieldTranslator;
}

/**
* Return field names for all requested product fields.
*
* @param ResolveInfo $info
* @param string $productNodeName
* @return string[]
*/
public function getProductFieldsFromInfo(ResolveInfo $info, string $productNodeName = 'product') : array
{
$fieldNames = [];
foreach ($info->fieldNodes as $node) {
if ($node->name->value !== $productNodeName) {
continue;
}
foreach ($node->selectionSet->selections as $selectionNode) {
if ($selectionNode->kind === 'InlineFragment') {
foreach ($selectionNode->selectionSet->selections as $inlineSelection) {
if ($inlineSelection->kind === 'InlineFragment') {
continue;
}
$fieldNames[] = $this->fieldTranslator->translate($inlineSelection->name->value);
}
continue;
}
$fieldNames[] = $this->fieldTranslator->translate($selectionNode->name->value);
}
}

return $fieldNames;
}
}
15 changes: 15 additions & 0 deletions app/code/Magento/CatalogGraphQl/etc/graphql/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,19 @@
</virtualType>
<preference for="Magento\Framework\Search\Adapter\Mysql\Query\Builder\Match"
type="Magento\CatalogGraphQl\Model\Search\Adapter\Mysql\Query\Builder\Match" />
<type name="Magento\StoreGraphQl\Model\Resolver\Store\StoreConfigDataProvider">
<arguments>
<argument name="extendedConfigData" xsi:type="array">
<item name="product_url_suffix" xsi:type="string">catalog/seo/product_url_suffix</item>
<item name="category_url_suffix" xsi:type="string">catalog/seo/category_url_suffix</item>
<item name="title_separator" xsi:type="string">catalog/seo/title_separator</item>
<item name="list_mode" xsi:type="string">catalog/frontend/list_mode</item>
<item name="grid_per_page_values" xsi:type="string">catalog/frontend/grid_per_page_values</item>
<item name="list_per_page_values" xsi:type="string">catalog/frontend/list_per_page_values</item>
<item name="grid_per_page" xsi:type="string">catalog/frontend/grid_per_page</item>
<item name="list_per_page" xsi:type="string">catalog/frontend/list_per_page</item>
<item name="catalog_default_sort_by" xsi:type="string">catalog/frontend/default_sort_by</item>
</argument>
</arguments>
</type>
</config>
12 changes: 12 additions & 0 deletions app/code/Magento/CatalogGraphQl/etc/schema.graphqls
Original file line number Diff line number Diff line change
Expand Up @@ -401,3 +401,15 @@ type SortFields @doc(description: "SortFields contains a default value for sort
default: String @doc(description: "Default value of sort fields")
options: [SortField] @doc(description: "Available sort fields")
}

type StoreConfig @doc(description: "The type contains information about a store config") {
product_url_suffix : String @doc(description: "Product URL Suffix")
category_url_suffix : String @doc(description: "Category URL Suffix")
title_separator : String @doc(description: "Page Title Separator")
list_mode : String @doc(description: "List Mode")
grid_per_page_values : String @doc(description: "Products per Page on Grid Allowed Values")
list_per_page_values : String @doc(description: "Products per Page on List Allowed Values")
grid_per_page : Int @doc(description: "Products per Page on Grid Default Value")
list_per_page : Int @doc(description: "Products per Page on List Default Value")
catalog_default_sort_by : String @doc(description: "Default Sort By")
}
Loading

0 comments on commit d592f06

Please sign in to comment.