123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Search\Test\Unit\Model;
- class SynonymGroupRepositoryTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Search\Model\SynonymGroupRepository
- */
- private $object;
- /**
- * @var \Magento\Search\Model\SynonymGroupFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $factory;
- /**
- * @var \Magento\Search\Model\ResourceModel\SynonymGroup|\PHPUnit_Framework_MockObject_MockObject
- */
- private $resourceModel;
- public function setUp()
- {
- $this->factory = $this->createPartialMock(\Magento\Search\Model\SynonymGroupFactory::class, ['create']);
- $this->resourceModel = $this->createMock(\Magento\Search\Model\ResourceModel\SynonymGroup::class);
- $this->object = new \Magento\Search\Model\SynonymGroupRepository($this->factory, $this->resourceModel);
- }
- public function testSaveCreate()
- {
- $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $synonymGroupModel->expects($this->once())->method('load')->with(null);
- $synonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn(null);
- $this->factory->expects($this->exactly(2))->method('create')->willReturn($synonymGroupModel);
- $this->resourceModel->expects($this->once())->method('getByScope')->willReturn([]);
- $synonymGroupModel->expects($this->once())->method('setStoreId');
- $synonymGroupModel->expects($this->once())->method('setWebsiteId');
- $synonymGroupModel->expects($this->once())->method('setSynonymGroup');
- $this->resourceModel->expects($this->once())->method('save')->with($synonymGroupModel);
- $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
- $data->expects($this->once())->method('getGroupId')->willReturn(null);
- $data->expects($this->exactly(2))->method('getStoreId');
- $data->expects($this->exactly(2))->method('getWebsiteId');
- $data->expects($this->once())->method('getSynonymGroup');
- $this->object->save($data);
- }
- /**
- * @expectedException \Magento\Search\Model\Synonym\MergeConflictException
- * @expectedExceptionMessage Merge conflict with existing synonym group(s): (a,b,c)
- */
- public function testSaveCreateMergeConflict()
- {
- $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $synonymGroupModel->expects($this->once())->method('load')->with(null);
- $synonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn(null);
- $this->factory->expects($this->once())->method('create')->willReturn($synonymGroupModel);
- $this->resourceModel->expects($this->once())
- ->method('getByScope')
- ->willReturn([['group_id' => 1, 'synonyms' => 'a,b,c']]);
- $this->resourceModel->expects($this->never())->method('save');
- $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
- $data->expects($this->once())->method('getGroupId')->willReturn(null);
- $data->expects($this->once())->method('getStoreId');
- $data->expects($this->once())->method('getWebsiteId');
- $data->expects($this->once())->method('getSynonymGroup')->willReturn('c,d,e');
- $this->object->save($data, true);
- }
- public function testSaveCreateMerge()
- {
- $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $synonymGroupModel->expects($this->once())->method('load')->with(null);
- $synonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn(null);
- $existingSynonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $existingSynonymGroupModel->expects($this->once())->method('load')->with(1);
- $existingSynonymGroupModel->expects($this->once())->method('delete');
- $existingSynonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn('a,b,c');
- $newSynonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $newSynonymGroupModel->expects($this->once())->method('setStoreId');
- $newSynonymGroupModel->expects($this->once())->method('setWebsiteId');
- // merged result
- $newSynonymGroupModel->expects($this->once())->method('setSynonymGroup')->with('a,b,c,d,e');
- $this->factory->expects($this->at(0))->method('create')->willReturn($synonymGroupModel);
- $this->factory->expects($this->at(1))->method('create')->willReturn($existingSynonymGroupModel);
- $this->factory->expects($this->at(2))->method('create')->willReturn($newSynonymGroupModel);
- $this->resourceModel->expects($this->once())
- ->method('getByScope')
- ->willReturn([['group_id' => 1, 'synonyms' => 'a,b,c']]);
- $this->resourceModel->expects($this->once())->method('save')->with($newSynonymGroupModel);
- $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
- $data->expects($this->once())->method('getGroupId')->willReturn(null);
- $data->expects($this->exactly(2))->method('getStoreId');
- $data->expects($this->exactly(2))->method('getWebsiteId');
- $data->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('c,d,e');
- $this->object->save($data);
- }
- public function testSaveUpdate()
- {
- $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $synonymGroupModel->expects($this->once())->method('load')->with(1);
- $synonymGroupModel->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('a,b,c');
- $synonymGroupModel->expects($this->once())->method('getGroupId')->willReturn(1);
- $this->factory->expects($this->once())->method('create')->willReturn($synonymGroupModel);
- $this->resourceModel->expects($this->once())
- ->method('getByScope')
- ->willReturn([['group_id' => 1, 'synonyms' => 'a,b,c']]);
- $synonymGroupModel->expects($this->once())->method('setStoreId');
- $synonymGroupModel->expects($this->once())->method('setWebsiteId');
- $synonymGroupModel->expects($this->once())->method('setSynonymGroup')->with('d,e,f');
- $this->resourceModel->expects($this->once())->method('save')->with($synonymGroupModel);
- $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
- $data->expects($this->once())->method('getGroupId')->willReturn(1);
- $data->expects($this->exactly(2))->method('getStoreId');
- $data->expects($this->exactly(2))->method('getWebsiteId');
- $data->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('d,e,f');
- $this->object->save($data);
- }
- /**
- * @expectedException \Magento\Search\Model\Synonym\MergeConflictException
- * @expectedExceptionMessage (d,h,i)
- */
- public function testSaveUpdateMergeConflict()
- {
- $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $synonymGroupModel->expects($this->once())->method('load')->with(1);
- $synonymGroupModel->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('a,b,c');
- $synonymGroupModel->expects($this->once())->method('getGroupId')->willReturn(1);
- $this->factory->expects($this->once())->method('create')->willReturn($synonymGroupModel);
- $this->resourceModel->expects($this->once())
- ->method('getByScope')
- ->willReturn([['group_id' => 2, 'synonyms' => 'd,h,i']]);
- $this->resourceModel->expects($this->never())->method('save');
- $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
- $data->expects($this->once())->method('getGroupId')->willReturn(1);
- $data->expects($this->once())->method('getStoreId');
- $data->expects($this->once())->method('getWebsiteId');
- $data->expects($this->once())->method('getSynonymGroup')->willReturn('c,d,e');
- $this->object->save($data, true);
- }
- public function testSaveUpdateMerge()
- {
- $synonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $synonymGroupModel->expects($this->once())->method('load')->with(1);
- $synonymGroupModel->expects($this->exactly(2))->method('getSynonymGroup')->willReturn('a,b,c');
- $synonymGroupModel->expects($this->once())->method('getGroupId')->willReturn(1);
- $existingSynonymGroupModel = $this->createMock(\Magento\Search\Model\SynonymGroup::class);
- $existingSynonymGroupModel->expects($this->once())->method('load')->with(2);
- $existingSynonymGroupModel->expects($this->once())->method('delete');
- $existingSynonymGroupModel->expects($this->once())->method('getSynonymGroup')->willReturn('d,e,f');
- $synonymGroupModel->expects($this->once())->method('setStoreId');
- $synonymGroupModel->expects($this->once())->method('setWebsiteId');
- // merged result
- $synonymGroupModel->expects($this->once())->method('setSynonymGroup')->with('d,e,f,a,z');
- $this->factory->expects($this->at(0))->method('create')->willReturn($synonymGroupModel);
- $this->factory->expects($this->at(1))->method('create')->willReturn($existingSynonymGroupModel);
- $this->resourceModel->expects($this->once())
- ->method('getByScope')
- ->willReturn([['group_id' => 1, 'synonyms' => 'a,b,c'], ['group_id' => 2, 'synonyms' => 'd,e,f']]);
- $this->resourceModel->expects($this->once())->method('save')->with($synonymGroupModel);
- $data = $this->getMockForAbstractClass(\Magento\Search\Api\Data\SynonymGroupInterface::class, [], '', false);
- $data->expects($this->once())->method('getGroupId')->willReturn(1);
- $data->expects($this->exactly(2))->method('getStoreId');
- $data->expects($this->exactly(2))->method('getWebsiteId');
- $data->expects($this->exactly(3))->method('getSynonymGroup')->willReturn('a,d,z');
- $this->object->save($data);
- }
- }
|