Skip to content

Commit 304c734

Browse files
authored
Merge pull request #1522 from magento-engcom/2.2-develop-prs
[EngCom] Public Pull Requests2.2
2 parents e442de5 + 8bed40a commit 304c734

File tree

3 files changed

+53
-18
lines changed

3 files changed

+53
-18
lines changed

app/code/Magento/Customer/Block/Widget/Dob.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,17 @@ public function getHtmlId()
208208
*/
209209
public function getHtmlExtraParams()
210210
{
211-
$extraParams = [
212-
"'validate-date-au':true"
213-
];
211+
$validators = [];
214212

215213
if ($this->isRequired()) {
216-
$extraParams[] = 'required:true';
214+
$validators['required'] = true;
217215
}
218216

219-
$extraParams = implode(', ', $extraParams);
217+
$validators['validate-date'] = [
218+
'dateFormat' => $this->getDateFormat()
219+
];
220220

221-
return 'data-validate="{' . $extraParams . '}"';
221+
return 'data-validate="' . $this->_escaper->escapeHtml(json_encode($validators)) . '"';
222222
}
223223

224224
/**

app/code/Magento/Customer/Test/Unit/Block/Widget/DobTest.php

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ class DobTest extends \PHPUnit\Framework\TestCase
5959
*/
6060
protected $filterFactory;
6161

62+
/**
63+
* @var \Magento\Framework\Escaper
64+
*/
65+
private $escaper;
66+
67+
/**
68+
* @var \Magento\Framework\View\Element\Template\Context
69+
*/
70+
private $context;
71+
6272
protected function setUp()
6373
{
6474
$zendCacheCore = new \Zend_Cache_Core();
@@ -84,8 +94,14 @@ protected function setUp()
8494
['localeResolver' => $localeResolver]
8595
);
8696

87-
$context = $this->createMock(\Magento\Framework\View\Element\Template\Context::class);
88-
$context->expects($this->any())->method('getLocaleDate')->will($this->returnValue($timezone));
97+
$this->context = $this->createMock(\Magento\Framework\View\Element\Template\Context::class);
98+
$this->context->expects($this->any())->method('getLocaleDate')->will($this->returnValue($timezone));
99+
100+
$this->escaper = $this->getMockBuilder(\Magento\Framework\Escaper::class)
101+
->disableOriginalConstructor()
102+
->setMethods(['escapeHtml'])
103+
->getMock();
104+
$this->context->expects($this->any())->method('getEscaper')->will($this->returnValue($this->escaper));
89105

90106
$this->attribute = $this->getMockBuilder(\Magento\Customer\Api\Data\AttributeMetadataInterface::class)
91107
->getMockForAbstractClass();
@@ -102,7 +118,7 @@ protected function setUp()
102118
->getMock();
103119

104120
$this->_block = new \Magento\Customer\Block\Widget\Dob(
105-
$context,
121+
$this->context,
106122
$this->createMock(\Magento\Customer\Helper\Address::class),
107123
$this->customerMetadata,
108124
$this->createMock(\Magento\Framework\View\Element\Html\Date::class),
@@ -465,22 +481,40 @@ public function testGetMaxDateRangeWithException()
465481
$this->assertNull($this->_block->getMaxDateRange());
466482
}
467483

468-
public function testGetHtmlExtraParamsWithoutRequiredOption() {
484+
public function testGetHtmlExtraParamsWithoutRequiredOption()
485+
{
486+
$this->escaper->expects($this->any())
487+
->method('escapeHtml')
488+
->with('{"validate-date":{"dateFormat":"M\/d\/yy"}}')
489+
->will($this->returnValue('{"validate-date":{"dateFormat":"M\/d\/yy"}}'));
490+
469491
$this->attribute->expects($this->once())
470492
->method("isRequired")
471493
->willReturn(false);
472494

473-
$this->assertEquals($this->_block->getHtmlExtraParams(), 'data-validate="{\'validate-date-au\':true}"');
495+
$this->assertEquals(
496+
$this->_block->getHtmlExtraParams(),
497+
'data-validate="{"validate-date":{"dateFormat":"M\/d\/yy"}}"'
498+
);
474499
}
475500

476-
public function testGetHtmlExtraParamsWithRequiredOption() {
501+
public function testGetHtmlExtraParamsWithRequiredOption()
502+
{
477503
$this->attribute->expects($this->once())
478504
->method("isRequired")
479505
->willReturn(true);
480506

507+
$this->escaper->expects($this->any())
508+
->method('escapeHtml')
509+
->with('{"required":true,"validate-date":{"dateFormat":"M\/d\/yy"}}')
510+
->will($this->returnValue('{"required":true,"validate-date":{"dateFormat":"M\/d\/yy"}}'));
511+
512+
513+
$this->context->expects($this->any())->method('getEscaper')->will($this->returnValue($this->escaper));
514+
481515
$this->assertEquals(
482-
$this->_block->getHtmlExtraParams(),
483-
'data-validate="{\'validate-date-au\':true, required:true}"'
516+
'data-validate="{"required":true,"validate-date":{"dateFormat":"M\/d\/yy"}}"',
517+
$this->_block->getHtmlExtraParams()
484518
);
485519
}
486520
}

lib/web/mage/validation.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99
if (typeof define === 'function' && define.amd) {
1010
define([
1111
'jquery',
12+
'moment',
1213
'jquery/ui',
1314
'jquery/validate',
1415
'mage/translate'
1516
], factory);
1617
} else {
1718
factory(jQuery);
1819
}
19-
}(function ($) {
20+
}(function ($, moment) {
2021
'use strict';
2122

2223
var creditCartTypes, rules, showLabel, originValidateDelegate;
@@ -966,10 +967,10 @@
966967
$.mage.__('Please use only letters (a-z or A-Z) or numbers (0-9) in this field. No spaces or other characters are allowed.') //eslint-disable-line max-len
967968
],
968969
'validate-date': [
969-
function (v) {
970-
var test = new Date(v);
970+
function (value, params, additionalParams) {
971+
var test = moment(value, additionalParams.dateFormat);
971972

972-
return $.mage.isEmptyNoTrim(v) || !isNaN(test);
973+
return $.mage.isEmptyNoTrim(value) || test.isValid();
973974
},
974975
$.mage.__('Please enter a valid date.')
975976

0 commit comments

Comments
 (0)