8
8
use Magento \Framework \DB \Adapter \Pdo \Mysql ;
9
9
use Magento \Framework \DB \FieldDataConverter ;
10
10
use Magento \Framework \DB \Select ;
11
+ use Magento \Framework \DB \Select \QueryModifierInterface ;
11
12
use Magento \Framework \DB \Select \InQueryModifier ;
12
- use Magento \Framework \Serialize \Serializer \Serialize ;
13
13
use Magento \TestFramework \Helper \Bootstrap ;
14
+ use Magento \Framework \DB \Query \Generator ;
15
+ use Magento \Framework \DB \Query \BatchIterator ;
16
+ use Magento \Framework \ObjectManagerInterface ;
14
17
15
18
class DataConverterTest extends \PHPUnit_Framework_TestCase
16
19
{
17
- /**
18
- * @var \Magento\Framework\ObjectManagerInterface
19
- */
20
- private $ objectManager ;
21
-
22
20
/**
23
21
* @var InQueryModifier|\PHPUnit_Framework_MockObject_MockObject
24
22
*/
@@ -30,12 +28,12 @@ class DataConverterTest extends \PHPUnit_Framework_TestCase
30
28
private $ dataConverter ;
31
29
32
30
/**
33
- * @var \Magento\Framework\DB\Query\ BatchIterator|\PHPUnit_Framework_MockObject_MockObject
31
+ * @var BatchIterator|\PHPUnit_Framework_MockObject_MockObject
34
32
*/
35
33
private $ iteratorMock ;
36
34
37
35
/**
38
- * @var \Magento\Framework\DB\Query\ Generator|\PHPUnit_Framework_MockObject_MockObject
36
+ * @var Generator|\PHPUnit_Framework_MockObject_MockObject
39
37
*/
40
38
private $ queryGeneratorMock ;
41
39
@@ -54,6 +52,11 @@ class DataConverterTest extends \PHPUnit_Framework_TestCase
54
52
*/
55
53
private $ fieldDataConverter ;
56
54
55
+ /**
56
+ * @var ObjectManagerInterface
57
+ */
58
+ private $ objectManager ;
59
+
57
60
/**
58
61
* Set up before test
59
62
*/
@@ -62,23 +65,24 @@ protected function setUp()
62
65
$ this ->objectManager = Bootstrap::getObjectManager ();
63
66
64
67
/** @var InQueryModifier $queryModifier */
65
- $ this ->queryModifierMock = $ this ->getMockBuilder (Select \ QueryModifierInterface::class)
68
+ $ this ->queryModifierMock = $ this ->getMockBuilder (QueryModifierInterface::class)
66
69
->disableOriginalConstructor ()
67
70
->setMethods (['modify ' ])
68
71
->getMock ();
69
72
70
73
$ this ->dataConverter = $ this ->objectManager ->get (SerializedToJson::class);
71
74
72
- $ this ->iteratorMock = $ this ->getMockBuilder (\ Magento \ Framework \ DB \ Query \ BatchIterator::class)
75
+ $ this ->iteratorMock = $ this ->getMockBuilder (BatchIterator::class)
73
76
->disableOriginalConstructor ()
74
77
->setMethods (['current ' , 'valid ' , 'next ' ])
75
78
->getMock ();
76
79
77
80
$ iterationComplete = false ;
78
81
79
82
// mock valid() call so iterator passes only current() result in foreach invocation
80
- $ this ->iteratorMock ->expects ($ this ->any ())->method ('valid ' )->will (
81
- $ this ->returnCallback (
83
+ $ this ->iteratorMock ->expects ($ this ->any ())
84
+ ->method ('valid ' )
85
+ ->willReturnCallback (
82
86
function () use (&$ iterationComplete ) {
83
87
if (!$ iterationComplete ) {
84
88
$ iterationComplete = true ;
@@ -87,10 +91,9 @@ function () use (&$iterationComplete) {
87
91
return false ;
88
92
}
89
93
}
90
- )
91
- );
94
+ );
92
95
93
- $ this ->queryGeneratorMock = $ this ->getMockBuilder (\ Magento \ Framework \ DB \ Query \ Generator::class)
96
+ $ this ->queryGeneratorMock = $ this ->getMockBuilder (Generator::class)
94
97
->disableOriginalConstructor ()
95
98
->setMethods (['generate ' ])
96
99
->getMock ();
@@ -111,7 +114,7 @@ function () use (&$iterationComplete) {
111
114
112
115
$ this ->adapterMock = $ this ->getMockBuilder (Mysql::class)
113
116
->disableOriginalConstructor ()
114
- ->setMethods (['fetchAll ' , 'quoteInto ' , 'update ' ])
117
+ ->setMethods (['fetchPairs ' , 'quoteInto ' , 'update ' ])
115
118
->getMock ();
116
119
117
120
$ this ->adapterMock ->expects ($ this ->any ())
@@ -129,55 +132,49 @@ function () use (&$iterationComplete) {
129
132
130
133
/**
131
134
* Test that exception with valid text is thrown when data is corrupted
135
+ *
132
136
* @expectedException \Magento\Framework\DB\FieldDataConversionException
133
137
* @expectedExceptionMessage Error converting field `value` in table `table` where `id`=2 using
134
138
*/
135
139
public function testDataConvertErrorReporting ()
136
140
{
137
- /** @var Serialize $serializer */
138
- $ serializer = $ this ->objectManager ->create (Serialize::class);
139
- $ serializedData = $ serializer ->serialize (['some ' => 'data ' , 'other ' => 'other data ' ]);
140
- $ serializedDataLength = strlen ($ serializedData );
141
- $ brokenSerializedData = substr ($ serializedData , 0 , $ serializedDataLength - 6 );
142
141
$ rows = [
143
- [ ' id ' => 1 , ' value ' => 'N; ' ] ,
144
- [ ' id ' => 2 , ' value ' => $ brokenSerializedData ] ,
142
+ 1 => 'N; ' ,
143
+ 2 => ' a:2:{s:3:"foo";s:3:"bar";s:3:"bar";s: ' ,
145
144
];
146
145
147
146
$ this ->adapterMock ->expects ($ this ->any ())
148
- ->method ('fetchAll ' )
147
+ ->method ('fetchPairs ' )
149
148
->with ($ this ->selectByRangeMock )
150
149
->will ($ this ->returnValue ($ rows ));
151
150
152
151
$ this ->adapterMock ->expects ($ this ->once ())
153
152
->method ('update ' )
154
- ->with ('table ' , ['value ' => 'null ' ], ['id = ? ' => 1 ]);
153
+ ->with ('table ' , ['value ' => 'null ' ], ['id IN (?) ' => [ 1 ] ]);
155
154
156
155
$ this ->fieldDataConverter ->convert ($ this ->adapterMock , 'table ' , 'id ' , 'value ' , $ this ->queryModifierMock );
157
156
}
158
157
159
- /**
160
- */
161
158
public function testAlreadyConvertedDataSkipped ()
162
159
{
163
160
$ rows = [
164
- [ ' id ' => 2 , ' value ' => '[] ' ] ,
165
- [ ' id ' => 3 , ' value ' => '{} ' ] ,
166
- [ ' id ' => 4 , ' value ' => 'null ' ] ,
167
- [ ' id ' => 5 , ' value ' => '"" ' ] ,
168
- [ ' id ' => 6 , ' value ' => '0 ' ] ,
169
- [ ' id ' => 7 , ' value ' => 'N; ' ] ,
170
- [ ' id ' => 8 , ' value ' => '{"valid": "json value"} ' ] ,
161
+ 2 => '[] ' ,
162
+ 3 => '{} ' ,
163
+ 4 => 'null ' ,
164
+ 5 => '"" ' ,
165
+ 6 => '0 ' ,
166
+ 7 => 'N; ' ,
167
+ 8 => '{"valid": "json value"} ' ,
171
168
];
172
169
173
170
$ this ->adapterMock ->expects ($ this ->any ())
174
- ->method ('fetchAll ' )
171
+ ->method ('fetchPairs ' )
175
172
->with ($ this ->selectByRangeMock )
176
173
->will ($ this ->returnValue ($ rows ));
177
174
178
175
$ this ->adapterMock ->expects ($ this ->once ())
179
176
->method ('update ' )
180
- ->with ('table ' , ['value ' => 'null ' ], ['id = ? ' => 7 ]);
177
+ ->with ('table ' , ['value ' => 'null ' ], ['id IN (?) ' => [ 7 ] ]);
181
178
182
179
$ this ->fieldDataConverter ->convert ($ this ->adapterMock , 'table ' , 'id ' , 'value ' , $ this ->queryModifierMock );
183
180
}
0 commit comments