Skip to content

Commit 8dcbe34

Browse files
author
larsroettig
committed
[task] magento#115 Refactoring
- Add Documentation - phpcs fixes - Impelement phpunit test for ValidatorChain
1 parent 0e48a30 commit 8dcbe34

File tree

7 files changed

+145
-12
lines changed

7 files changed

+145
-12
lines changed

app/code/Magento/InventoryImportExport/Model/Import/Command/Append.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
namespace Magento\InventoryImportExport\Model\Import\Command;
8+
89
use Magento\InventoryApi\Api\Data\SourceItemInterface;
910
use Magento\InventoryApi\Api\Data\SourceItemInterfaceFactory;
1011
use Magento\InventoryApi\Api\SourceItemsSaveInterface;

app/code/Magento/InventoryImportExport/Model/Import/Command/CommandInterface.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@
77
namespace Magento\InventoryImportExport\Model\Import\Command;
88

99
/**
10+
* It is extension point to implement import/export functionality (Service Provider Interface - SPI)
11+
*
1012
* @api
1113
*/
1214
interface CommandInterface
1315
{
1416
/**
17+
* Executes the current command.
18+
*
1519
* @param array $bunch
1620
* @return void
1721
* @throws CommandException

app/code/Magento/InventoryImportExport/Model/Import/Serializer/Json.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ class Json implements SerializerInterface, LegacyJsonHelperInterface
2222
* Json constructor.
2323
* @param SerializerInterface $serializer
2424
*/
25-
public function __construct(
26-
SerializerInterface $serializer
27-
) {
25+
public function __construct(SerializerInterface $serializer)
26+
{
2827
$this->serializer = $serializer;
2928
}
3029

app/code/Magento/InventoryImportExport/Model/Import/Validator/SourceValidator.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
namespace Magento\InventoryImportExport\Model\Import\Validator;
88

9-
use Magento\Framework\Exception\LocalizedException;
109
use Magento\Framework\Validation\ValidationResultFactory;
1110
use Magento\InventoryApi\Api\SourceRepositoryInterface;
1211
use Magento\InventoryImportExport\Model\Import\Sources;
@@ -63,16 +62,19 @@ public function validate(array $rowData, $rowNumber)
6362
}
6463

6564
/**
65+
* Returns exits already the source in sources.
66+
*
6667
* @param int $sourceId
6768
* @return bool
6869
*/
69-
private function isExistingSource($sourceId)
70+
private function isExistingSource($sourceId): bool
7071
{
7172
return isset($this->sourceIds[$sourceId]);
7273
}
7374

7475
/**
7576
* Loads all existing source ids
77+
*
7678
* @return void
7779
*/
7880
private function loadSourceIds()

app/code/Magento/InventoryImportExport/Model/Import/Validator/ValidatorChain.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
use Magento\Framework\Validation\ValidationResultFactory;
1111

1212
/**
13-
* Extension point for row validation
14-
*
15-
* @api
13+
* @inheritdoc
1614
*/
1715
class ValidatorChain implements ValidatorInterface
1816
{
@@ -52,14 +50,16 @@ public function __construct(
5250
*/
5351
public function validate(array $rowData, $rowNumber)
5452
{
55-
$errors = [];
53+
/* the inner empty array covers cases when no loops were made */
54+
$errors = [[]];
5655
foreach ($this->validators as $validator) {
5756
$validationResult = $validator->validate($rowData, $rowNumber);
5857

5958
if (!$validationResult->isValid()) {
60-
$errors = array_merge($errors, $validationResult->getErrors());
59+
$errors[] = $validationResult->getErrors();
6160
}
6261
}
63-
return $this->validationResultFactory->create(['errors' => $errors]);
62+
63+
return $this->validationResultFactory->create(['errors' => array_merge(...$errors)]);
6464
}
6565
}

app/code/Magento/InventoryImportExport/Model/Import/Validator/ValidatorInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use Magento\Framework\Validation\ValidationResult;
1010

1111
/**
12-
* Extension point for row validation
12+
* Extension point for row validation (Service Provider Interface - SPI)
1313
*
1414
* @api
1515
*/
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Inventory\Test\Unit\Model;
8+
9+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
10+
use Magento\Framework\Validation\ValidationResultFactory;
11+
use Magento\InventoryImportExport\Model\Import\Validator\ValidatorChain;
12+
use Magento\InventoryImportExport\Model\Import\Validator\ValidatorInterface;
13+
use PHPUnit\Framework\TestCase;
14+
15+
class ValidatorChainTest extends TestCase
16+
{
17+
18+
/**
19+
* @var ValidatorInterface|\PHPUnit_Framework_MockObject_MockObject
20+
*/
21+
private $qtyValidator;
22+
23+
/**
24+
* @var ValidatorInterface|\PHPUnit_Framework_MockObject_MockObject
25+
*/
26+
private $skuValidator;
27+
28+
/**
29+
* @var ValidationResultFactory|\PHPUnit_Framework_MockObject_MockObject
30+
*/
31+
private $validationResultFactory;
32+
33+
/**
34+
* @var ValidatorChain
35+
*/
36+
private $validatorChain;
37+
38+
/**
39+
* @inheritdoc
40+
*/
41+
protected function setUp()
42+
{
43+
$this->validationResultFactory = $this->getMockBuilder(ValidationResultFactory::class)->getMock();
44+
$this->qtyValidator = $this->getMockBuilder(ValidatorInterface::class)->getMock();
45+
$this->skuValidator = $this->getMockBuilder(ValidatorInterface::class)->getMock();
46+
}
47+
48+
public function testValidateWithOutValidators()
49+
{
50+
$emptyValidatorResult = $this->createMock(\Magento\Framework\Validation\ValidationResult::class);
51+
$this->validationResultFactory->expects($this->once())
52+
->method('create')
53+
->with(['errors' =>[]])
54+
->willReturn($emptyValidatorResult);
55+
56+
$this->validatorChain = (new ObjectManager($this))->getObject(
57+
ValidatorChain::class,
58+
[
59+
'validationResultFactory' => $this->validationResultFactory,
60+
'validators' => []
61+
]
62+
);
63+
64+
65+
$result = $this->validatorChain->validate([], 1);
66+
$this->assertEquals($emptyValidatorResult, $result);
67+
}
68+
69+
public function testValidateWithOutErros()
70+
{
71+
$emptyValidatorResult = $this->createMock(\Magento\Framework\Validation\ValidationResult::class);
72+
$emptyValidatorResult->expects($this->once())->method('isValid')
73+
->willReturn(true);
74+
75+
$this->validationResultFactory->expects($this->once())
76+
->method('create')
77+
->with(['errors' => []])
78+
->willReturn($emptyValidatorResult);
79+
80+
$this->qtyValidator->method('validate')
81+
->willReturn($emptyValidatorResult);
82+
83+
$this->validatorChain = (new ObjectManager($this))->getObject(
84+
ValidatorChain::class,
85+
[
86+
'validationResultFactory' => $this->validationResultFactory,
87+
'validators' => [$this->qtyValidator]
88+
]
89+
);
90+
91+
$result = $this->validatorChain->validate([], 1);
92+
$this->assertEquals($emptyValidatorResult, $result);
93+
}
94+
95+
96+
public function testValidateWithErros()
97+
{
98+
$validatorResult = $this->createMock(\Magento\Framework\Validation\ValidationResult::class);
99+
100+
$validatorResult->expects($this->once())->method('isValid')
101+
->willReturn(false);
102+
103+
$validatorResult->expects($this->once())
104+
->method('getErrors')
105+
->willReturn(['Qty can not negative', 'Additional error']);
106+
107+
$this->qtyValidator->expects($this->once())->method('validate')
108+
->willReturn($validatorResult);
109+
110+
$this->validationResultFactory->expects($this->once())
111+
->method('create')
112+
->with(['errors' => ['Qty can not negative', 'Additional error']])
113+
->willReturn($validatorResult);
114+
115+
116+
$this->validatorChain = (new ObjectManager($this))->getObject(
117+
ValidatorChain::class,
118+
[
119+
'validationResultFactory' => $this->validationResultFactory,
120+
'validators' => [$this->qtyValidator]
121+
]
122+
);
123+
124+
$result = $this->validatorChain->validate([-1], 1);
125+
$this->assertEquals($validatorResult, $result);
126+
}
127+
}

0 commit comments

Comments
 (0)