154 lines
5.5 KiB
PHP
Executable File
154 lines
5.5 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\GraphQl\PageCache\Cms;
|
|
|
|
use Magento\Cms\Model\GetPageByIdentifier;
|
|
use Magento\Cms\Model\PageRepository;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use Magento\TestFramework\TestCase\GraphQlAbstract;
|
|
|
|
/**
|
|
* Test the caching works properly for CMS Pages
|
|
*/
|
|
class PageCacheTest extends GraphQlAbstract
|
|
{
|
|
/**
|
|
* @var GetPageByIdentifier
|
|
*/
|
|
private $pageByIdentifier;
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$this->markTestSkipped(
|
|
'This test will stay skipped until DEVOPS-4924 is resolved'
|
|
);
|
|
$this->pageByIdentifier = Bootstrap::getObjectManager()->get(GetPageByIdentifier::class);
|
|
}
|
|
|
|
/**
|
|
* Test that X-Magento-Tags are correct
|
|
*
|
|
* @magentoApiDataFixture Magento/Cms/_files/pages.php
|
|
*/
|
|
public function testCacheTagsHaveExpectedValue()
|
|
{
|
|
$pageIdentifier = 'page100';
|
|
$page = $this->pageByIdentifier->execute($pageIdentifier, 0);
|
|
$pageId = (int) $page->getId();
|
|
|
|
$query = $this->getPageQuery($pageId);
|
|
|
|
//cache-debug should be a MISS on first request
|
|
$response = $this->graphQlQueryWithResponseHeaders($query);
|
|
|
|
$this->assertArrayHasKey('X-Magento-Tags', $response['headers']);
|
|
$actualTags = explode(',', $response['headers']['X-Magento-Tags']);
|
|
$expectedTags = ["cms_p", "cms_p_{$pageId}", "FPC"];
|
|
$this->assertEquals($expectedTags, $actualTags);
|
|
}
|
|
|
|
/**
|
|
* Test the second request for the same page will return a cached result
|
|
*
|
|
* @magentoApiDataFixture Magento/Cms/_files/pages.php
|
|
*/
|
|
public function testCacheIsUsedOnSecondRequest()
|
|
{
|
|
$pageIdentifier = 'page100';
|
|
$page = $this->pageByIdentifier->execute($pageIdentifier, 0);
|
|
$pageId = (int) $page->getId();
|
|
|
|
$query = $this->getPageQuery($pageId);
|
|
|
|
//cache-debug should be a MISS on first request
|
|
$responseMiss = $this->graphQlQueryWithResponseHeaders($query);
|
|
$this->assertArrayHasKey('X-Magento-Cache-Debug', $responseMiss['headers']);
|
|
$this->assertEquals('MISS', $responseMiss['headers']['X-Magento-Cache-Debug']);
|
|
|
|
//cache-debug should be a HIT on second request
|
|
$responseHit = $this->graphQlQueryWithResponseHeaders($query);
|
|
$this->assertArrayHasKey('X-Magento-Cache-Debug', $responseHit['headers']);
|
|
$this->assertEquals('HIT', $responseHit['headers']['X-Magento-Cache-Debug']);
|
|
//cached data should be correct
|
|
$this->assertNotEmpty($responseHit['body']);
|
|
$this->assertArrayNotHasKey('errors', $responseHit['body']);
|
|
$pageData = $responseHit['body']['cmsPage'];
|
|
$this->assertEquals('Cms Page 100', $pageData['title']);
|
|
}
|
|
|
|
/**
|
|
* Test that cache is invalidated when page is updated
|
|
*
|
|
* @magentoApiDataFixture Magento/Cms/_files/pages.php
|
|
*/
|
|
public function testCacheIsInvalidatedOnPageUpdate()
|
|
{
|
|
$page100Identifier = 'page100';
|
|
$page100 = $this->pageByIdentifier->execute($page100Identifier, 0);
|
|
$page100Id = (int) $page100->getId();
|
|
$pageBlankIdentifier = 'page_design_blank';
|
|
$pageBlank = $this->pageByIdentifier->execute($pageBlankIdentifier, 0);
|
|
$pageBlankId = (int) $pageBlank->getId();
|
|
|
|
$page100Query = $this->getPageQuery($page100Id);
|
|
$pageBlankQuery = $this->getPageQuery($pageBlankId);
|
|
|
|
//cache-debug should be a MISS on first request
|
|
$page100Miss = $this->graphQlQueryWithResponseHeaders($page100Query);
|
|
$this->assertEquals('MISS', $page100Miss['headers']['X-Magento-Cache-Debug']);
|
|
$pageBlankMiss = $this->graphQlQueryWithResponseHeaders($pageBlankQuery);
|
|
$this->assertEquals('MISS', $pageBlankMiss['headers']['X-Magento-Cache-Debug']);
|
|
|
|
//cache-debug should be a HIT on second request
|
|
$page100Hit = $this->graphQlQueryWithResponseHeaders($page100Query);
|
|
$this->assertEquals('HIT', $page100Hit['headers']['X-Magento-Cache-Debug']);
|
|
$pageBlankHit = $this->graphQlQueryWithResponseHeaders($pageBlankQuery);
|
|
$this->assertEquals('HIT', $pageBlankHit['headers']['X-Magento-Cache-Debug']);
|
|
|
|
$pageRepository = Bootstrap::getObjectManager()->get(PageRepository::class);
|
|
$newPageContent = 'New page content for blank page.';
|
|
$pageBlank->setContent($newPageContent);
|
|
$pageRepository->save($pageBlank);
|
|
|
|
//cache-debug should be a MISS after updating the page
|
|
$pageBlankMiss = $this->graphQlQueryWithResponseHeaders($pageBlankQuery);
|
|
$this->assertEquals('MISS', $pageBlankMiss['headers']['X-Magento-Cache-Debug']);
|
|
$page100Hit = $this->graphQlQueryWithResponseHeaders($page100Query);
|
|
$this->assertEquals('HIT', $page100Hit['headers']['X-Magento-Cache-Debug']);
|
|
//updated page data should be correct
|
|
$this->assertNotEmpty($pageBlankMiss['body']);
|
|
$pageData = $pageBlankMiss['body']['cmsPage'];
|
|
$this->assertArrayNotHasKey('errors', $pageBlankMiss['body']);
|
|
$this->assertEquals('Cms Page Design Blank', $pageData['title']);
|
|
$this->assertEquals($newPageContent, $pageData['content']);
|
|
}
|
|
|
|
/**
|
|
* Get page query
|
|
*
|
|
* @param int $pageId
|
|
* @return string
|
|
*/
|
|
private function getPageQuery(int $pageId): string
|
|
{
|
|
$query = <<<QUERY
|
|
{
|
|
cmsPage(id: $pageId) {
|
|
title
|
|
url_key
|
|
content
|
|
}
|
|
}
|
|
QUERY;
|
|
return $query;
|
|
}
|
|
}
|