Skip to content

Commit 8a56b29

Browse files
committed
Merge remote-tracking branch 'origin/2.3-develop' into MAGETWO-90301
2 parents 59d8ade + 7532620 commit 8a56b29

File tree

49 files changed

+562
-192
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+562
-192
lines changed

.github/ISSUE_TEMPLATE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828

2929
### Expected result
3030
<!--- Tell us what should happen -->
31-
1. [Screenshot, logs]
31+
1. [Screenshots, logs or description]
3232

3333
### Actual result
3434
<!--- Tell us what happens instead -->
35-
1. [Screenshot, logs]
35+
1. [Screenshots, logs or description]

app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPal/VaultDetailsHandlerTest.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ protected function setUp()
8888

8989
$this->paymentInfoMock = $this->getMockBuilder(Payment::class)
9090
->disableOriginalConstructor()
91-
->setMethods(['__wakeup'])
91+
->setMethods(['__wakeup', 'getExtensionAttributes'])
9292
->getMock();
9393

9494
$this->paymentTokenMock = $objectManager->getObject(PaymentToken::class);
@@ -107,6 +107,10 @@ protected function setUp()
107107
->setMethods(['create'])
108108
->getMock();
109109

110+
$this->paymentInfoMock->expects(self::any())
111+
->method('getExtensionAttributes')
112+
->willReturn($this->paymentExtensionMock);
113+
110114
$this->subject = [
111115
'payment' => $this->paymentDataObjectMock,
112116
];
@@ -184,7 +188,7 @@ public function testHandleWithoutToken()
184188
->method('create');
185189

186190
$this->handler->handle($this->subject, $response);
187-
self::assertNull($this->paymentInfoMock->getExtensionAttributes());
191+
self::assertNotNull($this->paymentInfoMock->getExtensionAttributes());
188192
}
189193

190194
/**

app/code/Magento/Braintree/Test/Unit/Gateway/Response/VaultDetailsHandlerTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,11 @@ protected function setUp()
8080

8181
$this->payment = $this->getMockBuilder(Payment::class)
8282
->disableOriginalConstructor()
83-
->setMethods(['__wakeup'])
83+
->setMethods(['__wakeup', 'getExtensionAttributes'])
8484
->getMock();
8585

86+
$this->payment->expects(self::any())->method('getExtensionAttributes')->willReturn($this->paymentExtension);
87+
8688
$config = $this->getConfigMock();
8789

8890
$this->paymentHandler = new VaultDetailsHandler(

app/code/Magento/Braintree/Test/Unit/Model/Paypal/Helper/QuoteUpdaterTest.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\Braintree\Observer\DataAssignObserver;
1414
use Magento\Braintree\Gateway\Config\PayPal\Config;
1515
use Magento\Braintree\Model\Paypal\Helper\QuoteUpdater;
16+
use Magento\Quote\Api\Data\CartExtensionInterface;
1617

1718
/**
1819
* Class QuoteUpdaterTest
@@ -281,7 +282,7 @@ private function updateQuoteStep(\PHPUnit_Framework_MockObject_MockObject $quote
281282
*/
282283
private function getQuoteMock()
283284
{
284-
return $this->getMockBuilder(Quote::class)
285+
$quoteMock = $this->getMockBuilder(Quote::class)
285286
->setMethods(
286287
[
287288
'getIsVirtual',
@@ -291,9 +292,21 @@ private function getQuoteMock()
291292
'collectTotals',
292293
'getShippingAddress',
293294
'getBillingAddress',
295+
'getExtensionAttributes'
294296
]
295297
)->disableOriginalConstructor()
296298
->getMock();
299+
300+
$cartExtensionMock = $this->getMockBuilder(CartExtensionInterface::class)
301+
->setMethods(['setShippingAssignments'])
302+
->disableOriginalConstructor()
303+
->getMock();
304+
305+
$quoteMock->expects(self::any())
306+
->method('getExtensionAttributes')
307+
->willReturn($cartExtensionMock);
308+
309+
return $quoteMock;
297310
}
298311

299312
/**

app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,22 @@ public function getProductAttributeValue($product, $attribute)
213213
return (string)$value == '' ? __('No') : $value;
214214
}
215215

216+
/**
217+
* Check if any of the products has a value set for the attribute
218+
*
219+
* @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
220+
* @return bool
221+
*/
222+
public function hasAttributeValueForProducts($attribute)
223+
{
224+
foreach ($this->getItems() as $item) {
225+
if ($item->hasData($attribute->getAttributeCode())) {
226+
return true;
227+
}
228+
}
229+
return false;
230+
}
231+
216232
/**
217233
* Retrieve Print URL
218234
*

app/code/Magento/Catalog/Model/Product.php

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2535,13 +2535,7 @@ public function setTypeId($typeId)
25352535
*/
25362536
public function getExtensionAttributes()
25372537
{
2538-
$extensionAttributes = $this->_getExtensionAttributes();
2539-
if (null === $extensionAttributes) {
2540-
/** @var \Magento\Catalog\Api\Data\ProductExtensionInterface $extensionAttributes */
2541-
$extensionAttributes = $this->extensionAttributesFactory->create(ProductInterface::class);
2542-
$this->setExtensionAttributes($extensionAttributes);
2543-
}
2544-
return $extensionAttributes;
2538+
return $this->_getExtensionAttributes();
25452539
}
25462540

25472541
/**

app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1570,7 +1570,7 @@ protected function getEntityPkName(\Magento\Eav\Model\Entity\AbstractEntity $ent
15701570
}
15711571

15721572
/**
1573-
* Add requere tax percent flag for product collection
1573+
* Add require tax percent flag for product collection
15741574
*
15751575
* @return $this
15761576
*/

app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
use Magento\Catalog\Model\CustomOptions\CustomOption;
99
use Magento\Catalog\Model\Webapi\Product\Option\Type\File\Processor as FileProcessor;
10+
use Magento\Framework\Api\ExtensionAttributesFactory;
11+
use Magento\Catalog\Api\Data\CustomOptionExtensionInterface;
1012

1113
class CustomOptionTest extends \PHPUnit\Framework\TestCase
1214
{
@@ -15,6 +17,12 @@ class CustomOptionTest extends \PHPUnit\Framework\TestCase
1517
*/
1618
protected $model;
1719

20+
/** @var \Magento\Framework\Api\ExtensionAttributesFactory | \PHPUnit_Framework_MockObject_MockObject */
21+
private $extensionAttributesFactoryMock;
22+
23+
/** @var \Magento\Catalog\Api\Data\CustomOptionExtensionInterface | \PHPUnit_Framework_MockObject_MockObject */
24+
private $extensionMock;
25+
1826
/**
1927
* @var FileProcessor | \PHPUnit_Framework_MockObject_MockObject
2028
*/
@@ -30,7 +38,7 @@ protected function setUp()
3038
->disableOriginalConstructor()
3139
->getMock();
3240

33-
$extensionAttributesFactory = $this->getMockBuilder(\Magento\Framework\Api\ExtensionAttributesFactory::class)
41+
$this->extensionAttributesFactoryMock = $this->getMockBuilder(ExtensionAttributesFactory::class)
3442
->disableOriginalConstructor()
3543
->getMock();
3644

@@ -52,10 +60,17 @@ protected function setUp()
5260
->disableOriginalConstructor()
5361
->getMock();
5462

63+
$this->extensionMock = $this->getMockBuilder(\Magento\Catalog\Api\Data\CustomOptionExtensionInterface::class)
64+
->setMethods(['getFileInfo'])
65+
->getMockForAbstractClass();
66+
67+
$this->extensionAttributesFactoryMock->expects(self::any())
68+
->method('create')->willReturn($this->extensionMock);
69+
5570
$this->model = new CustomOption(
5671
$context,
5772
$registry,
58-
$extensionAttributesFactory,
73+
$this->extensionAttributesFactoryMock,
5974
$attributeValueFactory,
6075
$this->fileProcessor,
6176
$resource,
@@ -84,14 +99,10 @@ public function testGetOptionValue()
8499

85100
public function testGetOptionValueWithFileInfo()
86101
{
87-
$customOption = $this->getMockBuilder(\Magento\Catalog\Api\Data\CustomOptionExtensionInterface::class)
88-
->setMethods(['getFileInfo'])
89-
->getMockForAbstractClass();
90-
91102
$imageContent = $this->getMockBuilder(\Magento\Framework\Api\Data\ImageContentInterface::class)
92103
->getMockForAbstractClass();
93104

94-
$customOption->expects($this->once())
105+
$this->extensionMock->expects($this->once())
95106
->method('getFileInfo')
96107
->willReturn($imageContent);
97108

@@ -112,7 +123,6 @@ public function testGetOptionValueWithFileInfo()
112123
->with($imageContent)
113124
->willReturn($imageResult);
114125

115-
$this->model->setExtensionAttributes($customOption);
116126
$this->model->setData(\Magento\Catalog\Api\Data\CustomOptionInterface::OPTION_VALUE, 'file');
117127
$this->assertEquals($imageResult, $this->model->getOptionValue());
118128
}

app/code/Magento/Catalog/view/frontend/templates/product/compare/list.phtml

Lines changed: 55 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
/* @var $block \Magento\Catalog\Block\Product\Compare\ListCompare */
1010
?>
11-
<?php $_total = $block->getItems()->getSize() ?>
12-
<?php if ($_total): ?>
11+
<?php $total = $block->getItems()->getSize() ?>
12+
<?php if ($total): ?>
1313
<a href="#" class="action print hidden-print" title="<?= /* @escapeNotVerified */ __('Print This Page') ?>">
1414
<span><?= /* @escapeNotVerified */ __('Print This Page') ?></span>
1515
</a>
@@ -24,14 +24,14 @@
2424
<caption class="table-caption"><?= /* @escapeNotVerified */ __('Compare Products') ?></caption>
2525
<thead>
2626
<tr>
27-
<?php $_i = 0 ?>
28-
<?php foreach ($block->getItems() as $_item): ?>
29-
<?php if ($_i++ == 0): ?>
27+
<?php $index = 0 ?>
28+
<?php foreach ($block->getItems() as $item): ?>
29+
<?php if ($index++ == 0): ?>
3030
<th scope="row" class="cell label remove"><span><?= /* @escapeNotVerified */ __('Remove Product') ?></span></th>
3131
<?php endif; ?>
3232
<td class="cell remove product hidden-print">
3333
<?php $compareHelper = $this->helper('Magento\Catalog\Helper\Product\Compare');?>
34-
<a href="#" data-post='<?= /* @escapeNotVerified */ $compareHelper->getPostDataRemove($_item) ?>'
34+
<a href="#" data-post='<?= /* @escapeNotVerified */ $compareHelper->getPostDataRemove($item) ?>'
3535
class="action delete" title="<?= /* @escapeNotVerified */ __('Remove Product') ?>">
3636
<span><?= /* @escapeNotVerified */ __('Remove Product') ?></span>
3737
</a>
@@ -41,35 +41,35 @@
4141
</thead>
4242
<tbody>
4343
<tr>
44-
<?php $_i = 0; ?>
45-
<?php $_helper = $this->helper('Magento\Catalog\Helper\Output'); ?>
46-
<?php /** @var $_item \Magento\Catalog\Model\Product */ ?>
47-
<?php foreach ($block->getItems() as $_item): ?>
48-
<?php if ($_i++ == 0): ?>
44+
<?php $index = 0; ?>
45+
<?php $helper = $this->helper('Magento\Catalog\Helper\Output'); ?>
46+
<?php /** @var $item \Magento\Catalog\Model\Product */ ?>
47+
<?php foreach ($block->getItems() as $item): ?>
48+
<?php if ($index++ == 0): ?>
4949
<th scope="row" class="cell label product"><span><?= /* @escapeNotVerified */ __('Product') ?></span></th>
5050
<?php endif; ?>
5151
<td data-th="<?= $block->escapeHtml(__('Product')) ?>" class="cell product info">
52-
<a class="product-item-photo" href="<?= /* @escapeNotVerified */ $block->getProductUrl($_item) ?>" title="<?= /* @escapeNotVerified */ $block->stripTags($_item->getName(), null, true) ?>">
53-
<?= $block->getImage($_item, 'product_comparison_list')->toHtml() ?>
52+
<a class="product-item-photo" href="<?= /* @escapeNotVerified */ $block->getProductUrl($item) ?>" title="<?= /* @escapeNotVerified */ $block->stripTags($item->getName(), null, true) ?>">
53+
<?= $block->getImage($item, 'product_comparison_list')->toHtml() ?>
5454
</a>
5555
<strong class="product-item-name">
56-
<a href="<?= /* @escapeNotVerified */ $block->getProductUrl($_item) ?>" title="<?= /* @escapeNotVerified */ $block->stripTags($_item->getName(), null, true) ?>">
57-
<?= /* @escapeNotVerified */ $_helper->productAttribute($_item, $_item->getName(), 'name') ?>
56+
<a href="<?= /* @escapeNotVerified */ $block->getProductUrl($item) ?>" title="<?= /* @escapeNotVerified */ $block->stripTags($item->getName(), null, true) ?>">
57+
<?= /* @escapeNotVerified */ $helper->productAttribute($item, $item->getName(), 'name') ?>
5858
</a>
5959
</strong>
60-
<?= $block->getReviewsSummaryHtml($_item, 'short') ?>
61-
<?= /* @escapeNotVerified */ $block->getProductPrice($_item, '-compare-list-top') ?>
60+
<?= $block->getReviewsSummaryHtml($item, 'short') ?>
61+
<?= /* @escapeNotVerified */ $block->getProductPrice($item, '-compare-list-top') ?>
6262
<div class="product-item-actions hidden-print">
6363
<div class="actions-primary">
64-
<?php if ($_item->isSaleable()): ?>
65-
<form data-role="tocart-form" action="<?= /* @escapeNotVerified */ $this->helper('Magento\Catalog\Helper\Product\Compare')->getAddToCartUrl($_item) ?>" method="post">
64+
<?php if ($item->isSaleable()): ?>
65+
<form data-role="tocart-form" action="<?= /* @escapeNotVerified */ $this->helper('Magento\Catalog\Helper\Product\Compare')->getAddToCartUrl($item) ?>" method="post">
6666
<?= $block->getBlockHtml('formkey') ?>
6767
<button type="submit" class="action tocart primary">
6868
<span><?= /* @escapeNotVerified */ __('Add to Cart') ?></span>
6969
</button>
7070
</form>
7171
<?php else: ?>
72-
<?php if ($_item->getIsSalable()): ?>
72+
<?php if ($item->getIsSalable()): ?>
7373
<div class="stock available"><span><?= /* @escapeNotVerified */ __('In stock') ?></span></div>
7474
<?php else: ?>
7575
<div class="stock unavailable"><span><?= /* @escapeNotVerified */ __('Out of stock') ?></span></div>
@@ -78,7 +78,7 @@
7878
</div>
7979
<?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow()) : ?>
8080
<div class="secondary-addto-links actions-secondary" data-role="add-to-links">
81-
<a href="#" data-post='<?= /* @escapeNotVerified */ $block->getAddToWishlistParams($_item) ?>' class="action towishlist" data-action="add-to-wishlist">
81+
<a href="#" data-post='<?= /* @escapeNotVerified */ $block->getAddToWishlistParams($item) ?>' class="action towishlist" data-action="add-to-wishlist">
8282
<span><?= /* @escapeNotVerified */ __('Add to Wish List') ?></span>
8383
</a>
8484
</div>
@@ -89,39 +89,41 @@
8989
</tr>
9090
</tbody>
9191
<tbody>
92-
<?php foreach ($block->getAttributes() as $_attribute): ?>
93-
<tr>
94-
<?php $_i = 0 ?>
95-
<?php foreach ($block->getItems() as $_item): ?>
96-
<?php if ($_i++ == 0): ?>
97-
<th scope="row" class="cell label">
98-
<span class="attribute label">
99-
<?= $block->escapeHtml($_attribute->getStoreLabel() ? $_attribute->getStoreLabel() : __($_attribute->getFrontendLabel())) ?>
100-
</span>
101-
</th>
102-
<?php endif; ?>
103-
<td class="cell product attribute">
104-
<div class="attribute value">
105-
<?php switch ($_attribute->getAttributeCode()) {
106-
case "price": ?>
107-
<?php
108-
/* @escapeNotVerified */ echo $block->getProductPrice(
109-
$_item,
110-
'-compare-list-' . $_attribute->getCode()
111-
)
112-
?>
113-
<?php break;
114-
case "small_image": ?>
115-
<?php $block->getImage($_item, 'product_small_image')->toHtml(); ?>
92+
<?php foreach ($block->getAttributes() as $attribute): ?>
93+
<?php $index = 0; ?>
94+
<?php if ($block->hasAttributeValueForProducts($attribute)): ?>
95+
<tr>
96+
<?php foreach ($block->getItems() as $item): ?>
97+
<?php if ($index++ == 0): ?>
98+
<th scope="row" class="cell label">
99+
<span class="attribute label">
100+
<?= $block->escapeHtml($attribute->getStoreLabel() ? $attribute->getStoreLabel() : __($attribute->getFrontendLabel())) ?>
101+
</span>
102+
</th>
103+
<?php endif; ?>
104+
<td class="cell product attribute">
105+
<div class="attribute value">
106+
<?php switch ($attribute->getAttributeCode()) {
107+
case "price": ?>
108+
<?php
109+
/* @escapeNotVerified */ echo $block->getProductPrice(
110+
$item,
111+
'-compare-list-' . $attribute->getCode()
112+
)
113+
?>
114+
<?php break;
115+
case "small_image": ?>
116+
<?php $block->getImage($item, 'product_small_image')->toHtml(); ?>
117+
<?php break;
118+
default: ?>
119+
<?= /* @escapeNotVerified */ $helper->productAttribute($item, $block->getProductAttributeValue($item, $attribute), $attribute->getAttributeCode()) ?>
116120
<?php break;
117-
default: ?>
118-
<?= /* @escapeNotVerified */ $_helper->productAttribute($_item, $block->getProductAttributeValue($_item, $_attribute), $_attribute->getAttributeCode()) ?>
119-
<?php break;
120-
} ?>
121-
</div>
122-
</td>
123-
<?php endforeach; ?>
124-
</tr>
121+
} ?>
122+
</div>
123+
</td>
124+
<?php endforeach; ?>
125+
</tr>
126+
<?php endif; ?>
125127
<?php endforeach; ?>
126128
</tbody>
127129
</table>

app/code/Magento/Checkout/Api/Data/PaymentDetailsInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* Interface PaymentDetailsInterface
1010
* @api
1111
*/
12-
interface PaymentDetailsInterface
12+
interface PaymentDetailsInterface extends \Magento\Framework\Api\ExtensibleDataInterface
1313
{
1414
/**#@+
1515
* Constants defined for keys of array, makes typos less likely

0 commit comments

Comments
 (0)