SynonymGroupRepositoryTest.php 12.2 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
<?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;

    public function setUp()
    {
        $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();
    }

    /**
     * @expectedException \Magento\Search\Model\Synonym\MergeConflictException
     * @expectedExceptionMessage (a,b,c), (d,e,f)
     */
    public function testSaveCreateMergeConflict()
    {
        /** @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();
    }

    /**
     * @expectedException \Magento\Search\Model\Synonym\MergeConflictException
     * @expectedExceptionMessage (d,e,f)
     */
    public function testSaveUpdateMergeConflict()
    {
        /** @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->assertEquals(null, $synonymGroupModel->getSynonyms());

        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
        $synonymGroupModel->load($id2);
        $this->assertEquals(null, $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->assertEquals(null, $synonymGroupModel->getSynonyms());

        $synonymGroupModel = $this->objectManager->create(\Magento\Search\Model\SynonymGroup::class);
        $synonymGroupModel->load($id3);
        $this->assertEquals(null, $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());
    }
}