Skip to content

Commit 71b6bfd

Browse files
committed
Merge remote-tracking branch 'mainline/develop' into DRAG-PR
2 parents 165dc27 + 68a91a9 commit 71b6bfd

File tree

32 files changed

+627
-144
lines changed

32 files changed

+627
-144
lines changed

app/code/Magento/Backend/i18n/en_US.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,3 +456,4 @@ Pagination,Pagination
456456
"Anchor Text for Next","Anchor Text for Next"
457457
"Alternative text for the next pages link in the pagination menu. If empty, default arrow image is used.","Alternative text for the next pages link in the pagination menu. If empty, default arrow image is used."
458458
"Theme Name","Theme Name"
459+
"Deployment config file %1 is not writable.","Deployment config file %1 is not writable."

app/code/Magento/Braintree/etc/adminhtml/di.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
</arguments>
2020
</type>
2121

22-
<virtualType name="BraintreeAuthorizeDataBuilder" type="Magento\Payment\Gateway\Request\BuilderComposite">
22+
<virtualType name="BraintreeAuthorizeRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
2323
<arguments>
2424
<argument name="builders" xsi:type="array">
2525
<item name="customer" xsi:type="string">Magento\Braintree\Gateway\Request\CustomerDataBuilder</item>
@@ -30,7 +30,7 @@
3030
</argument>
3131
</arguments>
3232
</virtualType>
33-
<virtualType name="BraintreeVaultAuthorizeDataBuilder" type="Magento\Payment\Gateway\Request\BuilderComposite">
33+
<virtualType name="BraintreeVaultAuthorizeRequest" type="Magento\Payment\Gateway\Request\BuilderComposite">
3434
<arguments>
3535
<argument name="builders" xsi:type="array">
3636
<item name="customer" xsi:type="string">Magento\Braintree\Gateway\Request\CustomerDataBuilder</item>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © 2016 Magento. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
9+
<event name="catalog_product_to_website_change">
10+
<observer name="catalog_product_to_website_change" instance="Magento\CatalogUrlRewrite\Observer\ProductToWebsiteChangeObserver"/>
11+
</event>
12+
</config>

app/code/Magento/Checkout/CustomerData/DefaultItem.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,11 @@ protected function doGetItemData()
7171
'configure_url' => $this->getConfigureUrl(),
7272
'is_visible_in_site_visibility' => $this->item->getProduct()->isVisibleInSiteVisibility(),
7373
'product_name' => $this->item->getProduct()->getName(),
74+
'product_sku' => $this->item->getProduct()->getSku(),
7475
'product_url' => $this->getProductUrl(),
7576
'product_has_url' => $this->hasProductUrl(),
7677
'product_price' => $this->checkoutHelper->formatPrice($this->item->getCalculationPrice()),
78+
'product_price_value' => $this->item->getCalculationPrice(),
7779
'product_image' => [
7880
'src' => $imageHelper->getUrl(),
7981
'alt' => $imageHelper->getLabel(),
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Checkout\Test\Unit\CustomerData;
7+
8+
class DefaultItemTest extends \PHPUnit_Framework_TestCase
9+
{
10+
/**
11+
* @var \Magento\Checkout\CustomerData\DefaultItem
12+
*/
13+
protected $model;
14+
15+
/**
16+
* @var \Magento\Catalog\Helper\Image
17+
*/
18+
private $imageHelper;
19+
20+
/**
21+
* @var \Magento\Catalog\Helper\Product\ConfigurationPool
22+
*/
23+
private $configurationPool;
24+
25+
protected function setUp()
26+
{
27+
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
28+
$this->imageHelper = $this->getMockBuilder(\Magento\Catalog\Helper\Image::class)
29+
->disableOriginalConstructor()
30+
->getMock();
31+
$this->configurationPool = $this->getMockBuilder(\Magento\Catalog\Helper\Product\ConfigurationPool::class)
32+
->setMethods([])
33+
->disableOriginalConstructor()
34+
->getMock();
35+
$checkoutHelper = $this->getMockBuilder(\Magento\Checkout\Helper\Data::class)
36+
->setMethods(['formatPrice'])->disableOriginalConstructor()->getMock();
37+
$checkoutHelper->expects($this->any())->method('formatPrice')->willReturn(5);
38+
$this->model = $objectManager->getObject(
39+
\Magento\Checkout\CustomerData\DefaultItem::class,
40+
[
41+
'imageHelper' => $this->imageHelper,
42+
'configurationPool' => $this->configurationPool,
43+
'checkoutHelper' => $checkoutHelper
44+
]
45+
);
46+
}
47+
48+
public function testGetItemData()
49+
{
50+
$urlModel = $this->getMockBuilder(\Magento\Catalog\Model\Product\Url::class)
51+
->disableOriginalConstructor()
52+
->getMock();
53+
$product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
54+
->setMethods(['getUrlModel', 'isVisibleInSiteVisibility', 'getSku'])
55+
->disableOriginalConstructor()
56+
->getMock();
57+
$product->expects($this->any())->method('getUrlModel')->willReturn($urlModel);
58+
$product->expects($this->any())->method('isVisibleInSiteVisibility')->willReturn(true);
59+
$product->expects($this->any())->method('getSku')->willReturn('simple');
60+
/** @var \Magento\Quote\Model\Quote\Item $item */
61+
$item = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
62+
->setMethods(['getProductType', 'getProduct', 'getCalculationPrice'])
63+
->disableOriginalConstructor()
64+
->getMock();
65+
$item->expects($this->any())->method('getProduct')->willReturn($product);
66+
$item->expects($this->any())->method('getProductType')->willReturn('simple');
67+
$item->expects($this->any())->method('getCalculationPrice')->willReturn(5);
68+
69+
$this->imageHelper->expects($this->any())->method('init')->with($product)->willReturnSelf();
70+
$this->imageHelper->expects($this->any())->method('getUrl')->willReturn('url');
71+
$this->imageHelper->expects($this->any())->method('getLabel')->willReturn('label');
72+
$this->imageHelper->expects($this->any())->method('getWidth')->willReturn(100);
73+
$this->imageHelper->expects($this->any())->method('getHeight')->willReturn(100);
74+
$this->configurationPool->expects($this->any())->method('getByProductType')->willReturn($product);
75+
76+
$itemData = $this->model->getItemData($item);
77+
$this->assertArrayHasKey('options', $itemData);
78+
$this->assertArrayHasKey('qty', $itemData);
79+
$this->assertArrayHasKey('item_id', $itemData);
80+
$this->assertArrayHasKey('configure_url', $itemData);
81+
$this->assertArrayHasKey('is_visible_in_site_visibility', $itemData);
82+
$this->assertArrayHasKey('product_type', $itemData);
83+
$this->assertArrayHasKey('product_name', $itemData);
84+
$this->assertArrayHasKey('product_sku', $itemData);
85+
$this->assertArrayHasKey('product_url', $itemData);
86+
$this->assertArrayHasKey('product_has_url', $itemData);
87+
$this->assertArrayHasKey('product_price', $itemData);
88+
$this->assertArrayHasKey('product_price_value', $itemData);
89+
$this->assertArrayHasKey('product_image', $itemData);
90+
$this->assertArrayHasKey('canApplyMsrp', $itemData);
91+
}
92+
}
93+

app/code/Magento/Checkout/view/frontend/web/template/minicart/item/default.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@
7474
<input data-bind="attr: {
7575
id: 'cart-item-'+item_id+'-qty',
7676
'data-cart-item': item_id,
77-
'data-item-qty': qty
77+
'data-item-qty': qty,
78+
'data-cart-item-id': product_sku
7879
}, value: qty"
7980
type="number"
8081
size="4"

app/code/Magento/PageCache/etc/varnish3.vcl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ sub vcl_recv {
4949
return (pass);
5050
}
5151

52-
# Bypass shopping cart and checkout requests
53-
if (req.url ~ "/checkout") {
52+
# Bypass shopping cart, checkout and search requests
53+
if (req.url ~ "/checkout" || req.url ~ "/catalogsearch") {
5454
return (pass);
5555
}
5656

app/code/Magento/PageCache/etc/varnish4.vcl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ sub vcl_recv {
4141
return (pass);
4242
}
4343

44-
# Bypass shopping cart and checkout requests
45-
if (req.url ~ "/checkout") {
44+
# Bypass shopping cart, checkout and search requests
45+
if (req.url ~ "/checkout" || req.url ~ "/catalogsearch") {
4646
return (pass);
4747
}
4848

@@ -136,6 +136,16 @@ sub vcl_backend_response {
136136
set beresp.grace = 1m;
137137
}
138138
}
139+
140+
# If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass
141+
if (beresp.ttl <= 0s ||
142+
beresp.http.Surrogate-control ~ "no-store" ||
143+
(!beresp.http.Surrogate-Control && beresp.http.Vary == "*")) {
144+
# Mark as Hit-For-Pass for the next 2 minutes
145+
set beresp.ttl = 120s;
146+
set beresp.uncacheable = true;
147+
}
148+
return (deliver);
139149
}
140150

141151
sub vcl_deliver {

app/code/Magento/Quote/Model/Quote/Item/CartItemPersister.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ public function save(CartInterface $quote, CartItemInterface $item)
7171
/** Update item product options */
7272
$item = $quote->updateItem($itemId, $buyRequestData);
7373
} else {
74-
$currentItem->setQty($qty);
74+
if ($item->getQty() !== $currentItem->getQty()) {
75+
$currentItem->setQty($qty);
76+
}
7577
}
7678
} else {
7779
/** add new item to shopping cart */

app/code/Magento/Quote/Model/QuoteRepository/SaveHandler.php

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
*/
66
namespace Magento\Quote\Model\QuoteRepository;
77

8-
use Magento\Framework\App\ObjectManager;
98
use Magento\Quote\Api\Data\CartInterface;
109
use Magento\Framework\Exception\InputException;
11-
use Magento\Framework\Exception\CouldNotSaveException;
1210

1311
class SaveHandler
1412
{
@@ -32,11 +30,6 @@ class SaveHandler
3230
*/
3331
private $shippingAssignmentPersister;
3432

35-
/**
36-
* @var \Magento\Framework\Message\PhraseFactory
37-
*/
38-
private $phraseFactory;
39-
4033
/**
4134
* @param \Magento\Quote\Model\ResourceModel\Quote $quoteResource
4235
* @param \Magento\Quote\Model\Quote\Item\CartItemPersister $cartItemPersister
@@ -77,13 +70,6 @@ public function save(CartInterface $quote)
7770
}
7871
}
7972
}
80-
$errors = $quote->getErrors();
81-
if (!empty($errors)) {
82-
$phraseFactory = $this->getPhraseFactory();
83-
throw new CouldNotSaveException(
84-
$phraseFactory->create('Following errors occurred on save: %1', $errors)
85-
);
86-
}
8773

8874
// Billing Address processing
8975
$billingAddress = $quote->getBillingAddress();
@@ -97,18 +83,6 @@ public function save(CartInterface $quote)
9783
return $quote;
9884
}
9985

100-
/**
101-
* @deprecated
102-
* @return \Magento\Framework\Message\PhraseFactory
103-
*/
104-
private function getPhraseFactory()
105-
{
106-
if (!is_object($this->phraseFactory)) {
107-
$this->phraseFactory = ObjectManager::getInstance()->get(\Magento\Framework\Message\PhraseFactory::class);
108-
}
109-
return $this->phraseFactory;
110-
}
111-
11286
/**
11387
* @param \Magento\Quote\Model\Quote $quote
11488
* @return void

0 commit comments

Comments
 (0)