123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Checkout\Test\Unit\CustomerData;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class CartTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Checkout\CustomerData\Cart
- */
- protected $model;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $checkoutSessionMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $catalogUrlMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $checkoutCartMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $checkoutHelperMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $itemPoolInterfaceMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $layoutMock;
- protected function setUp()
- {
- $this->checkoutSessionMock = $this->createMock(\Magento\Checkout\Model\Session::class);
- $this->catalogUrlMock = $this->createPartialMock(
- \Magento\Catalog\Model\ResourceModel\Url::class,
- ['getRewriteByProductStore']
- );
- $this->checkoutCartMock = $this->createMock(\Magento\Checkout\Model\Cart::class);
- $this->checkoutHelperMock = $this->createMock(\Magento\Checkout\Helper\Data::class);
- $this->layoutMock = $this->createMock(\Magento\Framework\View\LayoutInterface::class);
- $this->itemPoolInterfaceMock = $this->createMock(\Magento\Checkout\CustomerData\ItemPoolInterface::class);
- $this->model = new \Magento\Checkout\CustomerData\Cart(
- $this->checkoutSessionMock,
- $this->catalogUrlMock,
- $this->checkoutCartMock,
- $this->checkoutHelperMock,
- $this->itemPoolInterfaceMock,
- $this->layoutMock
- );
- }
- public function testIsGuestCheckoutAllowed()
- {
- $quoteMock = $this->createMock(\Magento\Quote\Model\Quote::class);
- $this->checkoutSessionMock->expects($this->once())->method('getQuote')->willReturn($quoteMock);
- $this->checkoutHelperMock->expects($this->once())->method('isAllowedGuestCheckout')->with($quoteMock)
- ->willReturn(true);
- $this->assertTrue($this->model->isGuestCheckoutAllowed());
- }
- public function testGetSectionData()
- {
- $summaryQty = 100;
- $subtotalValue = 200;
- $productId = 10;
- $storeId = 20;
- $productRewrite = [$productId => ['rewrite' => 'product']];
- $itemData = ['item' => 'data'];
- $shortcutButtonsHtml = '<span>Buttons</span>';
- $websiteId = 100;
- $subtotalMock = $this->createPartialMock(\Magento\Framework\DataObject::class, ['getValue']);
- $subtotalMock->expects($this->once())->method('getValue')->willReturn($subtotalValue);
- $totals = ['subtotal' => $subtotalMock];
- $quoteMock = $this->createPartialMock(
- \Magento\Quote\Model\Quote::class,
- ['getTotals', 'getHasError', 'getAllVisibleItems', 'getStore']
- );
- $this->checkoutSessionMock->expects($this->exactly(2))->method('getQuote')->willReturn($quoteMock);
- $quoteMock->expects($this->once())->method('getTotals')->willReturn($totals);
- $quoteMock->expects($this->once())->method('getHasError')->willReturn(false);
- $this->checkoutCartMock->expects($this->once())->method('getSummaryQty')->willReturn($summaryQty);
- $this->checkoutHelperMock->expects($this->once())
- ->method('formatPrice')
- ->with($subtotalValue)
- ->willReturn($subtotalValue);
- $this->checkoutHelperMock->expects($this->once())->method('canOnepageCheckout')->willReturn(true);
- $quoteItemMock = $this->createPartialMock(\Magento\Quote\Model\Quote\Item::class, ['getProduct', 'getStoreId']);
- $quoteMock->expects($this->once())->method('getAllVisibleItems')->willReturn([$quoteItemMock]);
- $storeMock = $this->createPartialMock(\Magento\Store\Model\System\Store::class, ['getWebsiteId']);
- $storeMock->expects($this->once())->method('getWebsiteId')->willReturn($websiteId);
- $quoteMock->expects($this->any())->method('getStore')->willReturn($storeMock);
- $productMock = $this->createPartialMock(
- \Magento\Catalog\Model\Product::class,
- ['isVisibleInSiteVisibility', 'getId', 'setUrlDataObject']
- );
- $quoteItemMock->expects($this->exactly(3))->method('getProduct')->willReturn($productMock);
- $quoteItemMock->expects($this->once())->method('getStoreId')->willReturn($storeId);
- $productMock->expects($this->once())->method('isVisibleInSiteVisibility')->willReturn(false);
- $productMock->expects($this->exactly(3))->method('getId')->willReturn($productId);
- $productMock->expects($this->once())
- ->method('setUrlDataObject')
- ->with(new \Magento\Framework\DataObject($productRewrite[$productId]))
- ->willReturnSelf();
- $this->catalogUrlMock->expects($this->once())
- ->method('getRewriteByProductStore')
- ->with([$productId => $storeId])
- ->willReturn($productRewrite);
- $this->itemPoolInterfaceMock->expects($this->once())
- ->method('getItemData')
- ->with($quoteItemMock)
- ->willReturn($itemData);
- $shortcutButtonsMock = $this->createMock(\Magento\Catalog\Block\ShortcutButtons::class);
- $this->layoutMock->expects($this->once())
- ->method('createBlock')
- ->with(\Magento\Catalog\Block\ShortcutButtons::class)
- ->willReturn($shortcutButtonsMock);
- $shortcutButtonsMock->expects($this->once())->method('toHtml')->willReturn($shortcutButtonsHtml);
- $this->checkoutHelperMock->expects($this->once())
- ->method('isAllowedGuestCheckout')
- ->with($quoteMock)
- ->willReturn(true);
- $expectedResult = [
- 'summary_count' => 100,
- 'subtotal' => 200,
- 'possible_onepage_checkout' => 1,
- 'items' => [
- ['item' => 'data']
- ],
- 'extra_actions' => '<span>Buttons</span>',
- 'isGuestCheckoutAllowed' => 1,
- 'website_id' => $websiteId,
- 'subtotalAmount' => 200,
- 'storeId' => null
- ];
- $this->assertEquals($expectedResult, $this->model->getSectionData());
- }
- /**
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function testGetSectionDataWithCompositeProduct()
- {
- $summaryQty = 100;
- $subtotalValue = 200;
- $productId = 10;
- $storeId = 20;
- $websiteId = 100;
- $productRewrite = [$productId => ['rewrite' => 'product']];
- $itemData = ['item' => 'data'];
- $shortcutButtonsHtml = '<span>Buttons</span>';
- $subtotalMock = $this->createPartialMock(\Magento\Framework\DataObject::class, ['getValue']);
- $subtotalMock->expects($this->once())->method('getValue')->willReturn($subtotalValue);
- $totals = ['subtotal' => $subtotalMock];
- $quoteMock = $this->createPartialMock(
- \Magento\Quote\Model\Quote::class,
- ['getTotals', 'getHasError', 'getAllVisibleItems', 'getStore']
- );
- $quoteItemMock = $this->createPartialMock(
- \Magento\Quote\Model\Quote\Item::class,
- ['getProduct', 'getOptionByCode', 'getStoreId']
- );
- $this->checkoutSessionMock->expects($this->exactly(2))->method('getQuote')->willReturn($quoteMock);
- $quoteMock->expects($this->once())->method('getTotals')->willReturn($totals);
- $quoteMock->expects($this->once())->method('getHasError')->willReturn(false);
- $storeMock = $this->createPartialMock(\Magento\Store\Model\System\Store::class, ['getWebsiteId']);
- $storeMock->expects($this->once())->method('getWebsiteId')->willReturn($websiteId);
- $quoteMock->expects($this->any())->method('getStore')->willReturn($storeMock);
- $this->checkoutCartMock->expects($this->once())->method('getSummaryQty')->willReturn($summaryQty);
- $this->checkoutHelperMock->expects($this->once())
- ->method('formatPrice')
- ->with($subtotalValue)
- ->willReturn($subtotalValue);
- $this->checkoutHelperMock->expects($this->once())->method('canOnepageCheckout')->willReturn(true);
- $quoteMock->expects($this->once())->method('getAllVisibleItems')->willReturn([$quoteItemMock]);
- $productMock = $this->createPartialMock(
- \Magento\Catalog\Model\Product::class,
- ['isVisibleInSiteVisibility', 'getId', 'setUrlDataObject']
- );
- $optionsMock = $this->createMock(\Magento\Quote\Model\Quote\Item\Option::class);
- $optionsMock->expects($this->once())->method('getProduct')->willReturn($productMock);
- $quoteItemMock->expects($this->exactly(2))->method('getProduct')->willReturn($productMock);
- $quoteItemMock->expects($this->exactly(2))
- ->method('getOptionByCode')
- ->with('product_type')
- ->willReturn($optionsMock);
- $quoteItemMock->expects($this->once())->method('getStoreId')->willReturn($storeId);
- $productMock->expects($this->once())->method('isVisibleInSiteVisibility')->willReturn(false);
- $productMock->expects($this->exactly(3))->method('getId')->willReturn($productId);
- $productMock->expects($this->once())
- ->method('setUrlDataObject')
- ->with(new \Magento\Framework\DataObject($productRewrite[$productId]))
- ->willReturnSelf();
- $this->catalogUrlMock->expects($this->once())
- ->method('getRewriteByProductStore')
- ->with([$productId => $storeId])
- ->willReturn($productRewrite);
- $shortcutButtonsMock = $this->createMock(\Magento\Catalog\Block\ShortcutButtons::class);
- $this->layoutMock->expects($this->once())
- ->method('createBlock')
- ->with(\Magento\Catalog\Block\ShortcutButtons::class)
- ->willReturn($shortcutButtonsMock);
- $shortcutButtonsMock->expects($this->once())->method('toHtml')->willReturn($shortcutButtonsHtml);
- $this->checkoutHelperMock->expects($this->once())
- ->method('isAllowedGuestCheckout')
- ->with($quoteMock)
- ->willReturn(true);
- $this->itemPoolInterfaceMock->expects($this->once())
- ->method('getItemData')
- ->with($quoteItemMock)
- ->willReturn($itemData);
- $expectedResult = [
- 'summary_count' => 100,
- 'subtotal' => 200,
- 'possible_onepage_checkout' => 1,
- 'items' => [
- ['item' => 'data']
- ],
- 'extra_actions' => '<span>Buttons</span>',
- 'isGuestCheckoutAllowed' => 1,
- 'website_id' => $websiteId,
- 'subtotalAmount' => 200,
- 'storeId' => null
- ];
- $this->assertEquals($expectedResult, $this->model->getSectionData());
- }
- }
|