objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); } /** * Tests if target_path(canonical_url) is resolved for Product entity * * @magentoApiDataFixture Magento/CatalogUrlRewrite/_files/product_with_category.php */ public function testProductUrlResolver() { $productSku = 'p002'; $urlPath = 'p002.html'; /** @var ProductRepositoryInterface $productRepository */ $productRepository = $this->objectManager->get(ProductRepositoryInterface::class); $product = $productRepository->get($productSku, false, null, true); $storeId = $product->getStoreId(); /** @var UrlFinderInterface $urlFinder */ $urlFinder = $this->objectManager->get(UrlFinderInterface::class); $actualUrls = $urlFinder->findOneByData( [ 'request_path' => $urlPath, 'store_id' => $storeId ] ); $targetPath = $actualUrls->getTargetPath(); $expectedType = $actualUrls->getEntityType(); $query = <<graphQlQuery($query); $this->assertArrayHasKey('urlResolver', $response); $this->assertEquals($product->getEntityId(), $response['urlResolver']['id']); $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']); $this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']); } /** * Tests the use case where canonical_url is provided as resolver input in the Query * * @magentoApiDataFixture Magento/CatalogUrlRewrite/_files/product_with_category.php */ public function testProductUrlWithCanonicalUrlInput() { $productSku = 'p002'; $urlPath = 'p002.html'; /** @var ProductRepositoryInterface $productRepository */ $productRepository = $this->objectManager->get(ProductRepositoryInterface::class); $product = $productRepository->get($productSku, false, null, true); $storeId = $product->getStoreId(); $product->getUrlKey(); /** @var UrlFinderInterface $urlFinder */ $urlFinder = $this->objectManager->get(UrlFinderInterface::class); $actualUrls = $urlFinder->findOneByData( [ 'request_path' => $urlPath, 'store_id' => $storeId ] ); $targetPath = $actualUrls->getTargetPath(); $expectedType = $actualUrls->getEntityType(); $canonicalPath = $actualUrls->getTargetPath(); $query = <<graphQlQuery($query); $this->assertArrayHasKey('urlResolver', $response); $this->assertEquals($product->getEntityId(), $response['urlResolver']['id']); $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']); $this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']); } /** * Test for category entity * * @magentoApiDataFixture Magento/CatalogUrlRewrite/_files/product_with_category.php */ public function testCategoryUrlResolver() { $productSku = 'p002'; $urlPath2 = 'cat-1.html'; /** @var ProductRepositoryInterface $productRepository */ $productRepository = $this->objectManager->get(ProductRepositoryInterface::class); $product = $productRepository->get($productSku, false, null, true); $storeId = $product->getStoreId(); /** @var UrlFinderInterface $urlFinder */ $urlFinder = $this->objectManager->get(UrlFinderInterface::class); $actualUrls = $urlFinder->findOneByData( [ 'request_path' => $urlPath2, 'store_id' => $storeId ] ); $categoryId = $actualUrls->getEntityId(); $targetPath = $actualUrls->getTargetPath(); $expectedType = $actualUrls->getEntityType(); $query = <<graphQlQuery($query); $this->assertArrayHasKey('urlResolver', $response); $this->assertEquals($categoryId, $response['urlResolver']['id']); $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']); $this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']); } /** * @magentoApiDataFixture Magento/Cms/_files/pages.php */ public function testCMSPageUrlResolver() { /** @var \Magento\Cms\Model\Page $page */ $page = $this->objectManager->get(\Magento\Cms\Model\Page::class); $page->load('page100'); $cmsPageId = $page->getId(); $requestPath = $page->getIdentifier(); /** @var \Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator $urlPathGenerator */ $urlPathGenerator = $this->objectManager->get(\Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator::class); /** @param \Magento\Cms\Api\Data\PageInterface $page */ $targetPath = $urlPathGenerator->getCanonicalUrlPath($page); $expectedEntityType = CmsPageUrlRewriteGenerator::ENTITY_TYPE; $query = <<graphQlQuery($query); $this->assertEquals($cmsPageId, $response['urlResolver']['id']); $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']); $this->assertEquals(strtoupper(str_replace('-', '_', $expectedEntityType)), $response['urlResolver']['type']); } /** * Tests the use case where the url_key of the existing product is changed * * @magentoApiDataFixture Magento/CatalogUrlRewrite/_files/product_with_category.php */ public function testProductUrlRewriteResolver() { $productSku = 'p002'; /** @var ProductRepositoryInterface $productRepository */ $productRepository = $this->objectManager->get(ProductRepositoryInterface::class); $product = $productRepository->get($productSku, false, null, true); $storeId = $product->getStoreId(); $product->setUrlKey('p002-new')->save(); $urlPath = $product->getUrlKey() . '.html'; $this->assertEquals($urlPath, 'p002-new.html'); /** @var UrlFinderInterface $urlFinder */ $urlFinder = $this->objectManager->get(UrlFinderInterface::class); $actualUrls = $urlFinder->findOneByData( [ 'request_path' => $urlPath, 'store_id' => $storeId ] ); $targetPath = $actualUrls->getTargetPath(); $expectedType = $actualUrls->getEntityType(); $query = <<graphQlQuery($query); $this->assertArrayHasKey('urlResolver', $response); $this->assertEquals($product->getEntityId(), $response['urlResolver']['id']); $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']); $this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']); } /** * Tests if null is returned when an invalid request_path is provided as input to urlResolver * * @magentoApiDataFixture Magento/CatalogUrlRewrite/_files/product_with_category.php */ public function testInvalidUrlResolverInput() { $productSku = 'p002'; $urlPath = 'p002'; /** @var ProductRepositoryInterface $productRepository */ $productRepository = $this->objectManager->get(ProductRepositoryInterface::class); $product = $productRepository->get($productSku, false, null, true); $storeId = $product->getStoreId(); /** @var UrlFinderInterface $urlFinder */ $urlFinder = $this->objectManager->get(UrlFinderInterface::class); $urlFinder->findOneByData( [ 'request_path' => $urlPath, 'store_id' => $storeId ] ); $query = <<graphQlQuery($query); $this->assertArrayHasKey('urlResolver', $response); $this->assertNull($response['urlResolver']); } /** * Test for category entity with leading slash * * @magentoApiDataFixture Magento/CatalogUrlRewrite/_files/product_with_category.php */ public function testCategoryUrlWithLeadingSlash() { $productSku = 'p002'; $urlPath = 'cat-1.html'; /** @var ProductRepositoryInterface $productRepository */ $productRepository = $this->objectManager->get(ProductRepositoryInterface::class); $product = $productRepository->get($productSku, false, null, true); $storeId = $product->getStoreId(); /** @var UrlFinderInterface $urlFinder */ $urlFinder = $this->objectManager->get(UrlFinderInterface::class); $actualUrls = $urlFinder->findOneByData( [ 'request_path' => $urlPath, 'store_id' => $storeId ] ); $categoryId = $actualUrls->getEntityId(); $targetPath = $actualUrls->getTargetPath(); $expectedType = $actualUrls->getEntityType(); $query = <<graphQlQuery($query); $this->assertArrayHasKey('urlResolver', $response); $this->assertEquals($categoryId, $response['urlResolver']['id']); $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']); $this->assertEquals(strtoupper($expectedType), $response['urlResolver']['type']); } /** * Test resolution of '/' path to home page */ public function testResolveSlash() { /** @var \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfigInterface */ $scopeConfigInterface = $this->objectManager->get(ScopeConfigInterface::class); $homePageIdentifier = $scopeConfigInterface->getValue( PageHelper::XML_PATH_HOME_PAGE, ScopeInterface::SCOPE_STORE ); /** @var \Magento\Cms\Model\Page $page */ $page = $this->objectManager->get(\Magento\Cms\Model\Page::class); $page->load($homePageIdentifier); $homePageId = $page->getId(); /** @var \Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator $urlPathGenerator */ $urlPathGenerator = $this->objectManager->get(\Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator::class); /** @param \Magento\Cms\Api\Data\PageInterface $page */ $targetPath = $urlPathGenerator->getCanonicalUrlPath($page); $query = <<graphQlQuery($query); $this->assertArrayHasKey('urlResolver', $response); $this->assertEquals($homePageId, $response['urlResolver']['id']); $this->assertEquals($targetPath, $response['urlResolver']['canonical_url']); $this->assertEquals('CMS_PAGE', $response['urlResolver']['type']); } }