12
12
use Magento \GraphQl \Controller \GraphQl ;
13
13
use Magento \GraphQlCache \Controller \AbstractGraphqlCacheTest ;
14
14
use Magento \UrlRewrite \Model \UrlFinderInterface ;
15
+ use Magento \Cms \Api \Data \PageInterface ;
16
+ use Magento \Cms \Api \GetPageByIdentifierInterface ;
15
17
16
18
/**
17
19
* Test caching works for categoryUrlResolver
@@ -26,6 +28,7 @@ class CategoryUrlResolverCacheTest extends AbstractGraphqlCacheTest
26
28
* @var GraphQl
27
29
*/
28
30
private $ graphqlController ;
31
+
29
32
/**
30
33
* @inheritdoc
31
34
*/
@@ -39,10 +42,12 @@ protected function setUp(): void
39
42
* Tests that X-Magento-tags and cache debug headers are correct for category urlResolver
40
43
*
41
44
* @magentoDataFixture Magento/CatalogUrlRewrite/_files/product_with_category.php
45
+ * @magentoDataFixture Magento/Cms/_files/pages.php
42
46
*/
43
47
public function testCategoryUrlResolverRequestHasCorrectTags ()
44
48
{
45
49
$ categoryUrlKey = 'cat-1.html ' ;
50
+ $ productUrlKey = 'p002.html ' ;
46
51
$ productSku = 'p002 ' ;
47
52
/** @var ProductRepositoryInterface $productRepository */
48
53
$ productRepository = $ this ->objectManager ->get (ProductRepositoryInterface::class);
@@ -59,7 +64,7 @@ public function testCategoryUrlResolverRequestHasCorrectTags()
59
64
]
60
65
);
61
66
$ categoryId = $ actualUrls ->getEntityId ();
62
- $ query
67
+ $ categoryQuery
63
68
= <<<QUERY
64
69
{
65
70
urlResolver(url:" {$ categoryUrlKey }")
@@ -71,13 +76,121 @@ public function testCategoryUrlResolverRequestHasCorrectTags()
71
76
}
72
77
}
73
78
QUERY ;
74
- $ request = $ this ->prepareRequest ($ query );
75
- /** @var \Magento\Framework\App\Response\Http $response */
79
+
80
+ $ productQuery = <<<QUERY
81
+ {
82
+ urlResolver(url:" {$ productUrlKey }")
83
+ {
84
+ id
85
+ relative_url
86
+ canonical_url
87
+ type
88
+ }
89
+ }
90
+ QUERY ;
91
+
92
+ /** @var GetPageByIdentifierInterface $page */
93
+ $ page = $ this ->objectManager ->get (GetPageByIdentifierInterface::class);
94
+ /** @var PageInterface $cmsPage */
95
+ $ cmsPage = $ page ->execute ('page100 ' , 0 );
96
+ $ cmsPageId = $ cmsPage ->getId ();
97
+ $ requestPath = $ cmsPage ->getIdentifier ();
98
+ $ pageQuery
99
+ = <<<QUERY
100
+ {
101
+ urlResolver(url:" {$ requestPath }")
102
+ {
103
+ id
104
+ relative_url
105
+ canonical_url
106
+ type
107
+ }
108
+ }
109
+ QUERY ;
110
+ // query category for MISS
111
+ $ request = $ this ->prepareRequest ($ categoryQuery );
112
+ $ response = $ this ->graphqlController ->dispatch ($ request );
113
+ $ this ->assertEquals ('MISS ' , $ response ->getHeader ('X-Magento-Cache-Debug ' )->getFieldValue ());
114
+ $ expectedCacheTags = ['cat_c ' ,'cat_c_ ' . $ categoryId , 'FPC ' ];
115
+ $ rawActualCacheTags = $ response ->getHeader ('X-Magento-Tags ' )->getFieldValue ();
116
+ $ actualCacheTags = explode (', ' , $ rawActualCacheTags );
117
+ $ this ->assertEquals ($ expectedCacheTags , $ actualCacheTags );
118
+
119
+ // query product for MISS
120
+ $ request = $ this ->prepareRequest ($ productQuery );
121
+ $ response = $ this ->graphqlController ->dispatch ($ request );
122
+ $ this ->assertEquals ('MISS ' , $ response ->getHeader ('X-Magento-Cache-Debug ' )->getFieldValue ());
123
+ $ expectedCacheTags = ['cat_p ' , 'cat_p_ ' . $ product ->getId (), 'FPC ' ];
124
+ $ rawActualCacheTags = $ response ->getHeader ('X-Magento-Tags ' )->getFieldValue ();
125
+ $ actualCacheTags = explode (', ' , $ rawActualCacheTags );
126
+ $ this ->assertEquals ($ expectedCacheTags , $ actualCacheTags );
127
+
128
+ // query page for MISS
129
+ $ request = $ this ->prepareRequest ($ pageQuery );
130
+ $ response = $ this ->graphqlController ->dispatch ($ request );
131
+ $ this ->assertEquals ('MISS ' , $ response ->getHeader ('X-Magento-Cache-Debug ' )->getFieldValue ());
132
+ $ expectedCacheTags = ['cms_p ' ,'cms_p_ ' . $ cmsPageId ,'FPC ' ];
133
+ $ rawActualCacheTags = $ response ->getHeader ('X-Magento-Tags ' )->getFieldValue ();
134
+ $ actualCacheTags = explode (', ' , $ rawActualCacheTags );
135
+ $ this ->assertEquals ($ expectedCacheTags , $ actualCacheTags );
136
+
137
+ // query category for HIT
138
+ $ request = $ this ->prepareRequest ($ categoryQuery );
139
+ $ response = $ this ->graphqlController ->dispatch ($ request );
140
+ $ this ->assertEquals ('HIT ' , $ response ->getHeader ('X-Magento-Cache-Debug ' )->getFieldValue ());
141
+ $ expectedCacheTags = ['cat_c ' ,'cat_c_ ' . $ categoryId , 'FPC ' ];
142
+ $ rawActualCacheTags = $ response ->getHeader ('X-Magento-Tags ' )->getFieldValue ();
143
+ $ actualCacheTags = explode (', ' , $ rawActualCacheTags );
144
+ $ this ->assertEquals ($ expectedCacheTags , $ actualCacheTags );
145
+
146
+ // query product for HIT
147
+ $ request = $ this ->prepareRequest ($ productQuery );
148
+ $ response = $ this ->graphqlController ->dispatch ($ request );
149
+ $ this ->assertEquals ('HIT ' , $ response ->getHeader ('X-Magento-Cache-Debug ' )->getFieldValue ());
150
+ $ expectedCacheTags = ['cat_p ' , 'cat_p_ ' . $ product ->getId (), 'FPC ' ];
151
+ $ rawActualCacheTags = $ response ->getHeader ('X-Magento-Tags ' )->getFieldValue ();
152
+ $ actualCacheTags = explode (', ' , $ rawActualCacheTags );
153
+ $ this ->assertEquals ($ expectedCacheTags , $ actualCacheTags );
154
+
155
+ // query product for HIT
156
+ $ request = $ this ->prepareRequest ($ pageQuery );
157
+ $ response = $ this ->graphqlController ->dispatch ($ request );
158
+ $ this ->assertEquals ('HIT ' , $ response ->getHeader ('X-Magento-Cache-Debug ' )->getFieldValue ());
159
+ $ expectedCacheTags = ['cms_p ' ,'cms_p_ ' . $ cmsPageId ,'FPC ' ];
160
+ $ rawActualCacheTags = $ response ->getHeader ('X-Magento-Tags ' )->getFieldValue ();
161
+ $ actualCacheTags = explode (', ' , $ rawActualCacheTags );
162
+ $ this ->assertEquals ($ expectedCacheTags , $ actualCacheTags );
163
+
164
+ $ product ->setUrlKey ('something-else-that-invalidates-the-cache ' );
165
+ $ productRepository ->save ($ product );
166
+ $ productQuery = <<<QUERY
167
+ {
168
+ urlResolver(url:"something-else-that-invalidates-the-cache.html")
169
+ {
170
+ id
171
+ relative_url
172
+ canonical_url
173
+ type
174
+ }
175
+ }
176
+ QUERY ;
177
+
178
+ // query category for MISS
179
+ $ request = $ this ->prepareRequest ($ categoryQuery );
76
180
$ response = $ this ->graphqlController ->dispatch ($ request );
77
181
$ this ->assertEquals ('MISS ' , $ response ->getHeader ('X-Magento-Cache-Debug ' )->getFieldValue ());
78
182
$ expectedCacheTags = ['cat_c ' ,'cat_c_ ' . $ categoryId , 'FPC ' ];
79
183
$ rawActualCacheTags = $ response ->getHeader ('X-Magento-Tags ' )->getFieldValue ();
80
184
$ actualCacheTags = explode (', ' , $ rawActualCacheTags );
81
185
$ this ->assertEquals ($ expectedCacheTags , $ actualCacheTags );
186
+
187
+ // query product for HIT
188
+ $ request = $ this ->prepareRequest ($ productQuery );
189
+ $ response = $ this ->graphqlController ->dispatch ($ request );
190
+ $ this ->assertEquals ('MISS ' , $ response ->getHeader ('X-Magento-Cache-Debug ' )->getFieldValue ());
191
+ $ expectedCacheTags = ['cat_p ' , 'cat_p_ ' . $ product ->getId (), 'FPC ' ];
192
+ $ rawActualCacheTags = $ response ->getHeader ('X-Magento-Tags ' )->getFieldValue ();
193
+ $ actualCacheTags = explode (', ' , $ rawActualCacheTags );
194
+ $ this ->assertEquals ($ expectedCacheTags , $ actualCacheTags );
82
195
}
83
196
}
0 commit comments