![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/dev/tests/integration/testsuite/Magento/Checkout/Controller/Cart/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Checkout\Controller\Cart; use Laminas\Stdlib\Parameters; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Checkout\Model\SessionFactory as CheckoutSessionFactory; use Magento\Framework\App\Request\Http as HttpRequest; use Magento\Framework\Escaper; use Magento\Framework\Message\MessageInterface; use Magento\Framework\Serialize\SerializerInterface; use Magento\TestFramework\Store\ExecuteInStoreContext; use Magento\TestFramework\TestCase\AbstractController; /** * Class add product to cart controller. * * @see \Magento\Checkout\Controller\Cart\Add * @magentoAppArea frontend * @magentoDbIsolation enabled */ class AddTest extends AbstractController { /** @var SerializerInterface */ private $json; /** @var CheckoutSessionFactory */ private $checkoutSessionFactory; /** @var ProductRepositoryInterface */ private $productRepository; /** @var ExecuteInStoreContext */ private $executeInStoreContext; /** @var Escaper */ private $escaper; /** * @inheritdoc */ protected function setUp(): void { parent::setUp(); $this->json = $this->_objectManager->get(SerializerInterface::class); $this->checkoutSessionFactory = $this->_objectManager->get(CheckoutSessionFactory::class); $this->productRepository = $this->_objectManager->get(ProductRepositoryInterface::class); $this->productRepository->cleanCache(); $this->executeInStoreContext = $this->_objectManager->get(ExecuteInStoreContext::class); $this->escaper = $this->_objectManager->get(Escaper::class); } /** * Test with simple product and activated redirect to cart * * @magentoDataFixture Magento/Catalog/_files/products.php * @magentoConfigFixture current_store checkout/cart/redirect_to_cart 1 * * @return void */ public function testMessageAtAddToCartWithRedirect(): void { $this->prepareReferer(); $checkoutSession = $this->checkoutSessionFactory->create(); $postData = [ 'qty' => '1', 'product' => '1', 'custom_price' => 1, 'isAjax' => 1, ]; $this->dispatchAddToCartRequest($postData); $this->assertEquals( $this->json->serialize(['backUrl' => 'http://localhost/checkout/cart/']), $this->getResponse()->getBody() ); $this->assertSessionMessages( $this->containsEqual((string)__('You added %1 to your shopping cart.', 'Simple Product')), MessageInterface::TYPE_SUCCESS ); $this->assertCount(1, $checkoutSession->getQuote()->getItemsCollection()); } /** * Test with simple product and deactivated redirect to cart * * @magentoDataFixture Magento/Catalog/_files/products.php * @magentoConfigFixture current_store checkout/cart/redirect_to_cart 0 * * @return void */ public function testMessageAtAddToCartWithoutRedirect(): void { $this->prepareReferer(); $checkoutSession = $this->checkoutSessionFactory->create(); $postData = [ 'qty' => '1', 'product' => '1', 'custom_price' => 1, 'isAjax' => 1, ]; $this->dispatchAddToCartRequest($postData); $this->assertFalse($this->getResponse()->isRedirect()); $this->assertEquals('[]', $this->getResponse()->getBody()); $message = (string)__( 'You added %1 to your <a href="%2">shopping cart</a>.', 'Simple Product', 'http://localhost/checkout/cart/' ); $this->assertSessionMessages( $this->containsEqual("\n" . $message), MessageInterface::TYPE_SUCCESS ); $this->assertCount(1, $checkoutSession->getQuote()->getItemsCollection()); } /** * @dataProvider wrongParamsDataProvider * * @param array $params * @return void */ public function testWithWrongParams(array $params): void { $this->prepareReferer(); $this->dispatchAddToCartRequest($params); $this->assertRedirect($this->stringContains('http://localhost/test')); } /** * @return array */ public function wrongParamsDataProvider(): array { return [ 'empty_params' => ['params' => []], 'with_not_existing_product_id' => ['params' => ['product' => 989]], ]; } /** * @magentoDataFixture Magento/Catalog/_files/product_simple_duplicated.php * @magentoDataFixture Magento/Store/_files/second_website_with_two_stores.php * * @return void */ public function testAddProductFromUnavailableWebsite(): void { $this->prepareReferer(); $product = $this->productRepository->get('simple-1'); $postData = ['product' => $product->getId()]; $this->executeInStoreContext->execute('fixture_second_store', [$this, 'dispatchAddToCartRequest'], $postData); $this->assertRedirect($this->stringContains('http://localhost/test')); $message = $this->escaper->escapeHtml( (string)__('The product wasn\'t found. Verify the product and try again.') ); $this->assertSessionMessages($this->containsEqual($message), MessageInterface::TYPE_ERROR); } /** * @magentoDataFixture Magento/Catalog/_files/product_simple_duplicated.php * * @return void */ public function testAddProductWithUnavailableQty(): void { $product = $this->productRepository->get('simple-1'); $postData = ['product' => $product->getId(), 'qty' => '1000']; $this->dispatchAddToCartRequest($postData); $message = (string)__('The requested qty is not available'); $this->assertSessionMessages($this->containsEqual($message), MessageInterface::TYPE_ERROR); $this->assertRedirect($this->stringContains($product->getProductUrl())); } /** * @magentoDataFixture Magento/Catalog/_files/products_related_multiple.php * * @return void */ public function testAddProductWithRelated(): void { $this->prepareReferer(); $checkoutSession = $this->checkoutSessionFactory->create(); $product = $this->productRepository->get('simple_with_cross'); $params = [ 'product' => $product->getId(), 'related_product' => implode(',', $product->getRelatedProductIds()), ]; $this->dispatchAddToCartRequest($params); $this->assertCount(3, $checkoutSession->getQuote()->getItemsCollection()); $message = (string)__( 'You added %1 to your <a href="%2">shopping cart</a>.', $product->getName(), 'http://localhost/checkout/cart/' ); $this->assertSessionMessages( $this->containsEqual("\n" . $message), MessageInterface::TYPE_SUCCESS ); } /** * Dispatch add product to cart request. * * @param array $postData * @return void */ public function dispatchAddToCartRequest(array $postData = []): void { $this->getRequest()->setPostValue($postData); $this->getRequest()->setMethod(HttpRequest::METHOD_POST); $this->dispatch('checkout/cart/add'); } /** * Prepare referer to test. * * @return void */ private function prepareReferer(): void { $parameters = $this->_objectManager->create(Parameters::class); $parameters->set('HTTP_REFERER', 'http://localhost/test'); $this->getRequest()->setServer($parameters); } }