Skip to content

Commit 59da68c

Browse files
committed
MC-29929: cmsBlocks that has scope limited to specific Store View can be seen on other Store Views
- complete all use cases
1 parent d2bef48 commit 59da68c

File tree

2 files changed

+75
-7
lines changed

2 files changed

+75
-7
lines changed

dev/tests/api-functional/testsuite/Magento/GraphQl/Cms/CmsBlockTest.php

Lines changed: 75 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace Magento\GraphQl\Cms;
99

1010
use Magento\Cms\Api\BlockRepositoryInterface;
11+
use Magento\Store\Model\Store;
1112
use Magento\TestFramework\Helper\Bootstrap;
1213
use Magento\TestFramework\TestCase\GraphQl\ResponseContainsErrorsException;
1314
use Magento\TestFramework\TestCase\GraphQlAbstract;
@@ -206,8 +207,9 @@ public function testGetEnabledAndDisabledCmsBlockInOneRequest()
206207
$responseData['errors'][0]['message']
207208
);
208209
}
210+
209211
/**
210-
* Verify the CMS Block per storeview
212+
* Verify correct CMS block information per store
211213
*
212214
* @magentoApiDataFixture Magento/Store/_files/multiple_websites_with_store_groups_stores.php
213215
* @magentoApiDataFixture Magento/Cms/_files/blocks_for_different_stores.php
@@ -216,11 +218,79 @@ public function testGetCmsBlockPerSpecificStore(): void
216218
{
217219
$blockIdentitifier1 = 'test-block';
218220
$blockIdentitifier2 = 'test-block-2';
219-
$storeCode = 'third_store_view';
220-
$this->getCmsBlockQuery($blockIdentitifier2, $storeCode);
221+
$secondStoreCode = 'second_store_view';
222+
$thirdStoreCode = 'third_store_view';
223+
224+
//Verify the correct block information for second store is returned
225+
$cmsBlockResponseSecondStore = $this->getCmsBlockQuery($blockIdentitifier1, $secondStoreCode);
226+
self::assertArrayHasKey('cmsBlocks', $cmsBlockResponseSecondStore);
227+
self::assertArrayHasKey('items', $cmsBlockResponseSecondStore['cmsBlocks']);
228+
self::assertEquals('test-block', $cmsBlockResponseSecondStore['cmsBlocks']['items'][0]['identifier']);
229+
self::assertEquals('Second store block', $cmsBlockResponseSecondStore['cmsBlocks']['items'][0]['title']);
230+
self::assertEquals('second_store_view', $cmsBlockResponseSecondStore['storeConfig']['code']);
231+
232+
//Verify the correct block information for third store is returned
233+
$cmsBlockResponseThirdStore = $this->getCmsBlockQuery($blockIdentitifier1, $thirdStoreCode);
234+
self::assertArrayHasKey('cmsBlocks', $cmsBlockResponseThirdStore);
235+
self::assertArrayHasKey('items', $cmsBlockResponseThirdStore['cmsBlocks']);
236+
self::assertEquals('test-block', $cmsBlockResponseThirdStore['cmsBlocks']['items'][0]['identifier']);
237+
self::assertEquals('Third store block', $cmsBlockResponseThirdStore['cmsBlocks']['items'][0]['title']);
238+
self::assertEquals('third_store_view', $cmsBlockResponseThirdStore['storeConfig']['code']);
221239

240+
//Verify the correct block information for second block for second store is returned
241+
$cmsBlockResponseSecondStore = $this->getCmsBlockQuery($blockIdentitifier2, $secondStoreCode);
242+
self::assertArrayHasKey('cmsBlocks', $cmsBlockResponseSecondStore);
243+
self::assertArrayHasKey('items', $cmsBlockResponseSecondStore['cmsBlocks']);
244+
self::assertEquals('test-block-2', $cmsBlockResponseSecondStore['cmsBlocks']['items'][0]['identifier']);
245+
self::assertEquals('Second store block 2', $cmsBlockResponseSecondStore['cmsBlocks']['items'][0]['title']);
246+
self::assertEquals('second_store_view', $cmsBlockResponseSecondStore['storeConfig']['code']);
247+
248+
//Verify that exception is returned if block is not assigned to the store specified
249+
$this->expectException(\Exception::class);
250+
$this->expectExceptionMessage('The CMS block with the "test-block-2" ID doesn\'t exist');
251+
252+
$query =
253+
<<<QUERY
254+
{
255+
cmsBlocks(identifiers: "$blockIdentitifier2") {
256+
items {
257+
identifier
258+
title
259+
content
260+
}
261+
}
262+
}
263+
QUERY;
264+
$headerMap['Store'] = $thirdStoreCode;
265+
$this->graphQlQuery($query, [], '', $headerMap);
222266
}
223-
private function getCmsBlockQuery($blockIdentitifier, $storeCode)
267+
268+
/**
269+
* Verify CMS block for a disabled store
270+
*
271+
* @magentoApiDataFixture Magento/Store/_files/multiple_websites_with_store_groups_stores.php
272+
* @magentoApiDataFixture Magento/Cms/_files/blocks_for_different_stores.php
273+
*/
274+
public function testGetCmsBlockforDisabledStore(): void
275+
{
276+
$blockIdentitifier1 = 'test-block';
277+
$thirdStoreCode = 'third_store_view';
278+
$store = Bootstrap::getObjectManager()->get(Store::class);
279+
$store->load('third_store_view', 'code')->setIsActive(0)->save();
280+
$this->expectException(\Exception::class);
281+
$this->expectExceptionMessage('Requested store is not found');
282+
$this->getCmsBlockQuery($blockIdentitifier1, $thirdStoreCode);
283+
}
284+
285+
/**
286+
* Get cmsBlockQuery per store
287+
*
288+
* @param string $blockIdentitifier
289+
* @param string $storeCode
290+
* @return array
291+
* @throws \Exception
292+
*/
293+
private function getCmsBlockQuery($blockIdentitifier, $storeCode): array
224294
{
225295
$query =
226296
<<<QUERY
@@ -237,7 +307,6 @@ private function getCmsBlockQuery($blockIdentitifier, $storeCode)
237307
QUERY;
238308
$headerMap['Store'] = $storeCode;
239309
$response = $this->graphQlQuery($query, [], '', $headerMap);
240-
self::assertArrayHasKey('cmsBlocks', $response);
241-
self::assertArrayHasKey('items', $response['cmsBlocks']);
310+
return $response;
242311
}
243312
}

dev/tests/integration/testsuite/Magento/Cms/_files/blocks_for_different_stores.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
$blockFactory = Bootstrap::getObjectManager()->get(BlockInterfaceFactory::class);
1919
/** @var StoreManagerInterface $stores */
2020
$stores = Bootstrap::getObjectManager()->get(StoreManagerInterface::class)->getStores();
21-
$i = 0;
2221
array_shift($stores);
2322
foreach ($stores as $store) {
2423
$store->getId();

0 commit comments

Comments
 (0)