IndexScopeResolverTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Indexer\Test\Unit\ScopeResolver;
  7. use Magento\Framework\Search\Request\Dimension;
  8. use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  9. /**
  10. * Test for \Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver
  11. */
  12. class IndexScopeResolverTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @var \Magento\Framework\App\ScopeResolverInterface|\PHPUnit_Framework_MockObject_MockObject
  16. */
  17. protected $scopeResolver;
  18. /**
  19. * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $resource;
  22. /**
  23. * @var \Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver
  24. */
  25. private $target;
  26. protected function setUp()
  27. {
  28. $this->resource = $this->getMockBuilder(\Magento\Framework\App\ResourceConnection::class)
  29. ->setMethods(['getTableName'])
  30. ->disableOriginalConstructor()
  31. ->getMockForAbstractClass();
  32. $this->scopeResolver = $this->getMockBuilder(\Magento\Framework\App\ScopeResolverInterface::class)
  33. ->disableOriginalConstructor()
  34. ->getMockForAbstractClass();
  35. $objectManager = new ObjectManager($this);
  36. $this->target = $objectManager->getObject(
  37. \Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver::class,
  38. [
  39. 'resource' => $this->resource,
  40. 'scopeResolver' => $this->scopeResolver
  41. ]
  42. );
  43. }
  44. /**
  45. * @param string $indexName
  46. * @param Dimension[] $dimensions
  47. * @param string $expected
  48. * @dataProvider resolveDataProvider
  49. */
  50. public function testResolve($indexName, array $dimensions, $expected)
  51. {
  52. $dimensions = array_map(
  53. function ($demension) {
  54. return $this->createDimension($demension[0], $demension[1]);
  55. },
  56. $dimensions
  57. );
  58. $scope = $this->getMockBuilder(\Magento\Framework\App\ScopeInterface::class)
  59. ->disableOriginalConstructor()
  60. ->getMockForAbstractClass();
  61. $scope->expects($this->any())->method('getId')->willReturn(1);
  62. $this->resource->expects($this->once())
  63. ->method('getTableName')
  64. ->willReturnArgument(0);
  65. $this->scopeResolver->expects($this->any())->method('getScope')->willReturn($scope);
  66. $result = $this->target->resolve($indexName, $dimensions);
  67. $this->assertEquals($expected, $result);
  68. }
  69. /**
  70. * @return array
  71. */
  72. public function resolveDataProvider()
  73. {
  74. return [
  75. [
  76. 'index' => 'some_index',
  77. 'dimensions' => [],
  78. 'expected' => 'some_index'
  79. ],
  80. [
  81. 'index' => 'index_name',
  82. 'dimensions' => [['scope', 'name']],
  83. 'expected' => 'index_name_scope1'
  84. ],
  85. [
  86. 'index' => 'index_name',
  87. 'dimensions' => [['index', 20]],
  88. 'expected' => 'index_name_index20'
  89. ],
  90. [
  91. 'index' => 'index_name',
  92. 'dimensions' => [['first', 10], ['second', 20]],
  93. // actually you will get exception here thrown in ScopeResolverInterface
  94. 'expected' => 'index_name_first10_second20'
  95. ],
  96. [
  97. 'index' => 'index_name',
  98. 'dimensions' => [['second', 10], ['first', 20]],
  99. 'expected' => 'index_name_first20_second10'
  100. ],
  101. [
  102. 'index' => 'index_name',
  103. 'dimensions' => [[-1, 10], ['first', 20]],
  104. 'expected' => 'index_name_-110_first20'
  105. ]
  106. ];
  107. }
  108. /**
  109. * @param $name
  110. * @param $value
  111. * @return \PHPUnit_Framework_MockObject_MockObject
  112. */
  113. private function createDimension($name, $value)
  114. {
  115. $dimension = $this->getMockBuilder(\Magento\Framework\Search\Request\Dimension::class)
  116. ->setMethods(['getName', 'getValue'])
  117. ->disableOriginalConstructor()
  118. ->getMock();
  119. $dimension->expects($this->any())
  120. ->method('getName')
  121. ->willReturn($name);
  122. $dimension->expects($this->any())
  123. ->method('getValue')
  124. ->willReturn($value);
  125. return $dimension;
  126. }
  127. }