123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Multishipping\Controller\Checkout;
- use Magento\Catalog\Model\Product;
- use Magento\Catalog\Api\ProductRepositoryInterface;
- use Magento\Checkout\Model\Session;
- use Magento\Customer\Api\AccountManagementInterface;
- use Magento\Customer\Model\Session as CustomerSession;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Quote\Model\Quote;
- use Magento\Framework\Api\SearchCriteriaBuilder;
- use Magento\Quote\Api\CartRepositoryInterface as QuoteRepository;
- use Magento\Framework\Serialize\Serializer\Json;
- /**
- * Test class for \Magento\Multishipping\Controller\Checkout
- *
- * @magentoAppArea frontend
- * @magentoDataFixture Magento/Sales/_files/quote.php
- * @magentoDataFixture Magento/Customer/_files/customer.php
- */
- class CheckItemsTest extends \Magento\TestFramework\TestCase\AbstractController
- {
- /**
- * @var Quote
- */
- private $quote;
- /**
- * @var Session
- */
- private $checkoutSession;
- /**
- * @var ProductRepositoryInterface
- */
- private $productRepository;
- /**
- * @var Json
- */
- private $json;
- /**
- * @inheritdoc
- */
- public function setUp()
- {
- parent::setUp();
- $this->checkoutSession = $this->_objectManager->get(Session::class);
- $this->productRepository = $this->_objectManager->get(ProductRepositoryInterface::class);
- $this->json = $this->_objectManager->get(Json::class);
- $this->quote = $this->getQuote('test01');
- $this->checkoutSession->setQuoteId($this->quote->getId());
- $this->checkoutSession->setCartWasUpdated(false);
- }
- /**
- * Validator of quote items.
- *
- * @param array $requestQuantity
- * @param array $expectedResponse
- *
- * @magentoConfigFixture current_store multishipping/options/checkout_multiple 1
- * @magentoConfigFixture current_store multishipping/options/checkout_multiple_maximum_qty 200
- * @dataProvider requestDataProvider
- */
- public function testExecute($requestQuantity, $expectedResponse)
- {
- $this->loginCustomer();
- try {
- /** @var $product Product */
- $product = $this->productRepository->get('simple');
- } catch (\Exception $e) {
- $this->fail('No such product entity');
- }
- $quoteItem = $this->quote->getItemByProduct($product);
- $this->assertNotFalse($quoteItem, 'Cannot get quote item for simple product');
- $request = [];
- if (!empty($requestQuantity) && is_array($requestQuantity)) {
- $request= [
- 'ship' => [
- [$quoteItem->getId() => $requestQuantity],
- ]
- ];
- }
- $this->getRequest()->setPostValue($request);
- $this->dispatch('multishipping/checkout/checkItems');
- $response = $this->getResponse()->getBody();
- $this->assertEquals($expectedResponse, $this->json->unserialize($response));
- }
- /**
- * Authenticates customer and creates customer session.
- */
- private function loginCustomer()
- {
- $logger = $this->createMock(\Psr\Log\LoggerInterface::class);
- /** @var AccountManagementInterface $service */
- $service = $this->_objectManager->create(AccountManagementInterface::class);
- try {
- $customer = $service->authenticate('customer@example.com', 'password');
- } catch (LocalizedException $e) {
- $this->fail($e->getMessage());
- }
- /** @var CustomerSession $customerSession */
- $customerSession = $this->_objectManager->create(CustomerSession::class, [$logger]);
- $customerSession->setCustomerDataAsLoggedIn($customer);
- }
- /**
- * Gets quote by reserved order id.
- *
- * @param string $reservedOrderId
- * @return Quote
- */
- private function getQuote($reservedOrderId)
- {
- /** @var SearchCriteriaBuilder $searchCriteriaBuilder */
- $searchCriteriaBuilder = $this->_objectManager->create(SearchCriteriaBuilder::class);
- $searchCriteria = $searchCriteriaBuilder->addFilter('reserved_order_id', $reservedOrderId)
- ->create();
- /** @var QuoteRepository $quoteRepository */
- $quoteRepository = $this->_objectManager->get(QuoteRepository::class);
- $items = $quoteRepository->getList($searchCriteria)
- ->getItems();
- return array_pop($items);
- }
- /**
- * Variations of request data.
- * @returns array
- */
- public function requestDataProvider(): array
- {
- return [
- [
- 'request' => [],
- 'response' => [
- 'success' => false,
- 'error_message' => 'We are unable to process your request. Please, try again later.'
- ]
- ],
- [
- 'request' => ['qty' => 2],
- 'response' => [
- 'success' => true,
- ]
- ],
- [
- 'request' => ['qty' => 101],
- 'response' => [
- 'success' => false,
- 'error_message' => 'The requested qty is not available']
- ],
- [
- 'request' => ['qty' => 230],
- 'response' => [
- 'success' => false,
- 'error_message' => 'Maximum qty allowed for Shipping to multiple addresses is 200']
- ],
- ];
- }
- }
|