SynonymGroupRepositoryTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Search\Model;
  7. class SynonymGroupRepositoryTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Search\Model\SynonymGroupRepository
  11. */
  12. private $model;
  13. /**
  14. * @var \Magento\Framework\ObjectManagerInterface
  15. */
  16. private $objectManager;
  17. public function setUp()
  18. {
  19. $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  20. $this->model = $this->objectManager->get(\Magento\Search\Model\SynonymGroupRepository::class);
  21. }
  22. public function testSaveCreate()
  23. {
  24. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
  25. $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  26. $synonymGroup->setSynonymGroup('a,b,c');
  27. $this->model->save($synonymGroup);
  28. /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
  29. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  30. $synonymGroupModel->load($synonymGroup->getGroupId());
  31. $this->assertEquals('a,b,c', $synonymGroupModel->getSynonymGroup());
  32. $this->assertEquals(0, $synonymGroupModel->getStoreId());
  33. $this->assertEquals(0, $synonymGroupModel->getWebsiteId());
  34. $synonymGroupModel->delete();
  35. }
  36. /**
  37. * @expectedException \Magento\Search\Model\Synonym\MergeConflictException
  38. * @expectedExceptionMessage (a,b,c), (d,e,f)
  39. */
  40. public function testSaveCreateMergeConflict()
  41. {
  42. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
  43. $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  44. $synonymGroup->setSynonymGroup('a,b,c');
  45. $this->model->save($synonymGroup);
  46. $id1 = $synonymGroup->getGroupId();
  47. $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  48. $synonymGroup->setSynonymGroup('d,e,f');
  49. $this->model->save($synonymGroup);
  50. $id2 = $synonymGroup->getGroupId();
  51. $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  52. $synonymGroup->setSynonymGroup('a,d,z');
  53. try {
  54. $this->model->save($synonymGroup, true);
  55. } catch (\Magento\Search\Model\Synonym\MergeConflictException $e) {
  56. /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
  57. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  58. $synonymGroupModel->load($id1);
  59. $synonymGroupModel->delete();
  60. $synonymGroupModel->load($id2);
  61. $synonymGroupModel->delete();
  62. throw $e;
  63. }
  64. }
  65. public function testSaveUpdate()
  66. {
  67. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
  68. $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  69. $synonymGroup->setSynonymGroup('a,b,c');
  70. $this->model->save($synonymGroup);
  71. $id = $synonymGroup->getGroupId();
  72. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $updateSynonymGroup */
  73. $updateSynonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  74. $updateSynonymGroup->setGroupId($id);
  75. $updateSynonymGroup->setSynonymGroup('d,e,f');
  76. $this->model->save($updateSynonymGroup);
  77. /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
  78. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  79. $synonymGroupModel->load($id);
  80. $this->assertEquals('d,e,f', $synonymGroupModel->getSynonymGroup());
  81. $this->assertEquals(0, $synonymGroupModel->getStoreId());
  82. $this->assertEquals(0, $synonymGroupModel->getWebsiteId());
  83. /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
  84. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  85. $synonymGroupModel->load($id);
  86. $synonymGroupModel->delete();
  87. }
  88. /**
  89. * @expectedException \Magento\Search\Model\Synonym\MergeConflictException
  90. * @expectedExceptionMessage (d,e,f)
  91. */
  92. public function testSaveUpdateMergeConflict()
  93. {
  94. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
  95. $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  96. $synonymGroup->setSynonymGroup('a,b,c');
  97. $this->model->save($synonymGroup);
  98. $id1 = $synonymGroup->getGroupId();
  99. $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  100. $synonymGroup->setSynonymGroup('d,e,f');
  101. $this->model->save($synonymGroup);
  102. $id2 = $synonymGroup->getGroupId();
  103. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $updateSynonymGroup */
  104. $updateSynonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  105. $updateSynonymGroup->setGroupId($id1);
  106. $updateSynonymGroup->setSynonymGroup('a,b,d');
  107. try {
  108. $this->model->save($updateSynonymGroup, true);
  109. } catch (\Magento\Search\Model\Synonym\MergeConflictException $e) {
  110. /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
  111. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  112. $synonymGroupModel->load($id1);
  113. $synonymGroupModel->delete();
  114. $synonymGroupModel->load($id2);
  115. $synonymGroupModel->delete();
  116. throw $e;
  117. }
  118. }
  119. public function testSaveCreateMerge()
  120. {
  121. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup1 */
  122. $synonymGroup1 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  123. $synonymGroup1->setSynonymGroup('a,b,c');
  124. $this->model->save($synonymGroup1);
  125. $id1 = $synonymGroup1->getGroupId();
  126. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup2 */
  127. $synonymGroup2 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  128. $synonymGroup2->setSynonymGroup('d,e,f');
  129. $this->model->save($synonymGroup2);
  130. $id2 = $synonymGroup2->getGroupId();
  131. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup3 */
  132. $synonymGroup3 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  133. $synonymGroup3->setSynonymGroup('g,h,i');
  134. $this->model->save($synonymGroup3);
  135. $id3 = $synonymGroup3->getGroupId();
  136. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup4 */
  137. $synonymGroup4 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  138. $synonymGroup4->setSynonymGroup('a,d,z');
  139. // merging a,b,c and d,e,f with a,d,z
  140. $this->model->save($synonymGroup4);
  141. $id4 = $synonymGroup4->getGroupId();
  142. /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
  143. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  144. $synonymGroupModel->load($id4);
  145. $this->assertEquals('a,b,c,d,e,f,z', $synonymGroupModel->getSynonyms());
  146. $this->assertEquals(0, $synonymGroupModel->getStoreId());
  147. $this->assertEquals(0, $synonymGroupModel->getWebsiteId());
  148. $synonymGroupModel->delete();
  149. // g,h,i should not be merged
  150. $synonymGroupModel->load($id3);
  151. $this->assertEquals('g,h,i', $synonymGroupModel->getSynonyms());
  152. $synonymGroupModel->delete();
  153. // merged rows should be deleted
  154. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  155. $synonymGroupModel->load($id1);
  156. $this->assertEquals(null, $synonymGroupModel->getSynonyms());
  157. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  158. $synonymGroupModel->load($id2);
  159. $this->assertEquals(null, $synonymGroupModel->getSynonyms());
  160. }
  161. public function testSaveUpdateMerge()
  162. {
  163. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup1 */
  164. $synonymGroup1 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  165. $synonymGroup1->setSynonymGroup('a,b,c');
  166. $this->model->save($synonymGroup1);
  167. $id1 = $synonymGroup1->getGroupId();
  168. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup2 */
  169. $synonymGroup2 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  170. $synonymGroup2->setSynonymGroup('d,e,f');
  171. $this->model->save($synonymGroup2);
  172. $id2 = $synonymGroup2->getGroupId();
  173. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup3 */
  174. $synonymGroup3 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  175. $synonymGroup3->setSynonymGroup('g,h,i');
  176. $this->model->save($synonymGroup3);
  177. $id3 = $synonymGroup3->getGroupId();
  178. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup4 */
  179. $synonymGroup4 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  180. $synonymGroup4->setSynonymGroup('j,k,l');
  181. $this->model->save($synonymGroup4);
  182. $id4 = $synonymGroup4->getGroupId();
  183. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup5 */
  184. $synonymGroup5 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  185. $synonymGroup5->setSynonymGroup('a,d,g,z');
  186. $synonymGroup5->setGroupId($id1);
  187. // updates a,b,c to a,d,g,z
  188. $this->model->save($synonymGroup5);
  189. /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
  190. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  191. $synonymGroupModel->load($id1);
  192. $this->assertEquals('d,e,f,g,h,i,a,z', $synonymGroupModel->getSynonymGroup());
  193. $this->assertEquals(0, $synonymGroupModel->getStoreId());
  194. $this->assertEquals(0, $synonymGroupModel->getWebsiteId());
  195. $synonymGroupModel->delete();
  196. // j,k,l is not merged
  197. $synonymGroupModel->load($id4);
  198. $this->assertEquals('j,k,l', $synonymGroupModel->getSynonymGroup());
  199. $synonymGroupModel->delete();
  200. // no new group is inserted
  201. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  202. $synonymGroupModel->load($id4 + 1);
  203. $this->assertNull($synonymGroupModel->getSynonymGroup());
  204. // merged rows are deleted
  205. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  206. $synonymGroupModel->load($id2);
  207. $this->assertEquals(null, $synonymGroupModel->getSynonyms());
  208. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  209. $synonymGroupModel->load($id3);
  210. $this->assertEquals(null, $synonymGroupModel->getSynonyms());
  211. }
  212. public function testDelete()
  213. {
  214. /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
  215. $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
  216. $synonymGroup->setSynonymGroup('test1,test2,test3');
  217. $this->model->save($synonymGroup);
  218. $id = $synonymGroup->getGroupId();
  219. /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
  220. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  221. $synonymGroupModel->load($id);
  222. $this->model->delete($synonymGroupModel);
  223. $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
  224. $synonymGroupModel->load($id);
  225. $this->assertNull($synonymGroupModel->getSynonymGroup());
  226. }
  227. }