262 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Search\Model;
 | 
						|
 | 
						|
class SynonymGroupRepositoryTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var \Magento\Search\Model\SynonymGroupRepository
 | 
						|
     */
 | 
						|
    private $model;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var \Magento\Framework\ObjectManagerInterface
 | 
						|
     */
 | 
						|
    private $objectManager;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
        $this->model = $this->objectManager->get(\Magento\Search\Model\SynonymGroupRepository::class);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testSaveCreate()
 | 
						|
    {
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
 | 
						|
        $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup->setSynonymGroup('a,b,c');
 | 
						|
        $this->model->save($synonymGroup);
 | 
						|
        /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($synonymGroup->getGroupId());
 | 
						|
        $this->assertEquals('a,b,c', $synonymGroupModel->getSynonymGroup());
 | 
						|
        $this->assertEquals(0, $synonymGroupModel->getStoreId());
 | 
						|
        $this->assertEquals(0, $synonymGroupModel->getWebsiteId());
 | 
						|
        $synonymGroupModel->delete();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     */
 | 
						|
    public function testSaveCreateMergeConflict()
 | 
						|
    {
 | 
						|
        $this->expectException(\Magento\Search\Model\Synonym\MergeConflictException::class);
 | 
						|
        $this->expectExceptionMessage('(a,b,c), (d,e,f)');
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
 | 
						|
        $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup->setSynonymGroup('a,b,c');
 | 
						|
        $this->model->save($synonymGroup);
 | 
						|
        $id1 = $synonymGroup->getGroupId();
 | 
						|
        $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup->setSynonymGroup('d,e,f');
 | 
						|
        $this->model->save($synonymGroup);
 | 
						|
        $id2 = $synonymGroup->getGroupId();
 | 
						|
        $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup->setSynonymGroup('a,d,z');
 | 
						|
        try {
 | 
						|
            $this->model->save($synonymGroup, true);
 | 
						|
        } catch (\Magento\Search\Model\Synonym\MergeConflictException $e) {
 | 
						|
            /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
 | 
						|
            $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
            $synonymGroupModel->load($id1);
 | 
						|
            $synonymGroupModel->delete();
 | 
						|
            $synonymGroupModel->load($id2);
 | 
						|
            $synonymGroupModel->delete();
 | 
						|
            throw $e;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function testSaveUpdate()
 | 
						|
    {
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
 | 
						|
        $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup->setSynonymGroup('a,b,c');
 | 
						|
        $this->model->save($synonymGroup);
 | 
						|
        $id = $synonymGroup->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $updateSynonymGroup */
 | 
						|
        $updateSynonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $updateSynonymGroup->setGroupId($id);
 | 
						|
        $updateSynonymGroup->setSynonymGroup('d,e,f');
 | 
						|
        $this->model->save($updateSynonymGroup);
 | 
						|
 | 
						|
        /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id);
 | 
						|
        $this->assertEquals('d,e,f', $synonymGroupModel->getSynonymGroup());
 | 
						|
        $this->assertEquals(0, $synonymGroupModel->getStoreId());
 | 
						|
        $this->assertEquals(0, $synonymGroupModel->getWebsiteId());
 | 
						|
        /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id);
 | 
						|
        $synonymGroupModel->delete();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     */
 | 
						|
    public function testSaveUpdateMergeConflict()
 | 
						|
    {
 | 
						|
        $this->expectException(\Magento\Search\Model\Synonym\MergeConflictException::class);
 | 
						|
        $this->expectExceptionMessage('(d,e,f)');
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
 | 
						|
        $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup->setSynonymGroup('a,b,c');
 | 
						|
        $this->model->save($synonymGroup);
 | 
						|
        $id1 = $synonymGroup->getGroupId();
 | 
						|
        $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup->setSynonymGroup('d,e,f');
 | 
						|
        $this->model->save($synonymGroup);
 | 
						|
        $id2 = $synonymGroup->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $updateSynonymGroup */
 | 
						|
        $updateSynonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $updateSynonymGroup->setGroupId($id1);
 | 
						|
        $updateSynonymGroup->setSynonymGroup('a,b,d');
 | 
						|
        try {
 | 
						|
            $this->model->save($updateSynonymGroup, true);
 | 
						|
        } catch (\Magento\Search\Model\Synonym\MergeConflictException $e) {
 | 
						|
            /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
 | 
						|
            $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
            $synonymGroupModel->load($id1);
 | 
						|
            $synonymGroupModel->delete();
 | 
						|
            $synonymGroupModel->load($id2);
 | 
						|
            $synonymGroupModel->delete();
 | 
						|
            throw $e;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function testSaveCreateMerge()
 | 
						|
    {
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup1 */
 | 
						|
        $synonymGroup1 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup1->setSynonymGroup('a,b,c');
 | 
						|
        $this->model->save($synonymGroup1);
 | 
						|
        $id1 = $synonymGroup1->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup2 */
 | 
						|
        $synonymGroup2 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup2->setSynonymGroup('d,e,f');
 | 
						|
        $this->model->save($synonymGroup2);
 | 
						|
        $id2 = $synonymGroup2->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup3 */
 | 
						|
        $synonymGroup3 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup3->setSynonymGroup('g,h,i');
 | 
						|
        $this->model->save($synonymGroup3);
 | 
						|
        $id3 = $synonymGroup3->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup4 */
 | 
						|
        $synonymGroup4 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup4->setSynonymGroup('a,d,z');
 | 
						|
        // merging a,b,c and d,e,f with a,d,z
 | 
						|
        $this->model->save($synonymGroup4);
 | 
						|
        $id4 = $synonymGroup4->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id4);
 | 
						|
        $this->assertEquals('a,b,c,d,e,f,z', $synonymGroupModel->getSynonyms());
 | 
						|
        $this->assertEquals(0, $synonymGroupModel->getStoreId());
 | 
						|
        $this->assertEquals(0, $synonymGroupModel->getWebsiteId());
 | 
						|
        $synonymGroupModel->delete();
 | 
						|
 | 
						|
        // g,h,i should not be merged
 | 
						|
        $synonymGroupModel->load($id3);
 | 
						|
        $this->assertEquals('g,h,i', $synonymGroupModel->getSynonyms());
 | 
						|
        $synonymGroupModel->delete();
 | 
						|
 | 
						|
        // merged rows should be deleted
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id1);
 | 
						|
        $this->assertNull($synonymGroupModel->getSynonyms());
 | 
						|
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id2);
 | 
						|
        $this->assertNull($synonymGroupModel->getSynonyms());
 | 
						|
    }
 | 
						|
 | 
						|
    public function testSaveUpdateMerge()
 | 
						|
    {
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup1 */
 | 
						|
        $synonymGroup1 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup1->setSynonymGroup('a,b,c');
 | 
						|
        $this->model->save($synonymGroup1);
 | 
						|
        $id1 = $synonymGroup1->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup2 */
 | 
						|
        $synonymGroup2 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup2->setSynonymGroup('d,e,f');
 | 
						|
        $this->model->save($synonymGroup2);
 | 
						|
        $id2 = $synonymGroup2->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup3 */
 | 
						|
        $synonymGroup3 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup3->setSynonymGroup('g,h,i');
 | 
						|
        $this->model->save($synonymGroup3);
 | 
						|
        $id3 = $synonymGroup3->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup4 */
 | 
						|
        $synonymGroup4 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup4->setSynonymGroup('j,k,l');
 | 
						|
        $this->model->save($synonymGroup4);
 | 
						|
        $id4 = $synonymGroup4->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup5 */
 | 
						|
        $synonymGroup5 = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup5->setSynonymGroup('a,d,g,z');
 | 
						|
        $synonymGroup5->setGroupId($id1);
 | 
						|
        // updates a,b,c to a,d,g,z
 | 
						|
        $this->model->save($synonymGroup5);
 | 
						|
 | 
						|
        /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id1);
 | 
						|
        $this->assertEquals('d,e,f,g,h,i,a,z', $synonymGroupModel->getSynonymGroup());
 | 
						|
        $this->assertEquals(0, $synonymGroupModel->getStoreId());
 | 
						|
        $this->assertEquals(0, $synonymGroupModel->getWebsiteId());
 | 
						|
        $synonymGroupModel->delete();
 | 
						|
 | 
						|
        // j,k,l is not merged
 | 
						|
        $synonymGroupModel->load($id4);
 | 
						|
        $this->assertEquals('j,k,l', $synonymGroupModel->getSynonymGroup());
 | 
						|
        $synonymGroupModel->delete();
 | 
						|
 | 
						|
        // no new group is inserted
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id4 + 1);
 | 
						|
        $this->assertNull($synonymGroupModel->getSynonymGroup());
 | 
						|
 | 
						|
        // merged rows are deleted
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id2);
 | 
						|
        $this->assertNull($synonymGroupModel->getSynonyms());
 | 
						|
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id3);
 | 
						|
        $this->assertNull($synonymGroupModel->getSynonyms());
 | 
						|
    }
 | 
						|
 | 
						|
    public function testDelete()
 | 
						|
    {
 | 
						|
        /** @var \Magento\Search\Api\Data\SynonymGroupInterface $synonymGroup */
 | 
						|
        $synonymGroup = $this->objectManager->create(\Magento\Search\Api\Data\SynonymGroupInterface::class);
 | 
						|
        $synonymGroup->setSynonymGroup('test1,test2,test3');
 | 
						|
        $this->model->save($synonymGroup);
 | 
						|
        $id = $synonymGroup->getGroupId();
 | 
						|
 | 
						|
        /** @var \Magento\Search\Model\SynonymGroup $synonymGroupModel */
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id);
 | 
						|
 | 
						|
        $this->model->delete($synonymGroupModel);
 | 
						|
 | 
						|
        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
 | 
						|
        $synonymGroupModel->load($id);
 | 
						|
        $this->assertNull($synonymGroupModel->getSynonymGroup());
 | 
						|
    }
 | 
						|
}
 |