Skip to content

Commit 52adc40

Browse files
committed
Merge remote-tracking branch 'nord/NORD-FIXES' into PRS
2 parents 4630390 + f9ba30f commit 52adc40

File tree

6 files changed

+170
-32
lines changed

6 files changed

+170
-32
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
define([], function () {
6+
'use strict';
7+
8+
/**
9+
* Define necessity of using default post code value
10+
*/
11+
var useDefaultPostCode;
12+
13+
return {
14+
/**
15+
* Resolve default post code
16+
*
17+
* @returns {String|null}
18+
*/
19+
resolve: function () {
20+
return useDefaultPostCode ? window.checkoutConfig.defaultPostcode : null;
21+
},
22+
23+
/**
24+
* Set state to useDefaultPostCode variable
25+
*
26+
* @param {Boolean} shouldUseDefaultPostCode
27+
* @returns {underscore}
28+
*/
29+
setUseDefaultPostCode: function (shouldUseDefaultPostCode) {
30+
useDefaultPostCode = shouldUseDefaultPostCode;
31+
32+
return this;
33+
}
34+
};
35+
});

app/code/Magento/Checkout/view/frontend/web/js/model/new-customer-address.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
* @api
77
*/
88
define([
9-
'underscore'
10-
], function (_) {
9+
'underscore',
10+
'Magento_Checkout/js/model/default-post-code-resolver'
11+
], function (_, DefaultPostCodeResolver) {
1112
'use strict';
1213

1314
/**
@@ -35,7 +36,7 @@ define([
3536
company: addressData.company,
3637
telephone: addressData.telephone,
3738
fax: addressData.fax,
38-
postcode: addressData.postcode ? addressData.postcode : window.checkoutConfig.defaultPostcode || undefined,
39+
postcode: addressData.postcode ? addressData.postcode : DefaultPostCodeResolver.resolve(),
3940
city: addressData.city,
4041
firstname: addressData.firstname,
4142
lastname: addressData.lastname,

app/code/Magento/Ui/view/base/web/js/form/element/region.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
define([
1010
'underscore',
1111
'uiRegistry',
12-
'./select'
13-
], function (_, registry, Select) {
12+
'./select',
13+
'Magento_Checkout/js/model/default-post-code-resolver'
14+
], function (_, registry, Select, defaultPostCodeResolver) {
1415
'use strict';
1516

1617
return Select.extend({
@@ -33,8 +34,8 @@ define([
3334
if (!value) {
3435
return;
3536
}
36-
3737
option = options[value];
38+
defaultPostCodeResolver.setUseDefaultPostCode(!option['is_zipcode_optional']);
3839

3940
if (this.skipValidation) {
4041
this.validation['required-entry'] = false;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
define([
6+
'underscore',
7+
'Magento_Checkout/js/model/default-post-code-resolver'
8+
], function (_, DefaultPostCodeResolver) {
9+
'use strict';
10+
11+
describe('checkout/js/model/default-post-code-resolver', function () {
12+
var defaultPostCodeResolver;
13+
14+
beforeEach(function () {
15+
defaultPostCodeResolver = DefaultPostCodeResolver;
16+
window.checkoutConfig = {
17+
defaultPostcode: '19800'
18+
};
19+
});
20+
21+
it('resolve', function () {
22+
expect(defaultPostCodeResolver.resolve()).toBeNull();
23+
});
24+
it('resolve with using default code', function () {
25+
defaultPostCodeResolver.setUseDefaultPostCode(true);
26+
expect(defaultPostCodeResolver.resolve()).toEqual('19800');
27+
});
28+
});
29+
30+
});

lib/internal/Magento/Framework/Locale/Format.php

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,8 @@
55
*/
66
namespace Magento\Framework\Locale;
77

8-
use Magento\Framework\Locale\Bundle\DataBundle;
9-
108
class Format implements \Magento\Framework\Locale\FormatInterface
119
{
12-
/**
13-
* @var string
14-
*/
15-
private static $defaultNumberSet = 'latn';
16-
1710
/**
1811
* @var \Magento\Framework\App\ScopeResolverInterface
1912
*/
@@ -68,7 +61,7 @@ public function getNumber($value)
6861
}
6962

7063
if (!is_string($value)) {
71-
return floatval($value);
64+
return (float)$value;
7265
}
7366

7467
//trim spaces and apostrophes
@@ -79,16 +72,15 @@ public function getNumber($value)
7972

8073
if ($separatorComa !== false && $separatorDot !== false) {
8174
if ($separatorComa > $separatorDot) {
82-
$value = str_replace('.', '', $value);
83-
$value = str_replace(',', '.', $value);
75+
$value = str_replace(['.', ','], ['', '.'], $value);
8476
} else {
8577
$value = str_replace(',', '', $value);
8678
}
8779
} elseif ($separatorComa !== false) {
8880
$value = str_replace(',', '.', $value);
8981
}
9082

91-
return floatval($value);
83+
return (float)$value;
9284
}
9385

9486
/**
@@ -97,8 +89,6 @@ public function getNumber($value)
9789
* @param string $localeCode Locale code.
9890
* @param string $currencyCode Currency code.
9991
* @return array
100-
* @SuppressWarnings(PHPMD.NPathComplexity)
101-
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
10292
*/
10393
public function getPriceFormat($localeCode = null, $currencyCode = null)
10494
{
@@ -108,25 +98,17 @@ public function getPriceFormat($localeCode = null, $currencyCode = null)
10898
} else {
10999
$currency = $this->_scopeResolver->getScope()->getCurrentCurrency();
110100
}
111-
$localeData = (new DataBundle())->get($localeCode);
112-
$defaultSet = $localeData['NumberElements']['default'] ?: self::$defaultNumberSet;
113-
$format = $localeData['NumberElements'][$defaultSet]['patterns']['currencyFormat']
114-
?: ($localeData['NumberElements'][self::$defaultNumberSet]['patterns']['currencyFormat']
115-
?: explode(';', $localeData['NumberPatterns'][1])[0]);
116-
117-
$decimalSymbol = $localeData['NumberElements'][$defaultSet]['symbols']['decimal']
118-
?: ($localeData['NumberElements'][self::$defaultNumberSet]['symbols']['decimal']
119-
?: $localeData['NumberElements'][0]);
120101

121-
$groupSymbol = $localeData['NumberElements'][$defaultSet]['symbols']['group']
122-
?: ($localeData['NumberElements'][self::$defaultNumberSet]['symbols']['group']
123-
?: $localeData['NumberElements'][1]);
102+
$formatter = new \NumberFormatter($localeCode, \NumberFormatter::CURRENCY);
103+
$format = $formatter->getPattern();
104+
$decimalSymbol = $formatter->getSymbol(\NumberFormatter::DECIMAL_SEPARATOR_SYMBOL);
105+
$groupSymbol = $formatter->getSymbol(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL);
124106

125107
$pos = strpos($format, ';');
126108
if ($pos !== false) {
127109
$format = substr($format, 0, $pos);
128110
}
129-
$format = preg_replace("/[^0\#\.,]/", "", $format);
111+
$format = preg_replace("/[^0\#\.,]/", '', $format);
130112
$totalPrecision = 0;
131113
$decimalPoint = strpos($format, '.');
132114
if ($decimalPoint !== false) {
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Locale\Test\Unit;
8+
9+
class FormatTest extends \PHPUnit_Framework_TestCase
10+
{
11+
/**
12+
* @var \Magento\Framework\Locale\Format
13+
*/
14+
protected $formatModel;
15+
16+
/**
17+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Locale\ResolverInterface
18+
*/
19+
protected $localeResolver;
20+
21+
/**
22+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ScopeInterface
23+
*/
24+
protected $scope;
25+
26+
/**
27+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ScopeResolverInterface
28+
*/
29+
protected $scopeResolver;
30+
31+
/**
32+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Directory\Model\Currency
33+
*/
34+
protected $currency;
35+
36+
protected function setUp()
37+
{
38+
$this->currency = $this->getMockBuilder(\Magento\Directory\Model\Currency::class)
39+
->disableOriginalConstructor()
40+
->getMock();
41+
$this->scope = $this->getMockBuilder(\Magento\Framework\App\ScopeInterface::class)
42+
->setMethods(['getCurrentCurrency'])
43+
->getMockForAbstractClass();
44+
$this->scope->expects($this->once())
45+
->method('getCurrentCurrency')
46+
->willReturn($this->currency);
47+
$this->scopeResolver = $this->getMockBuilder(\Magento\Framework\App\ScopeResolverInterface::class)
48+
->setMethods(['getScope'])
49+
->getMockForAbstractClass();
50+
$this->scopeResolver->expects($this->any())
51+
->method('getScope')
52+
->willReturn($this->scope);
53+
$this->localeResolver = $this->getMockBuilder(\Magento\Framework\Locale\ResolverInterface::class)
54+
->getMock();
55+
$currencyFactory = $this->getMockBuilder(\Magento\Directory\Model\CurrencyFactory::class)
56+
->getMock();
57+
58+
$this->formatModel = new \Magento\Framework\Locale\Format(
59+
$this->scopeResolver,
60+
$this->localeResolver,
61+
$currencyFactory
62+
);
63+
}
64+
65+
/**
66+
* @param $localeCode
67+
* @param $expectedResult
68+
* @dataProvider getPriceFormatDataProvider
69+
*/
70+
public function testGetPriceFormat($localeCode, $expectedResult)
71+
{
72+
$result = $this->formatModel->getPriceFormat($localeCode);
73+
$intersection = array_intersect_assoc($result, $expectedResult);
74+
$this->assertCount(count($expectedResult), $intersection);
75+
}
76+
77+
/**
78+
* @return array
79+
*/
80+
public function getPriceFormatDataProvider()
81+
{
82+
return [
83+
['en_US', ['decimalSymbol' => '.', 'groupSymbol' => ',']],
84+
['de_DE', ['decimalSymbol' => ',', 'groupSymbol' => '.']],
85+
['de_CH', ['decimalSymbol' => '.', 'groupSymbol' => '\'']],
86+
['uk_UA', ['decimalSymbol' => ',', 'groupSymbol' => ' ']]
87+
];
88+
}
89+
}

0 commit comments

Comments
 (0)