125 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\GraphQl\CmsUrlRewrite;
 | 
						|
 | 
						|
use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
 | 
						|
use Magento\TestFramework\ObjectManager;
 | 
						|
use Magento\TestFramework\TestCase\GraphQlAbstract;
 | 
						|
use Magento\Cms\Helper\Page as PageHelper;
 | 
						|
use Magento\Store\Model\ScopeInterface;
 | 
						|
use Magento\Framework\App\Config\ScopeConfigInterface;
 | 
						|
 | 
						|
/**
 | 
						|
 * Test the GraphQL endpoint's URLResolver query to verify canonical URL's are correctly returned.
 | 
						|
 */
 | 
						|
class UrlResolverTest extends GraphQlAbstract
 | 
						|
{
 | 
						|
    /** @var ObjectManager */
 | 
						|
    private $objectManager;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @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 = $this->createQuery($requestPath);
 | 
						|
        $response = $this->graphQlQuery($query);
 | 
						|
        $this->assertEquals($cmsPageId, $response['urlResolver']['id']);
 | 
						|
        $this->assertEquals($requestPath, $response['urlResolver']['relative_url']);
 | 
						|
        $this->assertEquals(strtoupper(str_replace('-', '_', $expectedEntityType)), $response['urlResolver']['type']);
 | 
						|
        $this->assertEquals(0, $response['urlResolver']['redirectCode']);
 | 
						|
 | 
						|
        // querying by non seo friendly url path should return seo friendly relative url
 | 
						|
        $query = $this->createQuery($targetPath);
 | 
						|
        $response = $this->graphQlQuery($query);
 | 
						|
        $this->assertEquals($cmsPageId, $response['urlResolver']['id']);
 | 
						|
        $this->assertEquals($requestPath, $response['urlResolver']['relative_url']);
 | 
						|
        $this->assertEquals(strtoupper(str_replace('-', '_', $expectedEntityType)), $response['urlResolver']['type']);
 | 
						|
        $this->assertEquals(0, $response['urlResolver']['redirectCode']);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/Cms/_files/pages.php
 | 
						|
     */
 | 
						|
    public function testResolveCMSPageWithQueryParameters()
 | 
						|
    {
 | 
						|
        $page = $this->objectManager->create(\Magento\Cms\Model\Page::class);
 | 
						|
        $page->load('page100');
 | 
						|
        $cmsPageId = $page->getId();
 | 
						|
        $requestPath = $page->getIdentifier();
 | 
						|
        $requestPath .= '?key=value';
 | 
						|
 | 
						|
        $query = $this->createQuery($requestPath);
 | 
						|
        $response = $this->graphQlQuery($query);
 | 
						|
        $this->assertNotEmpty($response['urlResolver']);
 | 
						|
        $this->assertEquals($cmsPageId, $response['urlResolver']['id']);
 | 
						|
        $this->assertEquals($requestPath, $response['urlResolver']['relative_url']);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 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();
 | 
						|
        $query = $this->createQuery('/');
 | 
						|
        $response = $this->graphQlQuery($query);
 | 
						|
        $this->assertArrayHasKey('urlResolver', $response);
 | 
						|
        $this->assertEquals($homePageId, $response['urlResolver']['id']);
 | 
						|
        $this->assertEquals($homePageIdentifier, $response['urlResolver']['relative_url']);
 | 
						|
        $this->assertEquals('CMS_PAGE', $response['urlResolver']['type']);
 | 
						|
        $this->assertEquals(0, $response['urlResolver']['redirectCode']);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $path
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    private function createQuery(string $path): string
 | 
						|
    {
 | 
						|
        return <<<QUERY
 | 
						|
{
 | 
						|
  urlResolver(url:"{$path}")
 | 
						|
  {
 | 
						|
   id
 | 
						|
   relative_url
 | 
						|
   type
 | 
						|
   redirectCode
 | 
						|
  }
 | 
						|
}
 | 
						|
QUERY;
 | 
						|
    }
 | 
						|
}
 |