Skip to content

Commit ca5d13f

Browse files
author
Maksym Aposov
committed
MAGETWO-49595: Category page problems after pull request #367
1 parent fb909a9 commit ca5d13f

File tree

6 files changed

+169
-35
lines changed

6 files changed

+169
-35
lines changed

app/code/Magento/Catalog/Model/Category/DataProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ public function getAttributesMeta(Type $entityType)
251251
$meta[$code]['validation'] = $rules;
252252
}
253253

254-
$meta[$code]['scope_label'] = $this->getScopeLabel($attribute);
254+
$meta[$code]['scopeLabel'] = $this->getScopeLabel($attribute);
255255
$meta[$code]['componentType'] = Field::NAME;
256256
}
257257

app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Eav.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,8 @@ protected function getAttributesMeta(array $attributes, $groupCode)
277277
}
278278

279279
// TODO: getAttributeModel() should not be used when MAGETWO-48284 is complete
280-
if (($rules = $this->eavValidationRules->build($this->getAttributeModel($attribute), $child))) {
280+
$childData = $child['arguments']['data']['config'];
281+
if (($rules = $this->eavValidationRules->build($this->getAttributeModel($attribute), $childData))) {
281282
$child['arguments']['data']['config']['validation'] = $rules;
282283
}
283284

@@ -585,7 +586,6 @@ protected function getValue($attributeCode)
585586
return $product->getData($attributeCode);
586587
}
587588

588-
589589
/**
590590
* Retrieve scope label
591591
*

app/code/Magento/Ui/DataProvider/EavValidationRules.php

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@ class EavValidationRules
1515
/**
1616
* @var array
1717
*/
18-
protected $validationRul = [
19-
'input_validation' => [
20-
'email' => ['validate-email' => true],
21-
'date' => ['validate-date' => true],
22-
],
18+
protected $validationRules = [
19+
'email' => ['validate-email' => true],
20+
'date' => ['validate-date' => true],
2321
];
2422

2523
/**
@@ -31,30 +29,23 @@ class EavValidationRules
3129
*/
3230
public function build(AbstractAttribute $attribute, array $data)
3331
{
34-
$rules = [];
35-
if (!empty($data['arguments']['data']['config']['required'])) {
36-
$rules['required-entry'] = true;
32+
$validation = [];
33+
if (isset($data['required']) && $data['required'] == 1) {
34+
$validation = array_merge($validation, ['required-entry' => true]);
3735
}
3836
if ($attribute->getFrontendInput() === 'price') {
39-
$rules['validate-zero-or-greater'] = true;
37+
$validation = array_merge($validation, ['validate-zero-or-greater' => true]);
4038
}
41-
42-
$validation = $attribute->getValidateRules();
43-
if (!empty($validation)) {
44-
foreach ($validation as $type => $ruleName) {
45-
switch ($type) {
46-
case 'input_validation':
47-
if (isset($this->validationRul[$type][$ruleName])) {
48-
$rules = array_merge($rules, $this->validationRul[$type][$ruleName]);
49-
}
50-
break;
51-
case 'min_text_length':
52-
case 'max_text_length':
53-
$rules = array_merge($rules, [$type => $ruleName]);
54-
break;
55-
}
56-
39+
if ($attribute->getValidateRules()) {
40+
$validation = array_merge($validation, $attribute->getValidateRules());
41+
}
42+
$rules = [];
43+
foreach ($validation as $type => $ruleName) {
44+
$rule = [$type => $ruleName];
45+
if ($type === 'input_validation') {
46+
$rule = isset($this->validationRules[$ruleName]) ? $this->validationRules[$ruleName] : [];
5747
}
48+
$rules = array_merge($rules, $rule);
5849
}
5950

6051
return $rules;
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Ui\Test\Unit\DataProvider;
7+
8+
use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
9+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
10+
use Magento\Ui\DataProvider\EavValidationRules;
11+
12+
/**
13+
* Class EavValidationRulesTest
14+
*/
15+
class EavValidationRulesTest extends \PHPUnit_Framework_TestCase
16+
{
17+
/**
18+
* @var ObjectManager
19+
*/
20+
protected $objectManager;
21+
22+
/**
23+
* @var \Magento\Ui\DataProvider\EavValidationRules
24+
*/
25+
protected $subject;
26+
27+
/**
28+
* @var \Magento\Eav\Model\Entity\Attribute\AbstractAttribute|\PHPUnit_Framework_MockObject_MockObject
29+
*/
30+
protected $attributeMock;
31+
32+
protected function setUp()
33+
{
34+
$this->objectManager = new ObjectManager($this);
35+
$this->attributeMock =
36+
$this->getMockBuilder(AbstractAttribute::class)
37+
->setMethods(['getFrontendInput', 'getValidateRules'])
38+
->disableOriginalConstructor()
39+
->getMockForAbstractClass();
40+
41+
$this->subject = new EavValidationRules();
42+
}
43+
44+
/**
45+
* @param array $data
46+
* @param array $expected
47+
* @dataProvider buildDataProvider
48+
*/
49+
public function testBuild($attributeInputType, $validateRules, $data, $expected)
50+
{
51+
$this->attributeMock->expects($this->once())->method('getFrontendInput')->willReturn($attributeInputType);
52+
$this->attributeMock->expects($this->any())->method('getValidateRules')->willReturn($validateRules);
53+
$validationRules = $this->subject->build($this->attributeMock, $data);
54+
$this->assertEquals($expected, $validationRules);
55+
}
56+
57+
/**
58+
* @return array
59+
*/
60+
public function buildDataProvider()
61+
{
62+
return [
63+
['', '', [], []],
64+
['', null, [], []],
65+
['', false, [], []],
66+
['', [], [], []],
67+
['', '', ['required' => 1], ['required-entry' => true]],
68+
['price', '', [], ['validate-zero-or-greater' => true]],
69+
['price', '', ['required' => 1], ['validate-zero-or-greater' => true, 'required-entry' => true]],
70+
['', ['input_validation' => 'email'], [], ['validate-email' => true]],
71+
['', ['input_validation' => 'date'], [], ['validate-date' => true]],
72+
['', ['input_validation' => 'other'], [], []],
73+
['', ['max_text_length' => '254'], ['required' => 1], ['max_text_length' => 254, 'required-entry' => true]],
74+
['', ['max_text_length' => '254', 'min_text_length' => 1], [],
75+
['max_text_length' => 254, 'min_text_length' => 1]],
76+
['', ['max_text_length' => '254', 'input_validation' => 'date'], [],
77+
['max_text_length' => 254, 'validate-date' => true]],
78+
];
79+
}
80+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Catalog\Model\Category;
7+
8+
use Magento\Catalog\Model\Category\DataProvider;
9+
use Magento\Eav\Model\Config as EavConfig;
10+
use Magento\TestFramework\Helper\Bootstrap;
11+
12+
class DataProviderTest extends \PHPUnit_Framework_TestCase
13+
{
14+
/**
15+
* @var DataProvider
16+
*/
17+
private $dataProvider;
18+
19+
/**
20+
* @var \Magento\Eav\Model\Entity\Type
21+
*/
22+
private $entityType;
23+
24+
/**
25+
* {@inheritDoc}
26+
*/
27+
protected function setUp()
28+
{
29+
parent::setUp();
30+
$objectManager = Bootstrap::getObjectManager();
31+
$this->dataProvider = $objectManager->create(
32+
DataProvider::class,
33+
[
34+
'name' => 'category_form_data_source',
35+
'primaryFieldName' => 'entity_id',
36+
'requestFieldName' => 'id'
37+
]
38+
);
39+
40+
$this->entityType = $objectManager->create(EavConfig::class)->getEntityType('catalog_category');
41+
}
42+
43+
/**
44+
* @return void
45+
*/
46+
public function testGetMetaRequiredAttributes()
47+
{
48+
$requiredAttributes = [
49+
'general' => ['name'],
50+
'display_settings' => ['available_sort_by', 'default_sort_by'],
51+
];
52+
$meta = $this->dataProvider->getMeta();
53+
$this->assertArrayHasKey('url_key', $meta['search_engine_optimization']['children']);
54+
foreach ($requiredAttributes as $scope => $attributes) {
55+
foreach ($attributes as $attribute) {
56+
$this->assertArrayHasKey($attribute, $meta[$scope]['children']);
57+
$data = $meta[$scope]['children'][$attribute];
58+
$this->assertTrue($data['arguments']['data']['config']['validation']['required-entry']);
59+
}
60+
}
61+
}
62+
}

dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Catalog/Block/Adminhtml/Category/Tab/AttributesTest.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,13 @@ protected function setUp()
4646
*/
4747
public function testGetAttributesMeta()
4848
{
49-
$meta = $this->dataProvider->getAttributesMeta($this->entityType);
50-
$this->assertArrayHasKey('url_key', $meta);
51-
$this->assertEquals('text', $meta['url_key']['dataType']);
52-
$this->assertEquals('input', $meta['url_key']['formElement']);
53-
$this->assertEquals('1', $meta['url_key']['visible']);
54-
$this->assertEquals('0', $meta['url_key']['required']);
55-
$this->assertEquals('[STORE VIEW]', $meta['url_key']['scope_label']);
49+
$meta = $this->dataProvider->getMeta();
50+
$this->assertArrayHasKey('url_key', $meta['search_engine_optimization']['children']);
51+
$urlKeyData = $meta['search_engine_optimization']['children']['url_key']['arguments']['data']['config'];
52+
$this->assertEquals('text', $urlKeyData['dataType']);
53+
$this->assertEquals('input', $urlKeyData['formElement']);
54+
$this->assertEquals('1', $urlKeyData['visible']);
55+
$this->assertEquals('0', $urlKeyData['required']);
56+
$this->assertEquals('[STORE VIEW]', $urlKeyData['scopeLabel']);
5657
}
5758
}

0 commit comments

Comments
 (0)