Skip to content

Commit f33adf4

Browse files
author
Valeriy Nayda
authored
Merge pull request #92 from magento-engcom/validation
MSI: Fix Validation Exception
2 parents 8103c56 + bfbac37 commit f33adf4

File tree

14 files changed

+240
-117
lines changed

14 files changed

+240
-117
lines changed

app/code/Magento/Inventory/Controller/Adminhtml/Source/Save.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ public function execute()
7777
$this->messageManager->addErrorMessage(__('The Source does not exist.'));
7878
$this->processRedirectAfterFailureSave($resultRedirect);
7979
} catch (ValidationException $e) {
80-
$this->messageManager->addErrorMessage($e->getMessage());
80+
foreach ($e->getErrors() as $localizedError) {
81+
$this->messageManager->addErrorMessage($localizedError->getMessage());
82+
}
8183
$this->processRedirectAfterFailureSave($resultRedirect, $sourceId);
8284
} catch (CouldNotSaveException $e) {
8385
$this->messageManager->addErrorMessage($e->getMessage());

app/code/Magento/Inventory/Controller/Adminhtml/Stock/Save.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ public function execute()
8787
$this->messageManager->addErrorMessage(__('The Stock does not exist.'));
8888
$this->processRedirectAfterFailureSave($resultRedirect);
8989
} catch (ValidationException $e) {
90-
$this->messageManager->addErrorMessage($e->getMessage());
90+
foreach ($e->getErrors() as $localizedError) {
91+
$this->messageManager->addErrorMessage($localizedError->getMessage());
92+
}
9193
$this->processRedirectAfterFailureSave($resultRedirect, $stockId);
9294
} catch (CouldNotSaveException $e) {
9395
$this->messageManager->addErrorMessage($e->getMessage());

app/code/Magento/Inventory/Model/Reservation/ReservationBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public function build(): ReservationInterface
121121

122122
$validationResult = $this->reservationValidator->validate($reservation);
123123
if (!$validationResult->isValid()) {
124-
throw new ValidationException($validationResult);
124+
throw new ValidationException(__('Validation Failed'), null, 0, $validationResult);
125125
}
126126
return $reservation;
127127
}

app/code/Magento/Inventory/Model/Source/Command/Save.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public function execute(SourceInterface $source)
5555
$validationResult = $this->sourceValidator->validate($source);
5656

5757
if (!$validationResult->isValid()) {
58-
throw new ValidationException($validationResult);
58+
throw new ValidationException(__('Validation Failed'), null, 0, $validationResult);
5959
}
6060

6161
try {

app/code/Magento/Inventory/Model/Stock/Command/Save.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function execute(StockInterface $stock)
5454
{
5555
$validationResult = $this->stockValidator->validate($stock);
5656
if (!$validationResult->isValid()) {
57-
throw new ValidationException($validationResult);
57+
throw new ValidationException(__('Validation Failed'), null, 0, $validationResult);
5858
}
5959

6060
try {

app/code/Magento/InventoryApi/Test/Api/SourceRepository/CarrierLinkManagementTest.php

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,14 @@ public function testAssignCarrierLinksIfUseGlobalConfigurationChosen()
117117
];
118118

119119
$expectedErrorData = [
120-
'message' => 'You can\'t configure "%field" because you have chosen Global Shipping configuration.',
121-
'parameters' => [
122-
'field' => SourceInterface::CARRIER_LINKS,
120+
'message' => 'Validation Failed',
121+
'errors' => [
122+
[
123+
'message' => 'You can\'t configure "%field" because you have chosen Global Shipping configuration.',
124+
'parameters' => [
125+
'field' => SourceInterface::CARRIER_LINKS,
126+
],
127+
],
123128
],
124129
];
125130

@@ -128,17 +133,16 @@ public function testAssignCarrierLinksIfUseGlobalConfigurationChosen()
128133
$this->fail('Expected throwing exception');
129134
} catch (\Exception $e) {
130135
if (TESTS_WEB_API_ADAPTER == self::ADAPTER_REST) {
131-
$errorData = $this->processRestExceptionResult($e);
132-
self::assertEquals($expectedErrorData, $errorData);
136+
self::assertEquals($expectedErrorData, $this->processRestExceptionResult($e));
133137
self::assertEquals(Exception::HTTP_BAD_REQUEST, $e->getCode());
134138
} elseif (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
135139
$this->assertInstanceOf('SoapFault', $e);
136-
$this->checkSoapFault(
137-
$e,
138-
$expectedErrorData['message'],
139-
'env:Sender',
140-
$expectedErrorData['parameters']
141-
);
140+
// @see \Magento\TestFramework\TestCase\WebapiAbstract::getActualWrappedErrors()
141+
$expectedWrappedErrors = $expectedErrorData['errors'];
142+
$expectedWrappedErrors[0]['params'] = $expectedWrappedErrors[0]['parameters'];
143+
unset($expectedWrappedErrors[0]['parameters']);
144+
145+
$this->checkSoapFault($e, $expectedErrorData['message'], 'env:Sender', [], $expectedWrappedErrors);
142146
} else {
143147
throw $e;
144148
}

app/code/Magento/InventoryApi/Test/Api/SourceRepository/ValidationTest.php

Lines changed: 86 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,11 @@ public function testCreateWithMissedRequiredFields($field, array $expectedErrorD
5454
$this->fail('Expected throwing exception');
5555
} catch (\Exception $e) {
5656
if (TESTS_WEB_API_ADAPTER == self::ADAPTER_REST) {
57-
$errorData = $this->processRestExceptionResult($e);
58-
self::assertEquals($expectedErrorData['rest_message'], $errorData['message']);
59-
self::assertEquals($expectedErrorData['parameters'], $errorData['parameters']);
57+
self::assertEquals($expectedErrorData['rest'], $this->processRestExceptionResult($e));
6058
self::assertEquals(Exception::HTTP_BAD_REQUEST, $e->getCode());
6159
} elseif (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
6260
$this->assertInstanceOf('SoapFault', $e);
63-
$this->checkSoapFault(
64-
$e,
65-
$expectedErrorData['soap_message'],
66-
'Sender'
67-
);
61+
$this->checkSoapFault($e, $expectedErrorData['soap']['message'], 'Sender');
6862
} else {
6963
throw $e;
7064
}
@@ -80,20 +74,38 @@ public function dataProviderRequiredFields()
8074
'without_' . SourceInterface::NAME => [
8175
SourceInterface::NAME,
8276
[
83-
'rest_message' => '"%field" can not be empty.',
84-
'soap_message' => sprintf('object has no \'%s\' property', SourceInterface::NAME),
85-
'parameters' => [
86-
'field' => SourceInterface::NAME,
77+
'rest' => [
78+
'message' => 'Validation Failed',
79+
'errors' => [
80+
[
81+
'message' => '"%field" can not be empty.',
82+
'parameters' => [
83+
'field' => SourceInterface::NAME,
84+
],
85+
],
86+
],
87+
],
88+
'soap' => [
89+
'message' => 'object has no \'' . SourceInterface::NAME . '\' property',
8790
],
8891
],
8992
],
9093
'without_' . SourceInterface::POSTCODE => [
9194
SourceInterface::POSTCODE,
9295
[
93-
'rest_message' => '"%field" can not be empty.',
94-
'soap_message' => sprintf('object has no \'%s\' property', SourceInterface::POSTCODE),
95-
'parameters' => [
96-
'field' => SourceInterface::POSTCODE,
96+
'rest' => [
97+
'message' => 'Validation Failed',
98+
'errors' => [
99+
[
100+
'message' => '"%field" can not be empty.',
101+
'parameters' => [
102+
'field' => SourceInterface::POSTCODE,
103+
],
104+
],
105+
],
106+
],
107+
'soap' => [
108+
'message' => 'object has no \'' . SourceInterface::POSTCODE . '\' property',
97109
],
98110
],
99111
],
@@ -160,59 +172,89 @@ public function failedValidationDataProvider()
160172
SourceInterface::NAME,
161173
null,
162174
[
163-
'message' => '"%field" can not be empty.',
164-
'parameters' => [
165-
'field' => SourceInterface::NAME,
175+
'message' => 'Validation Failed',
176+
'errors' => [
177+
[
178+
'message' => '"%field" can not be empty.',
179+
'parameters' => [
180+
'field' => SourceInterface::NAME,
181+
],
182+
],
166183
],
167184
],
168185
],
169186
'whitespaces_' . SourceInterface::NAME => [
170187
SourceInterface::NAME,
171188
' ',
172189
[
173-
'message' => '"%field" can not be empty.',
174-
'parameters' => [
175-
'field' => SourceInterface::NAME,
190+
'message' => 'Validation Failed',
191+
'errors' => [
192+
[
193+
'message' => '"%field" can not be empty.',
194+
'parameters' => [
195+
'field' => SourceInterface::NAME,
196+
],
197+
],
176198
],
177199
],
178200
],
179201
'empty_' . SourceInterface::POSTCODE => [
180202
SourceInterface::POSTCODE,
181203
null,
182204
[
183-
'message' => '"%field" can not be empty.',
184-
'parameters' => [
185-
'field' => SourceInterface::POSTCODE,
205+
'message' => 'Validation Failed',
206+
'errors' => [
207+
[
208+
'message' => '"%field" can not be empty.',
209+
'parameters' => [
210+
'field' => SourceInterface::POSTCODE,
211+
],
212+
],
186213
],
187214
],
188215
],
189216
'whitespaces_' . SourceInterface::POSTCODE => [
190217
SourceInterface::POSTCODE,
191218
' ',
192219
[
193-
'message' => '"%field" can not be empty.',
194-
'parameters' => [
195-
'field' => SourceInterface::POSTCODE,
220+
'message' => 'Validation Failed',
221+
'errors' => [
222+
[
223+
'message' => '"%field" can not be empty.',
224+
'parameters' => [
225+
'field' => SourceInterface::POSTCODE,
226+
],
227+
],
196228
],
197229
],
198230
],
199231
'empty_' . SourceInterface::COUNTRY_ID => [
200232
SourceInterface::COUNTRY_ID,
201233
null,
202234
[
203-
'message' => '"%field" can not be empty.',
204-
'parameters' => [
205-
'field' => SourceInterface::COUNTRY_ID,
235+
'message' => 'Validation Failed',
236+
'errors' => [
237+
[
238+
'message' => '"%field" can not be empty.',
239+
'parameters' => [
240+
'field' => SourceInterface::COUNTRY_ID,
241+
],
242+
],
206243
],
207244
],
208245
],
209246
'whitespaces_' . SourceInterface::COUNTRY_ID => [
210247
SourceInterface::COUNTRY_ID,
211248
' ',
212249
[
213-
'message' => '"%field" can not be empty.',
214-
'parameters' => [
215-
'field' => SourceInterface::COUNTRY_ID,
250+
'message' => 'Validation Failed',
251+
'errors' => [
252+
[
253+
'message' => '"%field" can not be empty.',
254+
'parameters' => [
255+
'field' => SourceInterface::COUNTRY_ID,
256+
],
257+
],
216258
],
217259
],
218260
],
@@ -232,17 +274,19 @@ private function webApiCall(array $serviceInfo, array $data, array $expectedErro
232274
$this->fail('Expected throwing exception');
233275
} catch (\Exception $e) {
234276
if (TESTS_WEB_API_ADAPTER == self::ADAPTER_REST) {
235-
$errorData = $this->processRestExceptionResult($e);
236-
self::assertEquals($expectedErrorData, $errorData);
277+
self::assertEquals($expectedErrorData, $this->processRestExceptionResult($e));
237278
self::assertEquals(Exception::HTTP_BAD_REQUEST, $e->getCode());
238279
} elseif (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
239280
$this->assertInstanceOf('SoapFault', $e);
240-
$this->checkSoapFault(
241-
$e,
242-
$expectedErrorData['message'],
243-
'env:Sender',
244-
$expectedErrorData['parameters']
245-
);
281+
$expectedWrappedErrors = [];
282+
foreach ($expectedErrorData['errors'] as $error) {
283+
// @see \Magento\TestFramework\TestCase\WebapiAbstract::getActualWrappedErrors()
284+
$expectedWrappedErrors[] = [
285+
'message' => $error['message'],
286+
'params' => $error['parameters'],
287+
];
288+
}
289+
$this->checkSoapFault($e, $expectedErrorData['message'], 'env:Sender', [], $expectedWrappedErrors);
246290
} else {
247291
throw $e;
248292
}

0 commit comments

Comments
 (0)