FromRendererTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DB\Test\Unit\Select;
  7. use Magento\Framework\DB\Select;
  8. /**
  9. * Class FromRendererTest
  10. */
  11. class FromRendererTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var \Magento\Framework\DB\Select\FromRenderer
  15. */
  16. protected $model;
  17. /**
  18. * @var \Magento\Framework\DB\Platform\Quote|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $quoteMock;
  21. /**
  22. * @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $selectMock;
  25. /**
  26. * Set up
  27. *
  28. * @return void
  29. */
  30. protected function setUp()
  31. {
  32. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  33. $this->quoteMock =
  34. $this->createPartialMock(\Magento\Framework\DB\Platform\Quote::class, ['quoteTableAs', 'quoteIdentifier']);
  35. $this->selectMock = $this->createPartialMock(\Magento\Framework\DB\Select::class, ['getPart']);
  36. $this->model = $objectManager->getObject(
  37. \Magento\Framework\DB\Select\FromRenderer::class,
  38. ['quote' => $this->quoteMock]
  39. );
  40. }
  41. public function testRenderNoPart()
  42. {
  43. $sql = 'SELECT';
  44. $this->selectMock->expects($this->once())
  45. ->method('getPart')
  46. ->with(Select::FROM)
  47. ->willReturn([]);
  48. $this->assertEquals($sql, $this->model->render($this->selectMock, $sql));
  49. }
  50. /**
  51. * @param array $from
  52. * @param string $sql
  53. * @param string $expectedResult
  54. * @dataProvider renderDataProvider
  55. */
  56. public function testRender($from, $sql, $expectedResult)
  57. {
  58. $this->quoteMock->expects($this->any())
  59. ->method('quoteIdentifier')
  60. ->willReturnArgument(0);
  61. $this->quoteMock->expects($this->any())
  62. ->method('quoteTableAs')
  63. ->willReturnCallback(
  64. function ($tableName, $correlationName) {
  65. return $tableName.' AS '.$correlationName;
  66. }
  67. );
  68. $this->selectMock->expects($this->once())
  69. ->method('getPart')
  70. ->with(Select::FROM)
  71. ->willReturn($from);
  72. $this->assertEquals($expectedResult, $this->model->render($this->selectMock, $sql));
  73. }
  74. /**
  75. * Data provider for testRender
  76. * @return array
  77. */
  78. public function renderDataProvider()
  79. {
  80. return [
  81. [
  82. [['joinType' => Select::FROM, 'schema' => null, 'tableName' => 't1', 'joinCondition' => null]],
  83. 'SELECT *',
  84. 'SELECT * FROM t1 AS 0'
  85. ],
  86. [
  87. [
  88. 'a' => ['joinType' => Select::FROM, 'schema' => null, 'tableName' => 't1', 'joinCondition' => null],
  89. 'b' => ['joinType' => Select::FROM, 'schema' => null, 'tableName' => 't2', 'joinCondition' => null]
  90. ],
  91. 'SELECT a.*',
  92. 'SELECT a.* FROM t1 AS a' . "\n" . ' INNER JOIN t2 AS b'
  93. ],
  94. [
  95. [
  96. 'a' => ['joinType' => Select::FROM, 'schema' => null, 'tableName' => 't1', 'joinCondition' => null],
  97. 'b' => [
  98. 'joinType' => Select::LEFT_JOIN,
  99. 'schema' => 'db',
  100. 'tableName' => 't2',
  101. 'joinCondition' => 't1.f1 = t2.f2'
  102. ]
  103. ],
  104. 'SELECT b.f2',
  105. 'SELECT b.f2 FROM t1 AS a' . "\n" . ' LEFT JOIN db.t2 AS b ON t1.f1 = t2.f2'
  106. ]
  107. ];
  108. }
  109. }