![]() 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/vendor/magento/module-swatches/Test/Unit/Controller/Ajax/ |
<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Swatches\Test\Unit\Controller\Ajax; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\ProductFactory; use Magento\Framework\App\Action\Context; use Magento\Framework\App\RequestInterface; use Magento\Framework\App\ResponseInterface; use Magento\Framework\Controller\Result\Json; use Magento\Framework\Controller\ResultFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\PageCache\Model\Config; use Magento\Swatches\Controller\Ajax\Media; use Magento\Swatches\Helper\Data; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class MediaTest extends TestCase { /** @var array */ private $mediaGallery; /** @var Data|MockObject */ private $swatchHelperMock; /** @var ProductFactory|MockObject */ private $productModelFactoryMock; /** @var Config|MockObject */ private $config; /** @var Product|MockObject */ private $productMock; /** @var Context|MockObject */ private $contextMock; /** @var RequestInterface|MockObject */ private $requestMock; /** @var ResponseInterface|MockObject */ private $responseMock; /** @var ResultFactory|MockObject */ private $resultFactory; /** @var Json|MockObject */ private $jsonMock; /** @var ObjectManager */ private $objectManager; /** @var ObjectManager|Media */ private $controller; /** @var int */ private $productId = 23; /** * @inheridoc */ protected function setUp(): void { $this->mediaGallery = [ 'image' => '/m/a/magento.png', 'small_image' => '/m/a/magento.png', 'thumbnail' => '/m/a/magento.png', 'swatch_image' => '/m/a/magento.png', ]; $this->objectManager = new ObjectManager($this); $this->swatchHelperMock = $this->createMock(Data::class); $this->productModelFactoryMock = $this->createPartialMock( ProductFactory::class, ['create'] ); $this->config = $this->createMock(Config::class); $this->config->method('getTtl')->willReturn(1); $this->productMock = $this->createMock(Product::class); $this->contextMock = $this->createMock(Context::class); $this->requestMock = $this->getMockForAbstractClass(RequestInterface::class); $this->contextMock->method('getRequest')->willReturn($this->requestMock); $this->responseMock = $this->getMockBuilder(ResponseInterface::class) ->disableOriginalConstructor() ->setMethods(['setPublicHeaders']) ->getMockForAbstractClass(); $this->responseMock->method('setPublicHeaders')->willReturnSelf(); $this->contextMock->method('getResponse')->willReturn($this->responseMock); $this->resultFactory = $this->createPartialMock(ResultFactory::class, ['create']); $this->contextMock->method('getResultFactory')->willReturn($this->resultFactory); $this->jsonMock = $this->createMock(Json::class); $this->resultFactory->expects($this->once())->method('create')->with('json')->willReturn($this->jsonMock); $this->controller = $this->objectManager->getObject( Media::class, [ 'context' => $this->contextMock, 'swatchHelper' => $this->swatchHelperMock, 'productModelFactory' => $this->productModelFactoryMock, 'config' => $this->config ] ); } /** * Prepare product mock for test execution. * * @return void */ private function prepareProductMock(): void { $this->requestMock ->expects($this->once()) ->method('getParam') ->with('product_id') ->willReturn($this->productId); $this->productModelFactoryMock ->expects($this->once()) ->method('create') ->willReturn($this->productMock); $this->productMock ->expects($this->once()) ->method('load') ->with($this->productId) ->willReturn($this->productMock); $this->productMock ->expects($this->once()) ->method('getIdentities') ->willReturn(['tags']); } /** * Check that controller return media gallery for the product. * * @return void */ public function testExecute() { $this->prepareProductMock(); $this->productMock ->expects($this->once()) ->method('getId') ->willReturn($this->productId); $this->productMock ->expects($this->once()) ->method('getStatus') ->willReturn(Status::STATUS_ENABLED); $this->swatchHelperMock ->expects($this->once()) ->method('getProductMediaGallery') ->with($this->productMock) ->willReturn($this->mediaGallery); $this->jsonMock ->expects($this->once()) ->method('setData') ->with($this->mediaGallery)->willReturnSelf(); $result = $this->controller->execute(); $this->assertInstanceOf(Json::class, $result); } /** * Check that controller does not crash while taking the non-existing product. * * @return void */ public function testExecuteNonExistingProduct() { $this->prepareProductMock(); $this->productMock ->expects($this->once()) ->method('getId') ->willReturn(null); $this->jsonMock ->expects($this->once()) ->method('setData') ->with([])->willReturnSelf(); $result = $this->controller->execute(); $this->assertInstanceOf(Json::class, $result); } /** * Check that controller does not return media gallery for disabled product. * * @return void */ public function testExecuteDisabledProduct() { $this->prepareProductMock(); $this->productMock ->expects($this->once()) ->method('getId') ->willReturn($this->productId); $this->productMock ->expects($this->once()) ->method('getStatus') ->willReturn(Status::STATUS_DISABLED); $this->jsonMock ->expects($this->once()) ->method('setData') ->with([])->willReturnSelf(); $result = $this->controller->execute(); $this->assertInstanceOf(Json::class, $result); } }