AggregatedFieldDataConverterTest.php 3.1 KB

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