_objectManager->create(\Magento\Checkout\Model\Session::class); $quoteItem = $this->_getQuoteItemIdByProductId($session->getQuote(), 1); $this->assertNotNull($quoteItem, 'Cannot get quote item for configurable product'); $this->dispatch( 'checkout/cart/configure/id/' . $quoteItem->getId() . '/product_id/' . $quoteItem->getProduct()->getId() ); $response = $this->getResponse(); $this->assertSessionMessages($this->isEmpty(), \Magento\Framework\Message\MessageInterface::TYPE_ERROR); $this->assertEquals( 1, \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath( '//button[@type="submit" and @title="Update Cart"]', $response->getBody() ), 'Response for configurable product doesn\'t contain "Update Cart" button' ); $this->assertEquals( 1, \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath( '//select[contains(@class,"super-attribute-select")]', $response->getBody() ), 'Response for configurable product doesn\'t contain select for super attribute' ); } /** * Gets \Magento\Quote\Model\Quote\Item from \Magento\Quote\Model\Quote by product id * * @param \Magento\Quote\Model\Quote $quote * @param mixed $productId * @return \Magento\Quote\Model\Quote\Item|null */ private function _getQuoteItemIdByProductId(\Magento\Quote\Model\Quote $quote, $productId) { /** @var $quoteItems \Magento\Quote\Model\Quote\Item[] */ $quoteItems = $quote->getAllItems(); foreach ($quoteItems as $quoteItem) { if ($productId == $quoteItem->getProductId()) { return $quoteItem; } } return null; } /** * Test for \Magento\Checkout\Controller\Cart\CouponPost::execute() with configurable product with last option * Covers MAGETWO-60352 * * @magentoDataFixture Magento/ConfigurableProduct/_files/quote_with_configurable_product_last_variation.php */ public function testExecuteForConfigurableLastOption() { /** @var $session \Magento\Checkout\Model\Session */ $session = $this->_objectManager->create(\Magento\Checkout\Model\Session::class); $quote = $session->getQuote(); $quote->setData('trigger_recollect', 1)->setTotalsCollectedFlag(true); $inputData = [ 'remove' => 0, 'coupon_code' => 'test' ]; $this->getRequest()->setMethod(HttpRequest::METHOD_POST); $this->getRequest()->setPostValue($inputData); $this->dispatch( 'checkout/cart/couponPost/' ); $this->assertSessionMessages( $this->equalTo(['The coupon code "test" is not valid.']), \Magento\Framework\Message\MessageInterface::TYPE_ERROR ); } }