Skip to content

Commit 0103210

Browse files
committed
WIP: BUG#Ac-2797
1 parent 83f3d01 commit 0103210

File tree

4 files changed

+129
-2
lines changed

4 files changed

+129
-2
lines changed

app/code/Magento/CustomerGraphQl/Model/Resolver/IsSubscribed.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function resolve(
4949
/** @var CustomerInterface $customer */
5050
$customer = $value['model'];
5151
$customerId = (int)$customer->getId();
52-
$websiteId = (int)$customer->getWebsiteId();
52+
$websiteId = (int)$context->getExtensionAttributes()->getStore()->getWebsiteId();
5353
$status = $this->subscriberFactory->create()->loadByCustomer($customerId, $websiteId)->isSubscribed();
5454

5555
return (bool)$status;

dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/SubscriptionStatusTest.php

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
namespace Magento\GraphQl\Customer;
99

10-
use Exception;
1110
use Magento\Framework\Exception\AuthenticationException;
1211
use Magento\Integration\Api\CustomerTokenServiceInterface;
1312
use Magento\Newsletter\Model\SubscriberFactory;
@@ -151,6 +150,40 @@ public function testUnsubscribeCustomer()
151150
$this->assertFalse($response['updateCustomer']['customer']['is_subscribed']);
152151
}
153152

153+
/**
154+
* @magentoApiDataFixture Magento/Store/_files/multiple_websites_with_store_groups_stores.php
155+
* @magentoApiDataFixture Magento/Customer/_files/create_customer_for_second_website.php
156+
* @magentoConfigFixture default_store customer/account_share/scope 0
157+
*/
158+
public function testSubscriptionStatusInMultiWebsiteSetup(): void
159+
{
160+
$currentEmail = 'axl@rose.com';
161+
$currentPassword = 'axl@123';
162+
163+
$query = <<<QUERY
164+
mutation {
165+
updateCustomer(
166+
input: {
167+
is_subscribed: true
168+
}
169+
) {
170+
customer {
171+
is_subscribed
172+
}
173+
}
174+
}
175+
QUERY;
176+
$headers = [
177+
'Store' => 'third_store_view',
178+
'Authorization' => sprintf(
179+
'Bearer %s',
180+
$this->customerTokenService->createCustomerAccessToken($currentEmail, $currentPassword)
181+
),
182+
];
183+
$response = $this->graphQlMutation($query, [], '', $headers);
184+
$this->assertTrue($response['updateCustomer']['customer']['is_subscribed']);
185+
}
186+
154187
/**
155188
* @param string $email
156189
* @param string $password
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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\Authorization\Model\UserContextInterface;
9+
use Magento\Customer\Api\CustomerRepositoryInterface;
10+
use Magento\Customer\Model\Customer;
11+
use Magento\Customer\Model\CustomerRegistry;
12+
use Magento\Customer\Model\Data\CustomerFactory;
13+
use Magento\Customer\Model\GroupManagement;
14+
use Magento\JwtUserToken\Api\Data\Revoked;
15+
use Magento\JwtUserToken\Api\RevokedRepositoryInterface;
16+
use Magento\Store\Api\WebsiteRepositoryInterface;
17+
use Magento\Store\Model\StoreManagerInterface;
18+
use Magento\TestFramework\Helper\Bootstrap;
19+
20+
$objectManager = Bootstrap::getObjectManager();
21+
/** @var WebsiteRepositoryInterface $websiteRepository */
22+
$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class);
23+
$websiteId = $websiteRepository->get('second')->getId();
24+
/** @var StoreManagerInterface $storeManager */
25+
$storeManager = $objectManager->get(StoreManagerInterface::class);
26+
$store = $storeManager->getStore('second_store_view');
27+
$defaultGroupId = $objectManager->get(GroupManagement::class)->getDefaultGroup($store->getStoreId())->getId();
28+
/** @var $repository CustomerRepositoryInterface */
29+
$repository = $objectManager->create(CustomerRepositoryInterface::class);
30+
$customer = $objectManager->create(Customer::class);
31+
/** @var CustomerRegistry $customerRegistry */
32+
$customerRegistry = $objectManager->get(CustomerRegistry::class);
33+
/** @var Customer $customer */
34+
$customer->setWebsiteId($websiteId)
35+
->setId(2)
36+
->setEmail('axl@rose.com')
37+
->setPassword('axl@123')
38+
->setGroupId($defaultGroupId)
39+
->setStoreId($store->getStoreId())
40+
->setIsActive(1)
41+
->setPrefix('Mr.')
42+
->setFirstname('Axl')
43+
->setLastname('Rose')
44+
->setDefaultBilling(1)
45+
->setDefaultShipping(1)
46+
->setTaxvat('12')
47+
->setGender(0);
48+
49+
$customer->isObjectNew(true);
50+
$customer->save();
51+
$customerRegistry->remove($customer->getId());
52+
/** @var RevokedRepositoryInterface $revokedRepo */
53+
$revokedRepo = $objectManager->get(RevokedRepositoryInterface::class);
54+
$revokedRepo->saveRevoked(
55+
new Revoked(
56+
UserContextInterface::USER_TYPE_CUSTOMER,
57+
(int) $customer->getId(),
58+
time() - 3600 * 24
59+
)
60+
);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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+
22+
$registry->unregister('isSecureArea');
23+
$registry->register('isSecureArea', true);
24+
25+
try {
26+
$websiteId = $websiteRepository->get('second')->getId();
27+
$customer = $customerRepository->get('axl@rose.com', $websiteId);
28+
$customerRepository->delete($customer);
29+
} catch (NoSuchEntityException $e) {
30+
//customer or website already deleted
31+
}
32+
33+
$registry->unregister('isSecureArea');
34+
$registry->register('isSecureArea', false);

0 commit comments

Comments
 (0)