Skip to content

Commit 4c917c0

Browse files
committed
Merge branch 'MC-31754' into 2.4-develop-com-pr9
2 parents 32a4979 + 480f779 commit 4c917c0

File tree

10 files changed

+678
-165
lines changed

10 files changed

+678
-165
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
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+
namespace Magento\Customer\Block;
9+
10+
use Magento\Customer\Model\Session;
11+
use Magento\Framework\ObjectManagerInterface;
12+
use Magento\Framework\View\LayoutInterface;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use Magento\TestFramework\Helper\Xpath;
15+
use PHPUnit\Framework\TestCase;
16+
17+
/**
18+
* Class check newsletter subscription block behavior
19+
*
20+
* @see \Magento\Customer\Block\Newsletter
21+
* @magentoAppArea frontend
22+
* @magentoDbIsolation enabled
23+
* @magentoDataFixture Magento/Customer/_files/customer.php
24+
*/
25+
class NewsletterTest extends TestCase
26+
{
27+
private const LABEL_XPATH = "//form[contains(@class, 'form-newsletter-manage')]"
28+
. "//span[contains(text(), 'Subscription option')]";
29+
private const CHECKBOX_XPATH = "//form[contains(@class, 'form-newsletter-manage')]"
30+
. "//input[@type='checkbox' and @name='is_subscribed']";
31+
private const CHECKBOX_TITLE_XPATH = "//form[contains(@class, 'form-newsletter-manage')]"
32+
. "//label/span[contains(text(), 'General Subscription')]";
33+
private const SAVE_BUTTON_XPATH = "//form[contains(@class, 'form-newsletter-manage')]"
34+
. "//button[@type='submit']/span[contains(text(), 'Save')]";
35+
36+
/** @var ObjectManagerInterface */
37+
private $objectManager;
38+
39+
/** @var LayoutInterface */
40+
private $layout;
41+
42+
/** @var Newsletter */
43+
private $block;
44+
45+
/** @var Session */
46+
private $customerSession;
47+
48+
/**
49+
* @inheritdoc
50+
*/
51+
protected function setUp()
52+
{
53+
parent::setUp();
54+
55+
$this->objectManager = Bootstrap::getObjectManager();
56+
$this->layout = $this->objectManager->get(LayoutInterface::class);
57+
$this->block = $this->layout->createBlock(Newsletter::class);
58+
$this->customerSession = $this->objectManager->get(Session::class);
59+
}
60+
61+
/**
62+
* @return void
63+
*/
64+
public function testSubscriptionCheckbox(): void
65+
{
66+
$this->customerSession->loginById(1);
67+
$html = $this->block->toHtml();
68+
$this->assertEquals(
69+
1,
70+
Xpath::getElementsCountForXpath(self::LABEL_XPATH, $html),
71+
'Subscription label is not present on the page'
72+
);
73+
$this->assertEquals(
74+
1,
75+
Xpath::getElementsCountForXpath(self::CHECKBOX_XPATH, $html),
76+
'Subscription checkbox is not present on the page'
77+
);
78+
$this->assertEquals(
79+
1,
80+
Xpath::getElementsCountForXpath(self::CHECKBOX_TITLE_XPATH, $html),
81+
'Subscription checkbox label is not present on the page'
82+
);
83+
$this->assertEquals(
84+
1,
85+
Xpath::getElementsCountForXpath(self::SAVE_BUTTON_XPATH, $html),
86+
'Subscription save button is not present on the page'
87+
);
88+
}
89+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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\Model\Data\CustomerFactory;
11+
use Magento\Customer\Model\GroupManagement;
12+
use Magento\Eav\Model\AttributeRepository;
13+
use Magento\Store\Model\StoreManagerInterface;
14+
use Magento\TestFramework\Helper\Bootstrap;
15+
16+
$objectManager = Bootstrap::getObjectManager();
17+
/** @var AccountManagementInterface $accountManagement */
18+
$accountManagement = $objectManager->get(AccountManagementInterface::class);
19+
$customerFactory = $objectManager->get(CustomerFactory::class);
20+
$customerFactory->create();
21+
/** @var StoreManagerInterface $storeManager */
22+
$storeManager = $objectManager->get(StoreManagerInterface::class);
23+
$website = $storeManager->getWebsite('base');
24+
/** @var GroupManagement $groupManagement */
25+
$groupManagement = $objectManager->get(GroupManagement::class);
26+
$defaultStoreId = $website->getDefaultStore()->getId();
27+
/** @var AttributeRepository $attributeRepository */
28+
$attributeRepository = $objectManager->get(AttributeRepository::class);
29+
$gender = $attributeRepository->get(CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER, 'gender')
30+
->getSource()->getOptionId('Male');
31+
$customer = $customerFactory->create();
32+
$customer->setWebsiteId($website->getId())
33+
->setEmail('new_customer@example.com')
34+
->setGroupId($groupManagement->getDefaultGroup($defaultStoreId)->getId())
35+
->setStoreId($defaultStoreId)
36+
->setPrefix('Mr.')
37+
->setFirstname('John')
38+
->setMiddlename('A')
39+
->setLastname('Smith')
40+
->setSuffix('Esq.')
41+
->setDefaultBilling(1)
42+
->setDefaultShipping(1)
43+
->setGender($gender);
44+
$accountManagement->createAccount($customer, 'Qwert12345');
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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\Framework\Exception\NoSuchEntityException;
10+
use Magento\Framework\Registry;
11+
use Magento\Store\Api\WebsiteRepositoryInterface;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
14+
$objectManager = Bootstrap::getObjectManager();
15+
/** @var Registry $registry */
16+
$registry = $objectManager->get(Registry::class);
17+
/** @var CustomerRepositoryInterface $customerRepository */
18+
$customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
19+
/** @var WebsiteRepositoryInterface $websiteRepository */
20+
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
21+
$websiteId = $websiteRepository->get('base')->getId();
22+
$registry->unregister('isSecureArea');
23+
$registry->register('isSecureArea', true);
24+
25+
try {
26+
$customer = $customerRepository->get('new_customer@example.com', $websiteId);
27+
$customerRepository->delete($customer);
28+
} catch (NoSuchEntityException $e) {
29+
//customer already deleted
30+
}
31+
32+
$registry->unregister('isSecureArea');
33+
$registry->register('isSecureArea', false);
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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+
namespace Magento\Newsletter\Block\Account;
9+
10+
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\Framework\View\Result\Page;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use PHPUnit\Framework\TestCase;
14+
15+
/**
16+
* Checks Newsletter Subscriptions link displaying in account dashboard
17+
*
18+
* @magentoAppArea frontend
19+
* @magentoDbIsolation enabled
20+
* @magentoAppIsolation enabled
21+
*/
22+
class LinkTest extends TestCase
23+
{
24+
/** @var ObjectManagerInterface */
25+
private $objectManager;
26+
27+
/** @var Page */
28+
private $page;
29+
30+
/**
31+
* @inheritdoc
32+
*/
33+
protected function setUp()
34+
{
35+
parent::setUp();
36+
37+
$this->objectManager = Bootstrap::getObjectManager();
38+
$this->page = $this->objectManager->create(Page::class);
39+
}
40+
41+
/**
42+
* @return void
43+
*/
44+
public function testNewsletterLink(): void
45+
{
46+
$this->preparePage();
47+
$block = $this->page->getLayout()->getBlock('customer-account-navigation-newsletter-subscriptions-link');
48+
$this->assertNotFalse($block);
49+
$html = $block->toHtml();
50+
$this->assertContains('newsletter/manage/', $html);
51+
$this->assertEquals('Newsletter Subscriptions', strip_tags($html));
52+
}
53+
54+
/**
55+
* @magentoConfigFixture current_store newsletter/general/active 0
56+
*
57+
* @return void
58+
*/
59+
public function testNewsletterLinkDisabled(): void
60+
{
61+
$this->preparePage();
62+
$block = $this->page->getLayout()->getBlock('customer-account-navigation-newsletter-subscriptions-link');
63+
$this->assertFalse($block);
64+
}
65+
66+
/**
67+
* Prepare page before render
68+
*
69+
* @return void
70+
*/
71+
private function preparePage(): void
72+
{
73+
$this->page->addHandle([
74+
'default',
75+
'customer_account',
76+
]);
77+
$this->page->getLayout()->generateXml();
78+
}
79+
}

0 commit comments

Comments
 (0)