1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Test\Unit\DB;
use Magento\Framework\DB\Adapter\AdapterInterface;
use Magento\Framework\DB\AggregatedFieldDataConverter;
use Magento\Framework\DB\FieldDataConverter;
use Magento\Framework\DB\FieldDataConverterFactory;
use Magento\Framework\DB\FieldToConvert;
use Magento\Framework\DB\Select\QueryModifierInterface;
class AggregatedFieldDataConverterTest extends \PHPUnit\Framework\TestCase
{
public function testConvert()
{
$connection = $this->getMockBuilder(AdapterInterface::class)->getMock();
$queryModifier = $this->getMockBuilder(QueryModifierInterface::class)->getMock();
$fields = [
new FieldToConvert(
'ClassOne',
'table_1',
'id_1',
'field_1'
),
new FieldToConvert(
'ClassTwo',
'table_2',
'id_2',
'field_2',
$queryModifier
),
];
$fieldConverterOne = $this->getMockBuilder(FieldDataConverter::class)
->disableOriginalConstructor()
->getMock();
$fieldConverterTwo = clone $fieldConverterOne;
$fieldConverterFactory = $this->createFieldConverterFactory(
[
['ClassOne', $fieldConverterOne],
['ClassTwo', $fieldConverterTwo],
]
);
$this->assertCallsDelegation($connection, $fieldConverterOne, $fieldConverterTwo, $queryModifier);
$object = new AggregatedFieldDataConverter($fieldConverterFactory);
$object->convert($fields, $connection);
}
/**
* @param array $returnValuesMap
* @return \PHPUnit_Framework_MockObject_MockObject
*/
private function createFieldConverterFactory(array $returnValuesMap)
{
$fieldConverterFactory = $this->getMockBuilder(FieldDataConverterFactory::class)
->disableOriginalConstructor()
->getMock();
$fieldConverterFactory->expects($this->any())
->method('create')
->willReturnMap($returnValuesMap);
return $fieldConverterFactory;
}
/**
* Assert that correct methods with correct arguments are called during delegation of the action
*
* @param $connection
* @param \PHPUnit_Framework_MockObject_MockObject $fieldConverterOne
* @param \PHPUnit_Framework_MockObject_MockObject $fieldConverterTwo
* @param $queryModifier
*/
private function assertCallsDelegation(
$connection,
\PHPUnit_Framework_MockObject_MockObject $fieldConverterOne,
\PHPUnit_Framework_MockObject_MockObject $fieldConverterTwo,
$queryModifier
) {
$fieldConverterOne->expects($this->once())
->method('convert')
->with($connection, 'table_1', 'id_1', 'field_1', null);
$fieldConverterTwo->expects($this->once())
->method('convert')
->with($connection, 'table_2', 'id_2', 'field_2', $queryModifier);
}
}