Skip to content

Commit 0b577a3

Browse files
committed
#28569:Multi-store: Missing store codes in relation to a group and website
- Added stores for storeConfig query
1 parent c43d763 commit 0b577a3

File tree

3 files changed

+87
-39
lines changed

3 files changed

+87
-39
lines changed

app/code/Magento/StoreGraphQl/Model/Resolver/Store/StoreConfigDataProvider.php

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
namespace Magento\StoreGraphQl\Model\Resolver\Store;
99

1010
use Magento\Framework\App\Config\ScopeConfigInterface;
11+
use Magento\Store\Api\Data\StoreConfigInterface;
1112
use Magento\Store\Api\StoreConfigManagerInterface;
1213
use Magento\Store\Model\ScopeInterface;
1314
use Magento\Store\Api\Data\StoreInterface;
@@ -55,24 +56,26 @@ public function __construct(
5556
*/
5657
public function getStoreConfigData(StoreInterface $store): array
5758
{
58-
$storeConfigData = array_merge(
59-
$this->getBaseConfigData($store),
60-
$this->getExtendedConfigData((int)$store->getId())
61-
);
62-
return $storeConfigData;
59+
$stores = $this->storeConfigManager->getStoreConfigs();
60+
$defaultStoreConfig = current($this->storeConfigManager->getStoreConfigs([$store->getCode()]));
61+
$defaultStoreConfigData = $this->prepareStoreConfigData($defaultStoreConfig);
62+
63+
foreach ($stores as $storeConfig) {
64+
$defaultStoreConfigData['stores'][] = $this->prepareStoreConfigData($storeConfig);
65+
}
66+
67+
return $defaultStoreConfigData;
6368
}
6469

6570
/**
66-
* Get base config data
71+
* Prepare store config data
6772
*
68-
* @param StoreInterface $store
73+
* @param StoreConfigInterface $storeConfig
6974
* @return array
7075
*/
71-
private function getBaseConfigData(StoreInterface $store) : array
76+
private function prepareStoreConfigData($storeConfig): array
7277
{
73-
$storeConfig = current($this->storeConfigManager->getStoreConfigs([$store->getCode()]));
74-
75-
$storeConfigData = [
78+
return array_merge([
7679
'id' => $storeConfig->getId(),
7780
'code' => $storeConfig->getCode(),
7881
'website_id' => $storeConfig->getWebsiteId(),
@@ -83,14 +86,13 @@ private function getBaseConfigData(StoreInterface $store) : array
8386
'weight_unit' => $storeConfig->getWeightUnit(),
8487
'base_url' => $storeConfig->getBaseUrl(),
8588
'base_link_url' => $storeConfig->getBaseLinkUrl(),
86-
'base_static_url' => $storeConfig->getSecureBaseStaticUrl(),
89+
'base_static_url' => $storeConfig->getBaseStaticUrl(),
8790
'base_media_url' => $storeConfig->getBaseMediaUrl(),
8891
'secure_base_url' => $storeConfig->getSecureBaseUrl(),
8992
'secure_base_link_url' => $storeConfig->getSecureBaseLinkUrl(),
9093
'secure_base_static_url' => $storeConfig->getSecureBaseStaticUrl(),
9194
'secure_base_media_url' => $storeConfig->getSecureBaseMediaUrl()
92-
];
93-
return $storeConfigData;
95+
], $this->getExtendedConfigData((int)$storeConfig->getId()));
9496
}
9597

9698
/**

app/code/Magento/StoreGraphQl/etc/schema.graphqls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ type StoreConfig @doc(description: "The type contains information about a store
3131
secure_base_static_url : String @doc(description: "Secure base static URL for the store")
3232
secure_base_media_url : String @doc(description: "Secure base media URL for the store")
3333
store_name : String @doc(description: "Name of the store")
34+
stores: [StoreConfig] @doc(description: "Contains information about all stores")
3435
}

dev/tests/api-functional/testsuite/Magento/GraphQl/Store/StoreConfigResolverTest.php

Lines changed: 70 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77

88
namespace Magento\GraphQl\Store;
99

10+
use Magento\Framework\App\Config\ScopeConfigInterface;
1011
use Magento\Store\Api\Data\StoreConfigInterface;
1112
use Magento\Store\Api\StoreConfigManagerInterface;
1213
use Magento\Store\Api\StoreRepositoryInterface;
1314
use Magento\Store\Api\StoreResolverInterface;
15+
use Magento\Store\Model\ScopeInterface;
16+
use Magento\TestFramework\Helper\Bootstrap;
1417
use Magento\TestFramework\ObjectManager;
1518
use Magento\TestFramework\TestCase\GraphQlAbstract;
1619

@@ -25,25 +28,28 @@ class StoreConfigResolverTest extends GraphQlAbstract
2528

2629
protected function setUp(): void
2730
{
28-
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
31+
$this->objectManager = Bootstrap::getObjectManager();
2932
}
3033

3134
/**
3235
* @magentoApiDataFixture Magento/Store/_files/store.php
33-
* @magentoConfigFixture default_store store/information/name Test Store
36+
* @magentoConfigFixture default_store store/information/name Default Store
37+
* @magentoConfigFixture test_store store/information/name Test Store
3438
*/
3539
public function testGetStoreConfig()
3640
{
37-
/** @var StoreConfigManagerInterface $storeConfigsManager */
38-
$storeConfigsManager = $this->objectManager->get(StoreConfigManagerInterface::class);
41+
/** @var StoreConfigManagerInterface $defaultStoreConfigsManager */
42+
$defaultStoreConfigsManager = $this->objectManager->get(StoreConfigManagerInterface::class);
3943
/** @var StoreResolverInterface $storeResolver */
4044
$storeResolver = $this->objectManager->get(StoreResolverInterface::class);
4145
/** @var StoreRepositoryInterface $storeRepository */
4246
$storeRepository = $this->objectManager->get(StoreRepositoryInterface::class);
4347
$storeId = $storeResolver->getCurrentStoreId();
4448
$store = $storeRepository->getById($storeId);
45-
/** @var StoreConfigInterface $storeConfig */
46-
$storeConfig = current($storeConfigsManager->getStoreConfigs([$store->getCode()]));
49+
/** @var StoreConfigInterface $defaultStoreConfig */
50+
$defaultStoreConfig = current($defaultStoreConfigsManager->getStoreConfigs([$store->getCode()]));
51+
/** @var StoreConfigInterface $storeConfigs */
52+
$storeConfigs = $defaultStoreConfigsManager->getStoreConfigs();
4753
$query
4854
= <<<QUERY
4955
{
@@ -65,32 +71,71 @@ public function testGetStoreConfig()
6571
secure_base_static_url,
6672
secure_base_media_url,
6773
store_name
74+
stores {
75+
id,
76+
code,
77+
website_id,
78+
locale,
79+
base_currency_code,
80+
default_display_currency_code,
81+
timezone,
82+
weight_unit,
83+
base_url,
84+
base_link_url,
85+
base_static_url,
86+
base_media_url,
87+
secure_base_url,
88+
secure_base_link_url,
89+
secure_base_static_url,
90+
secure_base_media_url,
91+
store_name
92+
}
6893
}
6994
}
7095
QUERY;
7196
$response = $this->graphQlQuery($query);
7297
$this->assertArrayHasKey('storeConfig', $response);
73-
$this->assertEquals($storeConfig->getId(), $response['storeConfig']['id']);
74-
$this->assertEquals($storeConfig->getCode(), $response['storeConfig']['code']);
75-
$this->assertEquals($storeConfig->getLocale(), $response['storeConfig']['locale']);
76-
$this->assertEquals($storeConfig->getBaseCurrencyCode(), $response['storeConfig']['base_currency_code']);
98+
$this->validateStoreConfig($defaultStoreConfig, $response['storeConfig']);
99+
100+
$this->assertArrayHasKey('stores', $response['storeConfig']);
101+
foreach ($storeConfigs as $key => $storeConfig) {
102+
$this->assertArrayHasKey($key, $response['storeConfig']['stores']);
103+
$this->validateStoreConfig($storeConfig, $response['storeConfig']['stores'][$key]);
104+
}
105+
}
106+
107+
/**
108+
* Validate Store Config Data
109+
*
110+
* @param StoreConfigInterface $storeConfig
111+
* @param array $responseConfig
112+
*/
113+
private function validateStoreConfig($storeConfig, $responseConfig): void
114+
{
115+
/* @var $scopeConfig ScopeConfigInterface */
116+
$scopeConfig = $this->objectManager->get(ScopeConfigInterface::class);
117+
$this->assertEquals($storeConfig->getId(), $responseConfig['id']);
118+
$this->assertEquals($storeConfig->getCode(), $responseConfig['code']);
119+
$this->assertEquals($storeConfig->getLocale(), $responseConfig['locale']);
120+
$this->assertEquals($storeConfig->getBaseCurrencyCode(), $responseConfig['base_currency_code']);
77121
$this->assertEquals(
78122
$storeConfig->getDefaultDisplayCurrencyCode(),
79-
$response['storeConfig']['default_display_currency_code']
80-
);
81-
$this->assertEquals($storeConfig->getTimezone(), $response['storeConfig']['timezone']);
82-
$this->assertEquals($storeConfig->getWeightUnit(), $response['storeConfig']['weight_unit']);
83-
$this->assertEquals($storeConfig->getBaseUrl(), $response['storeConfig']['base_url']);
84-
$this->assertEquals($storeConfig->getBaseLinkUrl(), $response['storeConfig']['base_link_url']);
85-
$this->assertEquals($storeConfig->getBaseStaticUrl(), $response['storeConfig']['base_static_url']);
86-
$this->assertEquals($storeConfig->getBaseMediaUrl(), $response['storeConfig']['base_media_url']);
87-
$this->assertEquals($storeConfig->getSecureBaseUrl(), $response['storeConfig']['secure_base_url']);
88-
$this->assertEquals($storeConfig->getSecureBaseLinkUrl(), $response['storeConfig']['secure_base_link_url']);
89-
$this->assertEquals(
90-
$storeConfig->getSecureBaseStaticUrl(),
91-
$response['storeConfig']['secure_base_static_url']
123+
$responseConfig['default_display_currency_code']
92124
);
93-
$this->assertEquals($storeConfig->getSecureBaseMediaUrl(), $response['storeConfig']['secure_base_media_url']);
94-
$this->assertEquals('Test Store', $response['storeConfig']['store_name']);
125+
$this->assertEquals($storeConfig->getTimezone(), $responseConfig['timezone']);
126+
$this->assertEquals($storeConfig->getWeightUnit(), $responseConfig['weight_unit']);
127+
$this->assertEquals($storeConfig->getBaseUrl(), $responseConfig['base_url']);
128+
$this->assertEquals($storeConfig->getBaseLinkUrl(), $responseConfig['base_link_url']);
129+
$this->assertEquals($storeConfig->getBaseStaticUrl(), $responseConfig['base_static_url']);
130+
$this->assertEquals($storeConfig->getBaseMediaUrl(), $responseConfig['base_media_url']);
131+
$this->assertEquals($storeConfig->getSecureBaseUrl(), $responseConfig['secure_base_url']);
132+
$this->assertEquals($storeConfig->getSecureBaseLinkUrl(), $responseConfig['secure_base_link_url']);
133+
$this->assertEquals($storeConfig->getSecureBaseStaticUrl(), $responseConfig['secure_base_static_url']);
134+
$this->assertEquals($storeConfig->getSecureBaseMediaUrl(), $responseConfig['secure_base_media_url']);
135+
$this->assertEquals($scopeConfig->getValue(
136+
'store/information/name',
137+
ScopeInterface::SCOPE_STORE,
138+
$storeConfig->getId()
139+
), $responseConfig['store_name']);
95140
}
96141
}

0 commit comments

Comments
 (0)