SynonymGroupRepositoryTest.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Search\Test\Unit\Model;
  7. class SynonymGroupRepositoryTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Search\Model\SynonymGroupRepository
  11. */
  12. private $object;
  13. /**
  14. * @var \Magento\Search\Model\SynonymGroupFactory|\PHPUnit_Framework_MockObject_MockObject
  15. */
  16. private $factory;
  17. /**
  18. * @var \Magento\Search\Model\ResourceModel\SynonymGroup|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. private $resourceModel;
  21. public function setUp()
  22. {
  23. $this->factory = $this->createPartialMock(\Magento\Search\Model\SynonymGroupFactory::class, ['create']);
  24. $this->resourceModel = $this->createMock(\Magento\Search\Model\ResourceModel\SynonymGroup::class);
  25. $this->object = new \Magento\Search\Model\SynonymGroupRepository($this->factory, $this->resourceModel);
  26. }
  27. public function testSaveCreate()
  28. {
  29. $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  30. $synonymGroupModel->expects($this->once())->method('load')->with(null);
  31. $synonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn(null);
  32. $this->factory->expects($this->exactly(2))->method('create')->willReturn($synonymGroupModel);
  33. $this->resourceModel->expects($this->once())->method('getByScope')->willReturn([]);
  34. $synonymGroupModel->expects($this->once())->method('setStoreId');
  35. $synonymGroupModel->expects($this->once())->method('setWebsiteId');
  36. $synonymGroupModel->expects($this->once())->method('setSynonymGroup');
  37. $this->resourceModel->expects($this->once())->method('save')->with($synonymGroupModel);
  38. $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
  39. $data->expects($this->once())->method('getGroupId')->willReturn(null);
  40. $data->expects($this->exactly(2))->method('getStoreId');
  41. $data->expects($this->exactly(2))->method('getWebsiteId');
  42. $data->expects($this->once())->method('getSynonymGroup');
  43. $this->object->save($data);
  44. }
  45. /**
  46. * @expectedException \Magento\Search\Model\Synonym\MergeConflictException
  47. * @expectedExceptionMessage Merge conflict with existing synonym group(s): (a,b,c)
  48. */
  49. public function testSaveCreateMergeConflict()
  50. {
  51. $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  52. $synonymGroupModel->expects($this->once())->method('load')->with(null);
  53. $synonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn(null);
  54. $this->factory->expects($this->once())->method('create')->willReturn($synonymGroupModel);
  55. $this->resourceModel->expects($this->once())
  56. ->method('getByScope')
  57. ->willReturn([['group_id' => 1, 'synonyms' => 'a,b,c']]);
  58. $this->resourceModel->expects($this->never())->method('save');
  59. $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
  60. $data->expects($this->once())->method('getGroupId')->willReturn(null);
  61. $data->expects($this->once())->method('getStoreId');
  62. $data->expects($this->once())->method('getWebsiteId');
  63. $data->expects($this->once())->method('getSynonymGroup')->willReturn('c,d,e');
  64. $this->object->save($data, true);
  65. }
  66. public function testSaveCreateMerge()
  67. {
  68. $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  69. $synonymGroupModel->expects($this->once())->method('load')->with(null);
  70. $synonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn(null);
  71. $existingSynonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  72. $existingSynonymGroupModel->expects($this->once())->method('load')->with(1);
  73. $existingSynonymGroupModel->expects($this->once())->method('delete');
  74. $existingSynonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn('a,b,c');
  75. $newSynonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  76. $newSynonymGroupModel->expects($this->once())->method('setStoreId');
  77. $newSynonymGroupModel->expects($this->once())->method('setWebsiteId');
  78. // merged result
  79. $newSynonymGroupModel->expects($this->once())->method('setSynonymGroup')->with('a,b,c,d,e');
  80. $this->factory->expects($this->at(0))->method('create')->willReturn($synonymGroupModel);
  81. $this->factory->expects($this->at(1))->method('create')->willReturn($existingSynonymGroupModel);
  82. $this->factory->expects($this->at(2))->method('create')->willReturn($newSynonymGroupModel);
  83. $this->resourceModel->expects($this->once())
  84. ->method('getByScope')
  85. ->willReturn([['group_id' => 1, 'synonyms' => 'a,b,c']]);
  86. $this->resourceModel->expects($this->once())->method('save')->with($newSynonymGroupModel);
  87. $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
  88. $data->expects($this->once())->method('getGroupId')->willReturn(null);
  89. $data->expects($this->exactly(2))->method('getStoreId');
  90. $data->expects($this->exactly(2))->method('getWebsiteId');
  91. $data->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('c,d,e');
  92. $this->object->save($data);
  93. }
  94. public function testSaveUpdate()
  95. {
  96. $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  97. $synonymGroupModel->expects($this->once())->method('load')->with(1);
  98. $synonymGroupModel->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('a,b,c');
  99. $synonymGroupModel->expects($this->once())->method('getGroupId')->willReturn(1);
  100. $this->factory->expects($this->once())->method('create')->willReturn($synonymGroupModel);
  101. $this->resourceModel->expects($this->once())
  102. ->method('getByScope')
  103. ->willReturn([['group_id' => 1, 'synonyms' => 'a,b,c']]);
  104. $synonymGroupModel->expects($this->once())->method('setStoreId');
  105. $synonymGroupModel->expects($this->once())->method('setWebsiteId');
  106. $synonymGroupModel->expects($this->once())->method('setSynonymGroup')->with('d,e,f');
  107. $this->resourceModel->expects($this->once())->method('save')->with($synonymGroupModel);
  108. $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
  109. $data->expects($this->once())->method('getGroupId')->willReturn(1);
  110. $data->expects($this->exactly(2))->method('getStoreId');
  111. $data->expects($this->exactly(2))->method('getWebsiteId');
  112. $data->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('d,e,f');
  113. $this->object->save($data);
  114. }
  115. /**
  116. * @expectedException \Magento\Search\Model\Synonym\MergeConflictException
  117. * @expectedExceptionMessage (d,h,i)
  118. */
  119. public function testSaveUpdateMergeConflict()
  120. {
  121. $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  122. $synonymGroupModel->expects($this->once())->method('load')->with(1);
  123. $synonymGroupModel->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('a,b,c');
  124. $synonymGroupModel->expects($this->once())->method('getGroupId')->willReturn(1);
  125. $this->factory->expects($this->once())->method('create')->willReturn($synonymGroupModel);
  126. $this->resourceModel->expects($this->once())
  127. ->method('getByScope')
  128. ->willReturn([['group_id' => 2, 'synonyms' => 'd,h,i']]);
  129. $this->resourceModel->expects($this->never())->method('save');
  130. $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
  131. $data->expects($this->once())->method('getGroupId')->willReturn(1);
  132. $data->expects($this->once())->method('getStoreId');
  133. $data->expects($this->once())->method('getWebsiteId');
  134. $data->expects($this->once())->method('getSynonymGroup')->willReturn('c,d,e');
  135. $this->object->save($data, true);
  136. }
  137. public function testSaveUpdateMerge()
  138. {
  139. $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  140. $synonymGroupModel->expects($this->once())->method('load')->with(1);
  141. $synonymGroupModel->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('a,b,c');
  142. $synonymGroupModel->expects($this->once())->method('getGroupId')->willReturn(1);
  143. $existingSynonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
  144. $existingSynonymGroupModel->expects($this->once())->method('load')->with(2);
  145. $existingSynonymGroupModel->expects($this->once())->method('delete');
  146. $existingSynonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn('d,e,f');
  147. $synonymGroupModel->expects($this->once())->method('setStoreId');
  148. $synonymGroupModel->expects($this->once())->method('setWebsiteId');
  149. // merged result
  150. $synonymGroupModel->expects($this->once())->method('setSynonymGroup')->with('d,e,f,a,z');
  151. $this->factory->expects($this->at(0))->method('create')->willReturn($synonymGroupModel);
  152. $this->factory->expects($this->at(1))->method('create')->willReturn($existingSynonymGroupModel);
  153. $this->resourceModel->expects($this->once())
  154. ->method('getByScope')
  155. ->willReturn([['group_id' => 1, 'synonyms' => 'a,b,c'], ['group_id' => 2, 'synonyms' => 'd,e,f']]);
  156. $this->resourceModel->expects($this->once())->method('save')->with($synonymGroupModel);
  157. $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
  158. $data->expects($this->once())->method('getGroupId')->willReturn(1);
  159. $data->expects($this->exactly(2))->method('getStoreId');
  160. $data->expects($this->exactly(2))->method('getWebsiteId');
  161. $data->expects($this->exactly(3))->method('getSynonymGroup')->willReturn('a,d,z');
  162. $this->object->save($data);
  163. }
  164. }