Skip to content

Commit 3e281f0

Browse files
committed
Merge remote-tracking branch 'origin/imported-magento-magento2-33004' into 2.4-develop-pr147
2 parents 5af7f5a + f0e1ea0 commit 3e281f0

File tree

4 files changed

+77
-22
lines changed

4 files changed

+77
-22
lines changed

app/code/Magento/Sales/Model/Order/Address/Renderer.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
use Magento\Framework\Event\ManagerInterface as EventManager;
1414
use Magento\Sales\Model\Order\Address;
1515
use Magento\Store\Model\ScopeInterface;
16+
use Magento\Store\Model\StoreManagerInterface;
1617

1718
/**
1819
* Class Renderer used for formatting an order address
20+
*
1921
* @api
2022
* @since 100.0.2
2123
*/
@@ -37,20 +39,26 @@ class Renderer
3739
private $scopeConfig;
3840

3941
/**
40-
* Constructor
41-
*
42+
* @var StoreManagerInterface|null
43+
*/
44+
private $storeManager;
45+
46+
/**
4247
* @param AddressConfig $addressConfig
4348
* @param EventManager $eventManager
4449
* @param ScopeConfigInterface|null $scopeConfig
50+
* @param StoreManagerInterface|null $storeManager
4551
*/
4652
public function __construct(
4753
AddressConfig $addressConfig,
4854
EventManager $eventManager,
49-
?ScopeConfigInterface $scopeConfig = null
55+
?ScopeConfigInterface $scopeConfig = null,
56+
?StoreManagerInterface $storeManager = null
5057
) {
5158
$this->addressConfig = $addressConfig;
5259
$this->eventManager = $eventManager;
5360
$this->scopeConfig = $scopeConfig ?: ObjectManager::getInstance()->get(ScopeConfigInterface::class);
61+
$this->storeManager = $storeManager ?: ObjectManager::getInstance()->get(StoreManagerInterface::class);
5462
}
5563

5664
/**
@@ -62,15 +70,15 @@ public function __construct(
6270
*/
6371
public function format(Address $address, $type)
6472
{
65-
$storeId = $address->getOrder()->getStoreId();
66-
$this->addressConfig->setStore($storeId);
73+
$orderStore = $address->getOrder()->getStore();
74+
$this->storeManager->setCurrentStore($orderStore);
6775
$formatType = $this->addressConfig->getFormatByCode($type);
6876
if (!$formatType || !$formatType->getRenderer()) {
6977
return null;
7078
}
7179
$this->eventManager->dispatch('customer_address_format', ['type' => $formatType, 'address' => $address]);
7280
$addressData = $address->getData();
73-
$addressData['locale'] = $this->getLocaleByStoreId((int) $storeId);
81+
$addressData['locale'] = $this->getLocaleByStoreId((int) $orderStore->getId());
7482

7583
return $formatType->getRenderer()->renderArray($addressData);
7684
}

app/code/Magento/Sales/Test/Unit/Model/Order/Address/RendererTest.php

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
use Magento\Sales\Model\Order;
1717
use Magento\Sales\Model\Order\Address as OrderAddress;
1818
use Magento\Sales\Model\Order\Address\Renderer as OrderAddressRenderer;
19+
use Magento\Store\Api\Data\StoreInterface;
20+
use Magento\Store\Model\StoreManagerInterface;
1921
use PHPUnit\Framework\MockObject\MockObject;
2022
use PHPUnit\Framework\TestCase;
2123

@@ -64,6 +66,11 @@ class RendererTest extends TestCase
6466
*/
6567
private $storeConfigMock;
6668

69+
/**
70+
* @var StoreManagerInterface|MockObject
71+
*/
72+
private $storeManagerMck;
73+
6774
/**
6875
* @ingeritdoc
6976
*/
@@ -88,26 +95,30 @@ protected function setUp(): void
8895
->willReturn($this->orderMock);
8996

9097
$this->storeConfigMock = $this->createMock(ScopeConfigInterface::class);
91-
98+
$this->storeManagerMck = $this->getMockBuilder(StoreManagerInterface::class)
99+
->onlyMethods(['setCurrentStore'])
100+
->disableOriginalConstructor()
101+
->getMockForAbstractClass();
92102
$this->objectManagerHelper = new ObjectManagerHelper($this);
93103
$this->orderAddressRenderer = $this->objectManagerHelper->getObject(
94104
OrderAddressRenderer::class,
95105
[
96106
'addressConfig' => $this->customerAddressConfigMock,
97107
'eventManager' => $this->eventManagerMock,
98-
'scopeConfig' => $this->storeConfigMock
108+
'scopeConfig' => $this->storeConfigMock,
109+
'storeManager' => $this->storeManagerMck,
99110
]
100111
);
101112
}
102113

103-
public function testFormat()
114+
public function testFormat(): void
104115
{
105116
$type = 'html';
106117
$formatType = new DataObject(['renderer' => $this->customerAddressBlockRendererMock]);
107118
$addressData = ['address', 'data', 'locale' => 1];
108119
$result = 'result string';
109120

110-
$this->setStoreExpectations(1);
121+
$this->setStoreExpectations();
111122
$this->customerAddressConfigMock->expects(static::atLeastOnce())
112123
->method('getFormatByCode')
113124
->with($type)
@@ -129,11 +140,11 @@ public function testFormat()
129140
$this->assertEquals($result, $this->orderAddressRenderer->format($this->orderAddressMock, $type));
130141
}
131142

132-
public function testFormatNoRenderer()
143+
public function testFormatNoRenderer(): void
133144
{
134145
$type = 'html';
135146

136-
$this->setStoreExpectations(1);
147+
$this->setStoreExpectations();
137148
$this->customerAddressConfigMock->expects(static::atLeastOnce())
138149
->method('getFormatByCode')
139150
->with($type)
@@ -147,17 +158,15 @@ public function testFormatNoRenderer()
147158
/**
148159
* Set expectations for store
149160
*
150-
* @param string|int $storeId
151161
* @return void
152162
*/
153-
private function setStoreExpectations($storeId)
163+
private function setStoreExpectations(): void
154164
{
155-
$this->orderMock->expects(static::atLeastOnce())
156-
->method('getStoreId')
157-
->willReturn($storeId);
158-
$this->customerAddressConfigMock->expects(static::atLeastOnce())
159-
->method('setStore')
160-
->with($storeId)
161-
->willReturnSelf();
165+
$storeMock = $this->getMockBuilder(StoreInterface::class)
166+
->disableOriginalConstructor()
167+
->onlyMethods(['getId'])
168+
->getMockForAbstractClass();
169+
$this->orderMock->expects(self::once())->method('getStore')->willReturn($storeMock);
170+
$this->storeManagerMck->expects(self::once())->method('setCurrentStore')->with($storeMock);
162171
}
163172
}

dev/tests/integration/testsuite/Magento/Sales/Model/Order/Address/RendererTest.php

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Sales\Model\Order\Address;
79

10+
use Magento\Config\Model\Config\Factory;
811
use Magento\Config\Model\ResourceModel\Config as ConfigResourceModel;
912
use Magento\Framework\App\Config;
1013
use Magento\Framework\Locale\TranslatedLists;
@@ -13,6 +16,7 @@
1316
use Magento\Sales\Model\Order\Address as OrderAddress;
1417
use Magento\Sales\Model\Order\Address\Renderer as OrderAddressRenderer;
1518
use Magento\Store\Model\Store;
19+
use Magento\Store\Model\StoreManagerInterface;
1620
use Magento\TestFramework\Helper\Bootstrap;
1721
use PHPUnit\Framework\TestCase;
1822

@@ -63,7 +67,7 @@ public function testFormat()
6367
'text' => 'text_customized',
6468
'oneline' => 'oneline_customized',
6569
'html' => 'html_customized',
66-
'pdf' => 'pdf_customized'
70+
'pdf' => 'pdf_customized',
6771
];
6872

6973
/** @var Store $store */
@@ -109,6 +113,39 @@ public function testFormat()
109113
$this->assertEquals($addressTemplates['pdf'], $this->orderAddressRenderer->format($address, 'pdf'));
110114
}
111115

116+
/**
117+
* Verify customer address attributes (e.g. Company) are respecting website scope configuration.
118+
*
119+
* @magentoDataFixture Magento/Store/_files/second_website_with_store_group_and_store.php
120+
* @magentoDataFixture Magento/Sales/_files/order_on_second_website.php
121+
* @magentoAppArea adminhtml
122+
* @magentoDbIsolation disabled
123+
* @magentoAppIsolation enabled
124+
*/
125+
public function testFormatNonDisplayedCompanyField()
126+
{
127+
$storeManager = $this->objectManager->get(StoreManagerInterface::class);
128+
$website = $storeManager->getWebsites(false, true)['test'];
129+
$configData = [
130+
'section' => 'customer',
131+
'website' => $website->getId(),
132+
'store' => null,
133+
'groups' => [
134+
'address' => [
135+
'fields' => [
136+
'company_show' => ['value' => ''],
137+
],
138+
],
139+
],
140+
];
141+
$configFactory = $this->objectManager->get(Factory::class);
142+
$config = $configFactory->create(['data' => $configData]);
143+
$config->save();
144+
$orderFixtureStore = $this->objectManager->create(Order::class)->loadByIncrementId('100000001');
145+
$address = $orderFixtureStore->getBillingAddress();
146+
self::assertStringNotContainsString('Test Company', $this->orderAddressRenderer->format($address, 'html'));
147+
}
148+
112149
/**
113150
* Order country will be translated to locale on which was placed an order
114151
*

dev/tests/integration/testsuite/Magento/Sales/_files/address_data.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
'region' => 'CA',
99
'region_id' => '12',
1010
'postcode' => '11111',
11+
'company' => 'Test Company',
1112
'lastname' => 'lastname',
1213
'firstname' => 'firstname',
1314
'street' => 'street',

0 commit comments

Comments
 (0)