Skip to content

Commit 2cc9d29

Browse files
🔃 [Magento Community Engineering] Community Contributions - 2.3-develop
Accepted Community Pull Requests: - #24804: Fixed Issue #24803 (by @drpayyne) - #24790: Add valid mail port validation (by @ravi-chandra3197) - #24773: Resolved Issue 24708 (by @drpayyne) - #24682: #24581 Added unique key on eav_attribute_label table (by @KaushikChavda) - #22293: Fix #12256 #13263 - add Serbian Latin language and change language lists to show script (by @Bartlomiejsz) - #24720: Added unique key on eav_attribute_option_value table (by @UncleTioma) - #24680: Update Magento_BraintreeGraphQl module ReadMe (by @diazwatson) - #24415: Price Indexer Performance Issue With Out of Stock Products (by @brucemead) - #24597: Bugfix/22964 (by @LucasCalazans) Fixed GitHub Issues: - #24803: Inconsistent and Improper Capitalization of Heading (reported by @drpayyne) has been fixed in #24804 by @drpayyne in 2.3-develop branch Related commits: 1. 520d8f1 - #24708: Module Analytics ExportDataHandler.php (reported by @nemke82) has been fixed in #24773 by @drpayyne in 2.3-develop branch Related commits: 1. ece3486 2. 9a96222 - #24581: MIssing unique key on eav_attribute_label table (reported by @tzyganu) has been fixed in #24682 by @KaushikChavda in 2.3-develop branch Related commits: 1. dbf518e 2. 4dbf01c 3. f5638be - #12256: Option to select durring instalation Serbian Latin or Serbian Cyrilic (reported by @quenode) has been fixed in #22293 by @Bartlomiejsz in 2.3-develop branch Related commits: 1. a4f6b3c 2. 1e6a299 3. 29411fe - #13263: In the magenta (all versions) there is no option to choose Serbian-Latin (reported by @danijelkusic) has been fixed in #22293 by @Bartlomiejsz in 2.3-develop branch Related commits: 1. a4f6b3c 2. 1e6a299 3. 29411fe - #24718: MIssing unique key on eav_attribute_option_value table (reported by @tzyganu) has been fixed in #24720 by @UncleTioma in 2.3-develop branch Related commits: 1. 502146f - #24414: Price Indexer Performance Issue With Out of Stock Products (reported by @brucemead) has been fixed in #24415 by @brucemead in 2.3-develop branch Related commits: 1. 7563129 2. 4b1b1dc 3. 6677a49 4. eaa5f74 5. 9c9d286 6. 127e8ac 7. a73b832 - #23460: Region doesn't updates after changing country and leaving region select unselected (reported by @Stepa4man) has been fixed in #24597 by @LucasCalazans in 2.3-develop branch Related commits: 1. 849a267 2. 4122c40 3. 140d591 4. 5d440c5 5. f51fd0b 6. c381ae8
2 parents 419fbf3 + 556d8b2 commit 2cc9d29

File tree

20 files changed

+331
-81
lines changed

20 files changed

+331
-81
lines changed

app/code/Magento/Analytics/Model/ExportDataHandler.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public function __construct(
8989
public function prepareExportData()
9090
{
9191
try {
92-
$tmpDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::SYS_TMP);
92+
$tmpDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
9393

9494
$this->prepareDirectory($tmpDirectory, $this->getTmpFilesDirRelativePath());
9595
$this->reportWriter->write($tmpDirectory, $this->getTmpFilesDirRelativePath());
@@ -157,7 +157,9 @@ private function prepareDirectory(WriteInterface $directory, $path)
157157
private function prepareFileDirectory(WriteInterface $directory, $path)
158158
{
159159
$directory->delete($path);
160+
// phpcs:ignore Magento2.Functions.DiscouragedFunction
160161
if (dirname($path) !== '.') {
162+
// phpcs:ignore Magento2.Functions.DiscouragedFunction
161163
$directory->create(dirname($path));
162164
}
163165

@@ -176,6 +178,7 @@ private function pack($source, $destination)
176178
$this->archive->pack(
177179
$source,
178180
$destination,
181+
// phpcs:ignore Magento2.Functions.DiscouragedFunction
179182
is_dir($source) ?: false
180183
);
181184

app/code/Magento/Analytics/Test/Unit/Model/ExportDataHandlerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
use Magento\Framework\Archive;
1414
use Magento\Framework\Filesystem;
1515
use Magento\Framework\Filesystem\Directory\WriteInterface;
16-
use Magento\Framework\Filesystem\DirectoryList;
16+
use Magento\Framework\App\Filesystem\DirectoryList;
1717
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
1818

1919
class ExportDataHandlerTest extends \PHPUnit\Framework\TestCase
@@ -137,7 +137,7 @@ public function testPrepareExportData($isArchiveSourceDirectory)
137137
$this->filesystemMock
138138
->expects($this->once())
139139
->method('getDirectoryWrite')
140-
->with(DirectoryList::SYS_TMP)
140+
->with(DirectoryList::VAR_DIR)
141141
->willReturn($this->directoryMock);
142142
$this->directoryMock
143143
->expects($this->exactly(4))
@@ -238,7 +238,7 @@ public function testPrepareExportDataWithLocalizedException()
238238
$this->filesystemMock
239239
->expects($this->once())
240240
->method('getDirectoryWrite')
241-
->with(DirectoryList::SYS_TMP)
241+
->with(DirectoryList::VAR_DIR)
242242
->willReturn($this->directoryMock);
243243
$this->reportWriterMock
244244
->expects($this->once())

app/code/Magento/Backend/etc/adminhtml/system.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,8 @@
323323
</field>
324324
<field id="port" translate="label comment" type="text" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
325325
<label>Port (25)</label>
326-
<comment>For Windows server only.</comment>
326+
<validate>validate-digits validate-digits-range digits-range-0-65535</validate>
327+
<comment>Please enter at least 0 and at most 65535 (For Windows server only).</comment>
327328
</field>
328329
<field id="set_return_path" translate="label" type="select" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
329330
<label>Set Return-Path</label>
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
# BraintreeGraphQl
1+
# Magento_BraintreeGraphQl module
22

3-
**BraintreeGraphQl** provides type and resolver for method additional
4-
information.
3+
The Magento_BraintreeGraphQl module provides type and resolver information for the GraphQL module to pass payment information data from the client to Magento.
4+
5+
## Extensibility
6+
7+
Extension developers can interact with the Magento_BraintreeGraphQl module. For more information about the Magento extension mechanism, see [Magento plug-ins](https://devdocs.magento.com/guides/v2.3/extension-dev-guide/plugins.html).
8+
9+
[The Magento dependency injection mechanism](https://devdocs.magento.com/guides/v2.3/extension-dev-guide/depend-inj.html) enables you to override the functionality of the Magento_BraintreeGraphQl module.

app/code/Magento/CatalogInventory/Model/Indexer/ProductPriceIndexFilter.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ public function modifyPrice(IndexTableStructure $priceTable, array $entityIds =
104104
$select->where('stock_item.use_config_manage_stock = 0 AND stock_item.manage_stock = 1');
105105
}
106106

107+
if (!empty($entityIds)) {
108+
$select->where('stock_item.product_id in (?)', $entityIds);
109+
}
110+
107111
$select->group('stock_item.product_id');
108112
$select->having('max_is_in_stock = 0');
109113

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\CatalogInventory\Test\Unit\Model\Indexer;
8+
9+
use Magento\CatalogInventory\Api\StockConfigurationInterface;
10+
use Magento\CatalogInventory\Model\Indexer\ProductPriceIndexFilter;
11+
use Magento\CatalogInventory\Model\ResourceModel\Stock\Item;
12+
use Magento\Framework\App\ResourceConnection;
13+
use Magento\Framework\DB\Query\Generator;
14+
use PHPUnit\Framework\MockObject\MockObject;
15+
use Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\IndexTableStructure;
16+
17+
/**
18+
* Product Price filter test, to ensure that product id's filtered.
19+
*/
20+
class ProductPriceIndexFilterTest extends \PHPUnit\Framework\TestCase
21+
{
22+
23+
/**
24+
* @var MockObject|StockConfigurationInterface $stockConfiguration
25+
*/
26+
private $stockConfiguration;
27+
28+
/**
29+
* @var MockObject|Item $item
30+
*/
31+
private $item;
32+
33+
/**
34+
* @var MockObject|ResourceConnection $resourceCnnection
35+
*/
36+
private $resourceCnnection;
37+
38+
/**
39+
* @var MockObject|Generator $generator
40+
*/
41+
private $generator;
42+
43+
/**
44+
* @var ProductPriceIndexFilter $productPriceIndexFilter
45+
*/
46+
private $productPriceIndexFilter;
47+
48+
/**
49+
* @inheritDoc
50+
*/
51+
protected function setUp()
52+
{
53+
$this->stockConfiguration = $this->createMock(StockConfigurationInterface::class);
54+
$this->item = $this->createMock(Item::class);
55+
$this->resourceCnnection = $this->createMock(ResourceConnection::class);
56+
$this->generator = $this->createMock(Generator::class);
57+
58+
$this->productPriceIndexFilter = new ProductPriceIndexFilter(
59+
$this->stockConfiguration,
60+
$this->item,
61+
$this->resourceCnnection,
62+
'indexer',
63+
$this->generator,
64+
100
65+
);
66+
}
67+
68+
/**
69+
* Test to ensure that Modify Price method uses entityIds,
70+
*/
71+
public function testModifyPrice()
72+
{
73+
$entityIds = [1, 2, 3];
74+
$indexTableStructure = $this->createMock(IndexTableStructure::class);
75+
$connectionMock = $this->createMock(\Magento\Framework\DB\Adapter\AdapterInterface::class);
76+
$this->resourceCnnection->expects($this->once())->method('getConnection')->willReturn($connectionMock);
77+
$selectMock = $this->createMock(\Magento\Framework\DB\Select::class);
78+
$connectionMock->expects($this->once())->method('select')->willReturn($selectMock);
79+
$selectMock->expects($this->at(2))
80+
->method('where')
81+
->with('stock_item.product_id in (?)', $entityIds)
82+
->willReturn($selectMock);
83+
$this->generator->expects($this->once())
84+
->method('generate')
85+
->will(
86+
$this->returnCallback(
87+
$this->getBatchIteratorCallback($selectMock, 5)
88+
)
89+
);
90+
91+
$fetchStmtMock = $this->createPartialMock(\Zend_Db_Statement_Pdo::class, ['fetchAll']);
92+
$fetchStmtMock->expects($this->any())
93+
->method('fetchAll')
94+
->will($this->returnValue([['product_id' => 1]]));
95+
$connectionMock->expects($this->any())->method('query')->will($this->returnValue($fetchStmtMock));
96+
$this->productPriceIndexFilter->modifyPrice($indexTableStructure, $entityIds);
97+
}
98+
99+
/**
100+
* Returns batches.
101+
*
102+
* @param MockObject $selectMock
103+
* @param int $batchCount
104+
* @return \Closure
105+
*/
106+
private function getBatchIteratorCallback(MockObject $selectMock, int $batchCount): \Closure
107+
{
108+
$iteratorCallback = function () use ($batchCount, $selectMock): array {
109+
$result = [];
110+
$count = $batchCount;
111+
while ($count) {
112+
$count--;
113+
$result[$count] = $selectMock;
114+
}
115+
116+
return $result;
117+
};
118+
119+
return $iteratorCallback;
120+
}
121+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="StorefrontRegionUpdatesAfterChangingCountryAndLeavingRegionSelectUnselectedTest">
12+
<annotations>
13+
<features value="Checkout"/>
14+
<stories value="Region updates after changing country "/>
15+
<title value="Region updates after changing country "/>
16+
<description value="Region dupdates after changing country and leaving region select unselected"/>
17+
<severity value="CRITICAL"/>
18+
<testCaseId value="https://github.com/magento/magento2/issues/23460"/>
19+
<group value="checkout"/>
20+
</annotations>
21+
<before>
22+
<createData entity="Simple_US_Customer" stepKey="createCustomer"/>
23+
</before>
24+
<after>
25+
<deleteData createDataKey="createCustomer" stepKey="deleteCustomer"/>
26+
</after>
27+
28+
<!-- Login to storefront from customer -->
29+
<actionGroup ref="LoginToStorefrontActionGroup" stepKey="loginCustomer">
30+
<argument name="Customer" value="$$createCustomer$$"/>
31+
</actionGroup>
32+
33+
<actionGroup ref="StorefrontOpenMyAccountPageActionGroup" stepKey="goToMyAccountPage"/>
34+
35+
<actionGroup ref="StorefrontCustomerGoToSidebarMenu" stepKey="goToAddressBookPage">
36+
<argument name="menu" value="Address Book"/>
37+
</actionGroup>
38+
<actionGroup ref="StoreFrontClickEditDefaultShippingAddressActionGroup" stepKey="clickEditAddress"/>
39+
<selectOption selector="{{StorefrontCustomerAddressFormSection.country}}" userInput="{{updateCustomerFranceAddress.country}}" stepKey="selectCountry"/>
40+
<actionGroup ref="AdminSaveCustomerAddressActionGroup" stepKey="saveAddress"/>
41+
42+
<see selector="{{StorefrontCustomerAddressesSection.defaultShippingAddress}}" userInput="{{updateCustomerFranceAddress.country}}" stepKey="seeAssertCustomerDefaultShippingAddressCountry"/>
43+
</test>
44+
</tests>

app/code/Magento/Checkout/view/frontend/web/js/region-updater.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ define([
162162
this._clearError();
163163
this._checkRegionRequired(country);
164164

165+
$(regionList).find('option:selected').removeAttr('selected');
166+
regionInput.val('');
167+
165168
// Populate state/province dropdown list if available or use input box
166169
if (this.options.regionJson[country]) {
167170
this._removeSelectOptions(regionList);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="StoreFrontClickEditDefaultShippingAddressActionGroup">
12+
<annotations>
13+
<description>Click on the edit default shipping address link.</description>
14+
</annotations>
15+
16+
<click stepKey="ClickEditDefaultShippingAddress" selector="{{StorefrontCustomerAddressesSection.editDefaultShippingAddress}}"/>
17+
<waitForPageLoad stepKey="waitForStorefrontSignInPageLoad"/>
18+
</actionGroup>
19+
</actionGroups>

app/code/Magento/Eav/etc/db_schema.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,10 @@
458458
<constraint xsi:type="foreign" referenceId="EAV_ATTRIBUTE_OPTION_VALUE_STORE_ID_STORE_STORE_ID"
459459
table="eav_attribute_option_value" column="store_id" referenceTable="store"
460460
referenceColumn="store_id" onDelete="CASCADE"/>
461+
<constraint xsi:type="unique" referenceId="EAV_ATTRIBUTE_OPTION_VALUE_STORE_ID_OPTION_ID">
462+
<column name="store_id"/>
463+
<column name="option_id"/>
464+
</constraint>
461465
<index referenceId="EAV_ATTRIBUTE_OPTION_VALUE_OPTION_ID" indexType="btree">
462466
<column name="option_id"/>
463467
</index>
@@ -481,6 +485,10 @@
481485
referenceColumn="attribute_id" onDelete="CASCADE"/>
482486
<constraint xsi:type="foreign" referenceId="EAV_ATTRIBUTE_LABEL_STORE_ID_STORE_STORE_ID" table="eav_attribute_label"
483487
column="store_id" referenceTable="store" referenceColumn="store_id" onDelete="CASCADE"/>
488+
<constraint xsi:type="unique" referenceId="EAV_ATTRIBUTE_LABEL_ATTRIBUTE_ID_STORE_ID_UNIQUE">
489+
<column name="store_id"/>
490+
<column name="attribute_id"/>
491+
</constraint>
484492
<index referenceId="EAV_ATTRIBUTE_LABEL_STORE_ID" indexType="btree">
485493
<column name="store_id"/>
486494
</index>

0 commit comments

Comments
 (0)