123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Wishlist\Test\Unit\Model;
- use Magento\Framework\Exception\LocalizedException;
- use \Magento\Wishlist\Model\Item;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class ItemTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $registry;
- /**
- * @var \Magento\Catalog\Model\ResourceModel\Url|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $catalogUrl;
- /**
- * @var \Magento\Catalog\Model\ProductTypes\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $productTypeConfig;
- /**
- * @var \Magento\Wishlist\Model\ResourceModel\Item|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $resource;
- /**
- * @var \Magento\Wishlist\Model\ResourceModel\Item\Collection|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $collection;
- /**
- * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $storeManager;
- /**
- * @var \Magento\Framework\Stdlib\DateTime\DateTime|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $date;
- /**
- * @var \Magento\Wishlist\Model\Item\OptionFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $optionFactory;
- /**
- * @var \Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $itemOptFactory;
- /**
- * @var \Magento\Catalog\Api\ProductRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- protected $productRepository;
- /**
- * @var Item
- */
- protected $model;
- protected function setUp()
- {
- $context = $this->getMockBuilder(\Magento\Framework\Model\Context::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->registry = $this->getMockBuilder(\Magento\Framework\Registry::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->storeManager = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
- ->getMock();
- $this->date = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\DateTime::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->catalogUrl = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Url::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->optionFactory = $this->getMockBuilder(\Magento\Wishlist\Model\Item\OptionFactory::class)
- ->disableOriginalConstructor()
- ->setMethods(['create'])
- ->getMock();
- $this->itemOptFactory =
- $this->getMockBuilder(\Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory::class)
- ->disableOriginalConstructor()
- ->setMethods(['create'])
- ->getMock();
- $this->productTypeConfig = $this->getMockBuilder(\Magento\Catalog\Model\ProductTypes\ConfigInterface::class)
- ->getMock();
- $this->productRepository = $this->createMock(\Magento\Catalog\Api\ProductRepositoryInterface::class);
- $this->resource = $this->getMockBuilder(\Magento\Wishlist\Model\ResourceModel\Item::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->collection = $this->getMockBuilder(\Magento\Wishlist\Model\ResourceModel\Item\Collection::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->model = new Item(
- $context,
- $this->registry,
- $this->storeManager,
- $this->date,
- $this->catalogUrl,
- $this->optionFactory,
- $this->itemOptFactory,
- $this->productTypeConfig,
- $this->productRepository,
- $this->resource,
- $this->collection,
- []
- );
- }
- /**
- * @dataProvider getOptionsDataProvider
- */
- public function testAddGetOptions($code, $option)
- {
- $this->assertEmpty($this->model->getOptions());
- $optionMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item\Option::class)
- ->disableOriginalConstructor()
- ->setMethods(['setData', 'getCode', '__wakeup'])
- ->getMock();
- $optionMock->expects($this->any())
- ->method('setData')
- ->willReturnSelf();
- $optionMock->expects($this->any())
- ->method('getCode')
- ->willReturn($code);
- $this->optionFactory->expects($this->any())
- ->method('create')
- ->willReturn($optionMock);
- $this->model->addOption($option);
- $this->assertEquals(1, count($this->model->getOptions()));
- }
- /**
- * @dataProvider getOptionsDataProvider
- */
- public function testRemoveOptionByCode($code, $option)
- {
- $this->assertEmpty($this->model->getOptions());
- $optionMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item\Option::class)
- ->disableOriginalConstructor()
- ->setMethods(['setData', 'getCode', '__wakeup'])
- ->getMock();
- $optionMock->expects($this->any())
- ->method('setData')
- ->willReturnSelf();
- $optionMock->expects($this->any())
- ->method('getCode')
- ->willReturn($code);
- $this->optionFactory->expects($this->any())
- ->method('create')
- ->willReturn($optionMock);
- $this->model->addOption($option);
- $this->assertEquals(1, count($this->model->getOptions()));
- $this->model->removeOption($code);
- $actualOptions = $this->model->getOptions();
- $actualOption = array_pop($actualOptions);
- $this->assertTrue($actualOption->isDeleted());
- }
- /**
- * @return array
- */
- public function getOptionsDataProvider()
- {
- $optionMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item\Option::class)
- ->disableOriginalConstructor()
- ->setMethods(['getCode', '__wakeup'])
- ->getMock();
- $optionMock->expects($this->any())
- ->method('getCode')
- ->will($this->returnValue('second_key'));
- $productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
- ->disableOriginalConstructor()
- ->getMock();
- return [
- ['first_key', ['code' => 'first_key', 'value' => 'first_data']],
- ['second_key', $optionMock],
- ['third_key', new \Magento\Framework\DataObject(['code' => 'third_key', 'product' => $productMock])],
- ];
- }
- public function testCompareOptionsPositive()
- {
- $code = 'someOption';
- $optionValue = 100;
- $optionsOneMock = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
- ->disableOriginalConstructor()
- ->setMethods(['getCode', '__wakeup', 'getValue'])
- ->getMock();
- $optionsTwoMock = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
- ->disableOriginalConstructor()
- ->setMethods(['__wakeup', 'getValue'])
- ->getMock();
- $optionsOneMock->expects($this->once())->method('getCode')->will($this->returnValue($code));
- $optionsOneMock->expects($this->once())->method('getValue')->will($this->returnValue($optionValue));
- $optionsTwoMock->expects($this->once())->method('getValue')->will($this->returnValue($optionValue));
- $result = $this->model->compareOptions(
- [$code => $optionsOneMock],
- [$code => $optionsTwoMock]
- );
- $this->assertTrue($result);
- }
- public function testCompareOptionsNegative()
- {
- $code = 'someOption';
- $optionOneValue = 100;
- $optionTwoValue = 200;
- $optionsOneMock = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
- ->disableOriginalConstructor()
- ->setMethods(['getCode', '__wakeup', 'getValue'])
- ->getMock();
- $optionsTwoMock = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
- ->disableOriginalConstructor()
- ->setMethods(['__wakeup', 'getValue'])
- ->getMock();
- $optionsOneMock->expects($this->once())->method('getCode')->will($this->returnValue($code));
- $optionsOneMock->expects($this->once())->method('getValue')->will($this->returnValue($optionOneValue));
- $optionsTwoMock->expects($this->once())->method('getValue')->will($this->returnValue($optionTwoValue));
- $result = $this->model->compareOptions(
- [$code => $optionsOneMock],
- [$code => $optionsTwoMock]
- );
- $this->assertFalse($result);
- }
- public function testCompareOptionsNegativeOptionsTwoHaveNotOption()
- {
- $code = 'someOption';
- $optionsOneMock = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
- ->disableOriginalConstructor()
- ->setMethods(['getCode', '__wakeup'])
- ->getMock();
- $optionsTwoMock = $this->getMockBuilder(\Magento\Quote\Model\Quote\Item::class)
- ->disableOriginalConstructor()
- ->setMethods(['__wakeup'])
- ->getMock();
- $optionsOneMock->expects($this->once())->method('getCode')->will($this->returnValue($code));
- $result = $this->model->compareOptions(
- [$code => $optionsOneMock],
- ['someOneElse' => $optionsTwoMock]
- );
- $this->assertFalse($result);
- }
- public function testSetAndSaveItemOptions()
- {
- $this->assertEmpty($this->model->getOptions());
- $firstOptionMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item\Option::class)
- ->disableOriginalConstructor()
- ->setMethods(['getCode', 'isDeleted', 'delete', '__wakeup'])
- ->getMock();
- $firstOptionMock->expects($this->any())
- ->method('getCode')
- ->willReturn('first_code');
- $firstOptionMock->expects($this->any())
- ->method('isDeleted')
- ->willReturn(true);
- $firstOptionMock->expects($this->once())
- ->method('delete');
- $secondOptionMock = $this->getMockBuilder(\Magento\Wishlist\Model\Item\Option::class)
- ->disableOriginalConstructor()
- ->setMethods(['getCode', 'save', '__wakeup'])
- ->getMock();
- $secondOptionMock->expects($this->any())
- ->method('getCode')
- ->willReturn('second_code');
- $secondOptionMock->expects($this->once())
- ->method('save');
- $this->model->setOptions([$firstOptionMock, $secondOptionMock]);
- $this->assertNull($this->model->isOptionsSaved());
- $this->model->saveItemOptions();
- $this->assertTrue($this->model->isOptionsSaved());
- }
- public function testGetProductWithException()
- {
- $this->expectException(\Magento\Framework\Exception\LocalizedException::class);
- $this->expectExceptionMessage('Cannot specify product.');
- $this->model->getProduct();
- }
- public function testGetProduct()
- {
- $productId = 1;
- $storeId = 0;
- $this->model->setData('product_id', $productId);
- $this->model->setData('store_id', $storeId);
- $productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
- ->disableOriginalConstructor()
- ->setMethods(['setCustomOptions', 'setFinalPrice'])
- ->getMock();
- $productMock->expects($this->any())
- ->method('setFinalPrice')
- ->with(null);
- $productMock->expects($this->any())
- ->method('setCustomOptions')
- ->with([]);
- $this->productRepository->expects($this->once())
- ->method('getById')
- ->with($productId, false, $storeId, true)
- ->willReturn($productMock);
- $this->assertEquals($productMock, $this->model->getProduct());
- }
- }
|