Skip to content

Commit f6271c0

Browse files
committed
MAGETWO-64802: Implement corrupted data reporting for fieldDataConverter
- custom converters coverage
1 parent d81eb3b commit f6271c0

File tree

3 files changed

+34
-38
lines changed

3 files changed

+34
-38
lines changed

app/code/Magento/Sales/Setup/SerializedDataConverter.php

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,65 +6,37 @@
66

77
namespace Magento\Sales\Setup;
88

9-
use Magento\Framework\Serialize\Serializer\Serialize;
10-
use Magento\Framework\Serialize\Serializer\Json;
9+
use Magento\Framework\DB\DataConverter\DataConversionException;
10+
use Magento\Framework\DB\DataConverter\SerializedToJson;
1111

1212
/**
1313
* Serializer used to update nested serialized data in product_options field.
1414
*/
15-
class SerializedDataConverter implements \Magento\Framework\DB\DataConverter\DataConverterInterface
15+
class SerializedDataConverter extends SerializedToJson
1616
{
17-
/**
18-
* @var Serialize
19-
*/
20-
private $serialize;
21-
22-
/**
23-
* @var Json
24-
*/
25-
private $json;
26-
27-
/**
28-
* SerializedDataConverter constructor.
29-
*
30-
* @param Serialize $serialize
31-
* @param Json $json
32-
*/
33-
public function __construct(
34-
Serialize $serialize,
35-
Json $json
36-
) {
37-
$this->serialize = $serialize;
38-
$this->json = $json;
39-
}
40-
4117
/**
4218
* Convert from serialized to JSON format.
4319
*
4420
* @param string $value
4521
* @return string
22+
*
23+
* @throws DataConversionException
4624
*/
4725
public function convert($value)
4826
{
49-
$valueUnserialized = $this->serialize->unserialize($value);
27+
$valueUnserialized = parent::unserializeValue($value);
5028
if (isset($valueUnserialized['options'])) {
5129
foreach ($valueUnserialized['options'] as $key => $option) {
5230
if ($option['option_type'] === 'file') {
53-
$valueUnserialized['options'][$key]['option_value'] = $this->json->serialize(
54-
$this->serialize->unserialize(
55-
$option['option_value']
56-
)
57-
);
31+
$valueUnserialized['options'][$key]['option_value'] = parent::convert($option['option_value']);
5832
}
5933
}
6034
}
6135
if (isset($valueUnserialized['bundle_selection_attributes'])) {
62-
$valueUnserialized['bundle_selection_attributes'] = $this->json->serialize(
63-
$this->serialize->unserialize(
36+
$valueUnserialized['bundle_selection_attributes'] = parent::convert(
6437
$valueUnserialized['bundle_selection_attributes']
65-
)
6638
);
6739
}
68-
return $this->json->serialize($valueUnserialized);
40+
return parent::encodeJson($valueUnserialized);
6941
}
7042
}

lib/internal/Magento/Framework/DB/DataConverter/SerializedToJson.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,18 @@ public function __construct(
4545
* @throws DataConversionException
4646
*/
4747
public function convert($value)
48+
{
49+
return $this->encodeJson($this->unserializeValue($value));
50+
}
51+
52+
/**
53+
* Unserialize value
54+
*
55+
* @param string $value
56+
* @return mixed
57+
* @throws DataConversionException
58+
*/
59+
protected function unserializeValue($value)
4860
{
4961
try {
5062
if (PHP_MAJOR_VERSION >= 7) {
@@ -59,6 +71,18 @@ public function convert($value)
5971
} catch (\Throwable $throwable) {
6072
throw new DataConversionException($throwable->getMessage());
6173
}
74+
return $value;
75+
}
76+
77+
/**
78+
* Ecode value with json encoder
79+
*
80+
* @param string $value
81+
* @return bool|string
82+
* @throws DataConversionException
83+
*/
84+
protected function encodeJson($value)
85+
{
6286
$value = $this->json->serialize($value);
6387
if (json_last_error()) {
6488
throw new DataConversionException(json_last_error_msg());

lib/internal/Magento/Framework/DB/FieldDataConverter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public function convert(
9191
sprintf(
9292
"Error converting field `%s` in table `%s` where `%s`=%s using %s."
9393
. PHP_EOL
94-
. "Fix data or replace with valid value."
94+
. "Fix data or replace with a valid value."
9595
. PHP_EOL
9696
. "Failure reason: '%s'",
9797
$field,

0 commit comments

Comments
 (0)