GridTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Sales\Test\Unit\Model\ResourceModel;
  8. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  9. use Magento\Sales\Model\ResourceModel\Provider\NotSyncedDataProviderInterface;
  10. use Magento\Framework\DB\Adapter\AdapterInterface as ConnectionAdapterInterface;
  11. use Magento\Sales\Model\ResourceModel\Grid;
  12. /**
  13. * Unit tests for \Magento\Sales\Model\ResourceModel\Grid class
  14. */
  15. class GridTest extends \PHPUnit\Framework\TestCase
  16. {
  17. /**
  18. * @var Grid
  19. */
  20. private $grid;
  21. /**
  22. * @var NotSyncedDataProviderInterface|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. private $notSyncedDataProvider;
  25. /**
  26. * @var ConnectionAdapterInterface|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. private $connection;
  29. /**
  30. * @var string
  31. */
  32. private $mainTable = 'sales_order';
  33. /**
  34. * @var string
  35. */
  36. private $gridTable = 'sales_order_grid';
  37. /**
  38. * @var array
  39. */
  40. private $columns = [
  41. 'column_1_key' => 'column_1_value',
  42. 'column_2_key' => 'column_2_value'
  43. ];
  44. /**
  45. * @inheritdoc
  46. */
  47. protected function setUp()
  48. {
  49. $objectManager = new ObjectManager($this);
  50. $this->notSyncedDataProvider = $this->getMockBuilder(NotSyncedDataProviderInterface::class)
  51. ->disableOriginalConstructor()
  52. ->setMethods(['getIds'])
  53. ->getMockForAbstractClass();
  54. $this->connection = $this->getMockBuilder(ConnectionAdapterInterface::class)
  55. ->disableOriginalConstructor()
  56. ->setMethods(['select', 'fetchAll', 'insertOnDuplicate'])
  57. ->getMockForAbstractClass();
  58. $this->grid = $objectManager->getObject(
  59. \Magento\Sales\Model\ResourceModel\Grid::class,
  60. [
  61. 'notSyncedDataProvider' => $this->notSyncedDataProvider,
  62. 'mainTableName' => $this->mainTable,
  63. 'gridTableName' => $this->gridTable,
  64. 'connection' => $this->connection,
  65. '_tables' => ['sales_order' => $this->mainTable, 'sales_order_grid' => $this->gridTable],
  66. 'columns' => $this->columns
  67. ]
  68. );
  69. }
  70. /**
  71. * Test for refreshBySchedule() method
  72. */
  73. public function testRefreshBySchedule()
  74. {
  75. $notSyncedIds = ['1', '2', '3'];
  76. $fetchResult = ['column_1' => '1', 'column_2' => '2'];
  77. $this->notSyncedDataProvider->expects($this->atLeastOnce())->method('getIds')->willReturn($notSyncedIds);
  78. $select = $this->getMockBuilder(\Magento\Framework\DB\Select::class)
  79. ->disableOriginalConstructor()
  80. ->setMethods(['from', 'columns', 'where'])
  81. ->getMock();
  82. $select->expects($this->atLeastOnce())->method('from')->with(['sales_order' => $this->mainTable], [])
  83. ->willReturnSelf();
  84. $select->expects($this->atLeastOnce())->method('columns')->willReturnSelf();
  85. $select->expects($this->atLeastOnce())->method('where')
  86. ->with($this->mainTable . '.entity_id IN (?)', $notSyncedIds)
  87. ->willReturnSelf();
  88. $this->connection->expects($this->atLeastOnce())->method('select')->willReturn($select);
  89. $this->connection->expects($this->atLeastOnce())->method('fetchAll')->with($select)->willReturn($fetchResult);
  90. $this->connection->expects($this->atLeastOnce())->method('insertOnDuplicate')
  91. ->with($this->gridTable, $fetchResult, array_keys($this->columns))
  92. ->willReturn(array_count_values($notSyncedIds));
  93. $this->grid->refreshBySchedule();
  94. }
  95. }