Skip to content

Commit 59b6780

Browse files
committed
MC-36966: Create automated test for "The type of the State input field for the multistore is incorrect when restricted by country"
1 parent 32ed03c commit 59b6780

File tree

5 files changed

+166
-0
lines changed

5 files changed

+166
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Customer\Api\AccountManagementInterface;
9+
use Magento\Customer\Api\CustomerMetadataInterface;
10+
use Magento\Customer\Api\Data\CustomerInterface;
11+
use Magento\Customer\Model\Data\CustomerFactory;
12+
use Magento\Customer\Model\GroupManagement;
13+
use Magento\Eav\Model\AttributeRepository;
14+
use Magento\Store\Api\WebsiteRepositoryInterface;
15+
use Magento\Store\Model\StoreManagerInterface;
16+
use Magento\TestFramework\Helper\Bootstrap;
17+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
18+
19+
Resolver::getInstance()->requireDataFixture('Magento/Store/_files/second_website_with_two_stores.php');
20+
21+
$objectManager = Bootstrap::getObjectManager();
22+
/** @var WebsiteRepositoryInterface $websiteRepository */
23+
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
24+
$websiteId = $websiteRepository->get('test')->getId();
25+
/** @var StoreManagerInterface $storeManager */
26+
$storeManager = $objectManager->get(StoreManagerInterface::class);
27+
$store = $storeManager->getStore('fixture_third_store');
28+
/** @var AccountManagementInterface $accountManagment */
29+
$accountManagment = $objectManager->get(AccountManagementInterface::class);
30+
/** @var CustomerFactory $customerFactory */
31+
$customerFactory = $objectManager->get(CustomerFactory::class);
32+
/** @var AttributeRepository $attributeRepository */
33+
$attributeRepository = $objectManager->get(AttributeRepository::class);
34+
$gender = $attributeRepository->get(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, CustomerInterface::GENDER)
35+
->getSource()->getOptionId('Male');
36+
$defaultGroupId = $objectManager->get(GroupManagement::class)->getDefaultGroup($store->getStoreId())->getId();
37+
38+
$customer = $customerFactory->create();
39+
$customer->setWebsiteId($websiteId)
40+
->setEmail('customer_second_ws_with_addr@example.com')
41+
->setGroupId($defaultGroupId)
42+
->setStoreId($store->getStoreId())
43+
->setFirstname('John')
44+
->setLastname('Smith')
45+
->setDefaultBilling(1)
46+
->setDefaultShipping(1)
47+
->setGender($gender);
48+
49+
$accountManagment->createAccount($customer, 'Apassword1');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Framework\Registry;
9+
use Magento\Customer\Api\CustomerRepositoryInterface;
10+
use Magento\Framework\Exception\NoSuchEntityException;
11+
use Magento\Store\Api\WebsiteRepositoryInterface;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
14+
15+
$objectManager = Bootstrap::getObjectManager();
16+
/** @var Registry $registry */
17+
$registry = $objectManager->get(Registry::class);
18+
/** @var CustomerRepositoryInterface $customerRepository */
19+
$customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
20+
/** @var WebsiteRepositoryInterface $websiteRepository */
21+
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
22+
$websiteId = $websiteRepository->get('test')->getId();
23+
24+
$registry->unregister('isSecureArea');
25+
$registry->register('isSecureArea', true);
26+
27+
try {
28+
$customer = $customerRepository->get('customer_second_ws_with_addr@example.com', $websiteId);
29+
$customerRepository->delete($customer);
30+
} catch (NoSuchEntityException $e) {
31+
//customer already deleted
32+
}
33+
34+
$registry->unregister('isSecureArea');
35+
$registry->register('isSecureArea', false);
36+
37+
Resolver::getInstance()->requireDataFixture('Magento/Store/_files/second_website_with_two_stores_rollback.php');

dev/tests/integration/testsuite/Magento/Sales/Block/Adminhtml/Order/Address/FormTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\Sales\Block\Adminhtml\Order\Address;
99

10+
use Magento\Directory\Model\ResourceModel\Country\CollectionFactory;
1011
use Magento\Framework\ObjectManagerInterface;
1112
use Magento\Framework\Registry;
1213
use Magento\Framework\View\LayoutInterface;
@@ -15,6 +16,7 @@
1516
use Magento\Sales\Api\Data\OrderInterfaceFactory;
1617
use Magento\TestFramework\App\Config;
1718
use Magento\TestFramework\Helper\Bootstrap;
19+
use Magento\TestFramework\Helper\Xpath;
1820
use PHPUnit\Framework\TestCase;
1921

2022
/**
@@ -38,6 +40,9 @@ class FormTest extends TestCase
3840
/** @var OrderInterfaceFactory */
3941
private $orderFactory;
4042

43+
/** @var CollectionFactory */
44+
private $countryCollectionFactory;
45+
4146
/**
4247
* @inheritdoc
4348
*/
@@ -50,6 +55,7 @@ protected function setUp(): void
5055
$this->orderFactory = $this->objectManager->get(OrderInterfaceFactory::class);
5156
$this->registry = $this->objectManager->get(Registry::class);
5257
$this->objectManager->removeSharedInstance(Config::class);
58+
$this->countryCollectionFactory = $this->objectManager->get(CollectionFactory::class);
5359
}
5460

5561
/**
@@ -110,6 +116,32 @@ public function testCountryIdInNotAllowedList(): void
110116
$this->assertCountryField('CA');
111117
}
112118

119+
/**
120+
* @magentoDbIsolation disabled
121+
*
122+
* @magentoDataFixture Magento/Sales/_files/order_with_customer_on_second_website.php
123+
*
124+
* @magentoConfigFixture default_store general/country/default UA
125+
* @magentoConfigFixture default_store general/country/allow UA
126+
*
127+
* @return void
128+
*/
129+
public function testFormRenderedWithSelectRegionInput(): void
130+
{
131+
$address = $this->getOrderAddress('100000001');
132+
$this->registerOrderAddress($address);
133+
$form = $this->block->getForm();
134+
$countryElement = $form->getElement('country_id');
135+
$this->assertNotNull($countryElement);
136+
$this->assertEquals('US', $countryElement->getEscapedValue());
137+
$html = $form->toHtml();
138+
$regionIdSelectXpath = '//select[@id=\'region_id\']';
139+
$this->assertEquals(1, Xpath::getElementsCountForXpath($regionIdSelectXpath, $html));
140+
$countryOptionsXpath = '//select[@id=\'country_id\']/option';
141+
$allowedCountriesCount = count($this->countryCollectionFactory->create()->loadByStore());
142+
$this->assertEquals($allowedCountriesCount, Xpath::getElementsCountForXpath($countryOptionsXpath, $html));
143+
}
144+
113145
/**
114146
* Prepares address edit from block.
115147
*
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Customer\Api\CustomerRepositoryInterface;
9+
use Magento\Sales\Api\Data\OrderInterface;
10+
use Magento\Sales\Api\Data\OrderInterfaceFactory;
11+
use Magento\Sales\Api\OrderRepositoryInterface;
12+
use Magento\Store\Model\StoreManagerInterface;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
15+
16+
Resolver::getInstance()->requireDataFixture('Magento/Sales/_files/order.php');
17+
Resolver::getInstance()->requireDataFixture('Magento/Customer/_files/customer_for_second_website_with_address.php');
18+
19+
$objectManager = Bootstrap::getObjectManager();
20+
/** @var StoreManagerInterface $storeManager */
21+
$storeManager = $objectManager->get(StoreManagerInterface::class);
22+
$storeId = (int)$storeManager->getStore('fixture_third_store')->getId();
23+
$websiteId = (int)$storeManager->getWebsite('test')->getId();
24+
/** @var CustomerRepositoryInterface $customerRepository */
25+
$customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
26+
$customerId = $customerRepository->get(
27+
'customer_second_ws_with_addr@example.com',
28+
$websiteId
29+
)->getId();
30+
/** @var OrderRepositoryInterface $orderRepository */
31+
$orderRepository = $objectManager->get(OrderRepositoryInterface::class);
32+
/** @var OrderInterface $order */
33+
$order = $objectManager->get(OrderInterfaceFactory::class)->create()->loadByIncrementId('100000001');
34+
$order->setCustomerId((int)$customerId)->setCustomerIsGuest(false)->setStoreId($storeId);
35+
$orderRepository->save($order);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\TestFramework\Workaround\Override\Fixture\Resolver;
9+
10+
Resolver::getInstance()->requireDataFixture('Magento/Sales/_files/order_rollback.php');
11+
Resolver::getInstance()->requireDataFixture(
12+
'Magento/Customer/_files/customer_for_second_website_with_address_rollback.php'
13+
);

0 commit comments

Comments
 (0)