Skip to content

Commit c47a085

Browse files
committed
MAGETWO-51392: Anonymous May Assign Quote to Registered Customer
1 parent 306d9db commit c47a085

File tree

1 file changed

+71
-45
lines changed

1 file changed

+71
-45
lines changed

dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestCartManagementTest.php

Lines changed: 71 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ public function testAssignCustomer()
7777
//Use masked cart Id
7878
$cartId = $quoteIdMask->getMaskedId();
7979

80+
// get customer ID token
81+
/** @var \Magento\Integration\Api\CustomerTokenServiceInterface $customerTokenService */
82+
$customerTokenService = $this->objectManager->create(
83+
'Magento\Integration\Api\CustomerTokenServiceInterface'
84+
);
85+
$token = $customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
8086
/** @var $repository \Magento\Customer\Api\CustomerRepositoryInterface */
8187
$repository = $this->objectManager->create('Magento\Customer\Api\CustomerRepositoryInterface');
8288
/** @var $customer \Magento\Customer\Api\Data\CustomerInterface */
@@ -87,11 +93,13 @@ public function testAssignCustomer()
8793
'rest' => [
8894
'resourcePath' => '/V1/guest-carts/' . $cartId,
8995
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
96+
'token' => $token
9097
],
9198
'soap' => [
9299
'service' => self::SERVICE_NAME,
93100
'serviceVersion' => 'V1',
94101
'operation' => self::SERVICE_NAME . 'AssignCustomer',
102+
'token' => $token
95103
],
96104
];
97105

@@ -193,60 +201,24 @@ public function testAssignCustomerThrowsExceptionIfTargetCartIsNotAnonymous()
193201
//Use masked cart Id
194202
$cartId = $quoteIdMask->getMaskedId();
195203

204+
// get customer ID token
205+
/** @var \Magento\Integration\Api\CustomerTokenServiceInterface $customerTokenService */
206+
$customerTokenService = $this->objectManager->create(
207+
'Magento\Integration\Api\CustomerTokenServiceInterface'
208+
);
209+
$token = $customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
210+
196211
$serviceInfo = [
197212
'rest' => [
198213
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
199214
'resourcePath' => '/V1/guest-carts/' . $cartId,
215+
'token' => $token
200216
],
201217
'soap' => [
202218
'service' => self::SERVICE_NAME,
203219
'serviceVersion' => 'V1',
204220
'operation' => self::SERVICE_NAME . 'AssignCustomer',
205-
],
206-
];
207-
208-
$requestData = [
209-
'cartId' => $cartId,
210-
'customerId' => $customerId,
211-
'storeId' => 1,
212-
];
213-
$this->_webApiCall($serviceInfo, $requestData);
214-
}
215-
216-
/**
217-
* @magentoApiDataFixture Magento/Sales/_files/quote.php
218-
* @magentoApiDataFixture Magento/Customer/_files/customer_non_default_website_id.php
219-
* @expectedException \Exception
220-
* @expectedExceptionMessage Cannot assign customer to the given cart. The cart belongs to different store.
221-
*/
222-
public function testAssignCustomerThrowsExceptionIfCartIsAssignedToDifferentStore()
223-
{
224-
$repository = $this->objectManager->create('Magento\Customer\Api\CustomerRepositoryInterface');
225-
/** @var $customer \Magento\Customer\Api\Data\CustomerInterface */
226-
$customer = $repository->getById(1);
227-
/** @var $quote \Magento\Quote\Model\Quote */
228-
$quote = $this->objectManager->create('Magento\Quote\Model\Quote')->load('test01', 'reserved_order_id');
229-
230-
$customerId = $customer->getId();
231-
$cartId = $quote->getId();
232-
233-
/** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
234-
$quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
235-
->create('Magento\Quote\Model\QuoteIdMaskFactory')
236-
->create();
237-
$quoteIdMask->load($cartId, 'quote_id');
238-
//Use masked cart Id
239-
$cartId = $quoteIdMask->getMaskedId();
240-
241-
$serviceInfo = [
242-
'soap' => [
243-
'service' => self::SERVICE_NAME,
244-
'serviceVersion' => 'V1',
245-
'operation' => self::SERVICE_NAME . 'AssignCustomer',
246-
],
247-
'rest' => [
248-
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
249-
'resourcePath' => '/V1/guest-carts/' . $cartId,
221+
'token' => $token
250222
],
251223
];
252224

@@ -288,15 +260,23 @@ public function testAssignCustomerThrowsExceptionIfCustomerAlreadyHasActiveCart(
288260

289261
$customerId = $customer->getId();
290262

263+
// get customer ID token
264+
/** @var \Magento\Integration\Api\CustomerTokenServiceInterface $customerTokenService */
265+
$customerTokenService = $this->objectManager->create(
266+
'Magento\Integration\Api\CustomerTokenServiceInterface'
267+
);
268+
$token = $customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
291269
$serviceInfo = [
292270
'soap' => [
293271
'service' => self::SERVICE_NAME,
294272
'operation' => self::SERVICE_NAME . 'AssignCustomer',
295273
'serviceVersion' => 'V1',
274+
'token' => $token
296275
],
297276
'rest' => [
298277
'resourcePath' => '/V1/guest-carts/' . $cartId,
299278
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
279+
'token' => $token
300280
],
301281
];
302282

@@ -344,4 +324,50 @@ public function testPlaceOrder()
344324
$this->assertCount(1, $items);
345325
$this->assertEquals('Simple Product', $items[0]->getName());
346326
}
327+
328+
/**
329+
* @magentoApiDataFixture Magento/Sales/_files/quote.php
330+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
331+
* @expectedException \Exception
332+
* @expectedExceptionMessage Cannot assign customer to the given cart. You don't have permission for this operation.
333+
*/
334+
public function testAssignCustomerByGuestUser()
335+
{
336+
/** @var $quote \Magento\Quote\Model\Quote */
337+
$quote = $this->objectManager->create('Magento\Quote\Model\Quote')->load('test01', 'reserved_order_id');
338+
$cartId = $quote->getId();
339+
/** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
340+
$quoteIdMaskFactory = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
341+
->create('Magento\Quote\Model\QuoteIdMaskFactory');
342+
$quoteIdMask = $quoteIdMaskFactory->create();
343+
$quoteIdMask->load($cartId, 'quote_id');
344+
//Use masked cart Id
345+
$cartId = $quoteIdMask->getMaskedId();
346+
$repository = $this->objectManager->create('Magento\Customer\Api\CustomerRepositoryInterface');
347+
/** @var $customer \Magento\Customer\Api\Data\CustomerInterface */
348+
$customer = $repository->getById(1);
349+
$customerId = $customer->getId();
350+
351+
$serviceInfo = [
352+
'rest' => [
353+
'resourcePath' => '/V1/guest-carts/' . $cartId,
354+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT,
355+
],
356+
'soap' => [
357+
'service' => self::SERVICE_NAME,
358+
'serviceVersion' => 'V1',
359+
'operation' => self::SERVICE_NAME . 'AssignCustomer',
360+
],
361+
];
362+
363+
$requestData = [
364+
'cartId' => $cartId,
365+
'customerId' => $customerId,
366+
'storeId' => 1,
367+
];
368+
// Cart must be anonymous (see fixture)
369+
$this->assertEmpty($quote->getCustomerId());
370+
371+
$this->_webApiCall($serviceInfo, $requestData);
372+
}
347373
}

0 commit comments

Comments
 (0)