Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
JoinAssemblerTest.php
Go to the documentation of this file.
1 <?php
7 
9 
13 class JoinAssemblerTest extends \PHPUnit\Framework\TestCase
14 {
18  private $subject;
19 
23  private $nameResolverMock;
24 
28  private $selectBuilderMock;
29 
33  private $objectManagerHelper;
34 
38  private $columnsResolverMock;
39 
43  private $conditionResolverMock;
44 
48  private $resourceConnection;
49 
53  protected function setUp()
54  {
55  $this->nameResolverMock = $this->getMockBuilder(
56  \Magento\Analytics\ReportXml\DB\NameResolver::class
57  )
58  ->disableOriginalConstructor()
59  ->getMock();
60 
61  $this->selectBuilderMock = $this->getMockBuilder(
62  \Magento\Analytics\ReportXml\DB\SelectBuilder::class
63  )
64  ->disableOriginalConstructor()
65  ->getMock();
66  $this->selectBuilderMock->expects($this->any())
67  ->method('getFilters')
68  ->willReturn([]);
69  $this->selectBuilderMock->expects($this->any())
70  ->method('getColumns')
71  ->willReturn([]);
72  $this->selectBuilderMock->expects($this->any())
73  ->method('getJoins')
74  ->willReturn([]);
75 
76  $this->columnsResolverMock = $this->getMockBuilder(
77  \Magento\Analytics\ReportXml\DB\ColumnsResolver::class
78  )
79  ->disableOriginalConstructor()
80  ->getMock();
81 
82  $this->conditionResolverMock = $this->getMockBuilder(
83  \Magento\Analytics\ReportXml\DB\ConditionResolver::class
84  )
85  ->disableOriginalConstructor()
86  ->getMock();
87 
88  $this->resourceConnection = $this->getMockBuilder(ResourceConnection::class)
89  ->disableOriginalConstructor()
90  ->getMock();
91 
92  $this->objectManagerHelper =
93  new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
94 
95  $this->subject = $this->objectManagerHelper->getObject(
96  \Magento\Analytics\ReportXml\DB\Assembler\JoinAssembler::class,
97  [
98  'conditionResolver' => $this->conditionResolverMock,
99  'nameResolver' => $this->nameResolverMock,
100  'columnsResolver' => $this->columnsResolverMock,
101  'resourceConnection' => $this->resourceConnection,
102  ]
103  );
104  }
105 
109  public function testAssembleEmpty()
110  {
111  $queryConfigMock = [
112  'source' => [
113  'name' => 'sales_order',
114  'alias' => 'sales'
115  ]
116  ];
117 
118  $this->selectBuilderMock->expects($this->never())
119  ->method('setColumns');
120  $this->selectBuilderMock->expects($this->never())
121  ->method('setFilters');
122  $this->selectBuilderMock->expects($this->never())
123  ->method('setJoins');
124 
125  $this->assertEquals(
126  $this->selectBuilderMock,
127  $this->subject->assemble($this->selectBuilderMock, $queryConfigMock)
128  );
129  }
130 
138  public function testAssembleNotEmpty(array $queryConfigMock, array $joinsMock, array $tablesMapping)
139  {
140  $filtersMock = [];
141 
142  $this->nameResolverMock->expects($this->at(0))
143  ->method('getAlias')
144  ->with($queryConfigMock['source'])
145  ->willReturn($queryConfigMock['source']['alias']);
146  $this->nameResolverMock->expects($this->at(1))
147  ->method('getAlias')
148  ->with($queryConfigMock['source']['link-source'][0])
149  ->willReturn($queryConfigMock['source']['link-source'][0]['alias']);
150  $this->nameResolverMock->expects($this->once())
151  ->method('getName')
152  ->with($queryConfigMock['source']['link-source'][0])
153  ->willReturn($queryConfigMock['source']['link-source'][0]['name']);
154 
155  $this->resourceConnection
156  ->expects($this->any())
157  ->method('getTableName')
158  ->willReturnOnConsecutiveCalls(...array_values($tablesMapping));
159 
160  $this->conditionResolverMock->expects($this->at(0))
161  ->method('getFilter')
162  ->with(
163  $this->selectBuilderMock,
164  $queryConfigMock['source']['link-source'][0]['using'],
165  $queryConfigMock['source']['link-source'][0]['alias'],
166  $queryConfigMock['source']['alias']
167  )
168  ->willReturn('(billing.parent_id = `sales`.`entity_id`)');
169 
170  if (isset($queryConfigMock['source']['link-source'][0]['filter'])) {
171  $filtersMock = ['(sales.entity_id IS NULL)'];
172 
173  $this->conditionResolverMock->expects($this->at(1))
174  ->method('getFilter')
175  ->with(
176  $this->selectBuilderMock,
177  $queryConfigMock['source']['link-source'][0]['filter'],
178  $queryConfigMock['source']['link-source'][0]['alias'],
179  $queryConfigMock['source']['alias']
180  )
181  ->willReturn($filtersMock[0]);
182 
183  $this->columnsResolverMock->expects($this->once())
184  ->method('getColumns')
185  ->with($this->selectBuilderMock, $queryConfigMock['source']['link-source'][0])
186  ->willReturn(
187  [
188  'entity_id' => 'sales.entity_id',
189  'billing_address_id' => 'billing.entity_id'
190  ]
191  );
192 
193  $this->selectBuilderMock->expects($this->once())
194  ->method('setColumns')
195  ->with(
196  [
197  'entity_id' => 'sales.entity_id',
198  'billing_address_id' => 'billing.entity_id'
199  ]
200  );
201  }
202 
203  $this->selectBuilderMock->expects($this->once())
204  ->method('setFilters')
205  ->with($filtersMock);
206  $this->selectBuilderMock->expects($this->once())
207  ->method('setJoins')
208  ->with($joinsMock);
209 
210  $this->assertEquals(
211  $this->selectBuilderMock,
212  $this->subject->assemble($this->selectBuilderMock, $queryConfigMock)
213  );
214  }
215 
220  {
221  return [
222  [
223  [
224  'source' => [
225  'name' => 'sales_order',
226  'alias' => 'sales',
227  'link-source' => [
228  [
229  'name' => 'sales_order_address',
230  'alias' => 'billing',
231  'link-type' => 'left',
232  'attribute' => [
233  [
234  'alias' => 'billing_address_id',
235  'name' => 'entity_id'
236  ]
237  ],
238  'using' => [
239  [
240  'glue' => 'and',
241  'condition' => [
242  [
243  'attribute' => 'parent_id',
244  'operator' => 'eq',
245  'type' => 'identifier',
246  '_value' => 'entity_id'
247  ]
248  ]
249  ]
250  ],
251  'filter' => [
252  [
253  'glue' => 'and',
254  'condition' => [
255  [
256  'attribute' => 'entity_id',
257  'operator' => 'null'
258  ]
259  ]
260  ]
261  ]
262  ]
263  ]
264  ]
265  ],
266  [
267  'billing' => [
268  'link-type' => 'left',
269  'table' => [
270  'billing' => 'pref_sales_order_address'
271  ],
272  'condition' => '(billing.parent_id = `sales`.`entity_id`)'
273  ]
274  ],
275  ['sales_order_address' => 'pref_sales_order_address']
276  ]
277  ];
278  }
279 }
testAssembleNotEmpty(array $queryConfigMock, array $joinsMock, array $tablesMapping)