ShowTest.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Swatches\Test\Unit\Controller\Adminhtml\Iframe;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  8. /**
  9. * Class to show swatch image and save it on disk
  10. *
  11. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  12. */
  13. class ShowTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\App\Action\Context */
  16. protected $contextMock;
  17. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Response */
  18. protected $responseMock;
  19. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Swatches\Helper\Media */
  20. protected $swatchHelperMock;
  21. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Image\AdapterFactory */
  22. protected $adapterFactoryMock;
  23. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Image\Adapter */
  24. protected $adapterMock;
  25. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product\Media\Config */
  26. protected $configMock;
  27. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Filesystem */
  28. protected $filesystemMock;
  29. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Filesystem\Directory\Read */
  30. protected $mediaDirectoryMock;
  31. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\MediaStorage\Model\File\UploaderFactory */
  32. protected $uploaderFactoryMock;
  33. /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\MediaStorage\Model\File\Uploader */
  34. protected $uploaderMock;
  35. /** @var ObjectManager|\Magento\Swatches\Controller\Adminhtml\Iframe\Show */
  36. protected $controller;
  37. protected function setUp()
  38. {
  39. $this->contextMock = $this->createMock(\Magento\Backend\App\Action\Context::class);
  40. $observerMock = $this->createMock(\Magento\Framework\Event\Manager::class);
  41. $this->responseMock = $this->createPartialMock(\Magento\Framework\App\Response\Http::class, ['setBody']);
  42. $this->contextMock->expects($this->once())->method('getEventManager')->willReturn($observerMock);
  43. $this->contextMock->expects($this->once())->method('getResponse')->willReturn($this->responseMock);
  44. $this->swatchHelperMock = $this->createMock(\Magento\Swatches\Helper\Media::class);
  45. $this->adapterFactoryMock = $this->createPartialMock(
  46. \Magento\Framework\Image\AdapterFactory::class,
  47. ['create']
  48. );
  49. $this->configMock = $this->createMock(\Magento\Catalog\Model\Product\Media\Config::class);
  50. $this->filesystemMock = $this->createMock(\Magento\Framework\Filesystem::class);
  51. $this->uploaderFactoryMock = $this->createPartialMock(
  52. \Magento\MediaStorage\Model\File\UploaderFactory::class,
  53. ['create']
  54. );
  55. $this->uploaderMock = $this->createMock(\Magento\MediaStorage\Model\File\Uploader::class);
  56. $this->adapterMock = $this->createMock(\Magento\Framework\Image\Adapter\AdapterInterface::class);
  57. $this->mediaDirectoryMock = $this->createMock(\Magento\Framework\Filesystem\Directory\Read::class);
  58. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  59. $this->controller = $objectManager->getObject(
  60. \Magento\Swatches\Controller\Adminhtml\Iframe\Show::class,
  61. [
  62. 'context' => $this->contextMock,
  63. 'swatchHelper' => $this->swatchHelperMock,
  64. 'adapterFactory' => $this->adapterFactoryMock,
  65. 'config' => $this->configMock,
  66. 'filesystem' => $this->filesystemMock,
  67. 'uploaderFactory' => $this->uploaderFactoryMock,
  68. ]
  69. );
  70. }
  71. public function testExecuteException()
  72. {
  73. $this->uploaderFactoryMock
  74. ->expects($this->once())
  75. ->method('create')
  76. ->will($this->throwException(new \Exception()));
  77. $this->controller->execute();
  78. }
  79. /**
  80. * @dataProvider dataForExecute
  81. */
  82. public function testExecute($fileResult, $expectedResult)
  83. {
  84. $this->uploaderFactoryMock->expects($this->once())->method('create')->willReturn($this->uploaderMock);
  85. $this->adapterFactoryMock->expects($this->once())->method('create')->willReturn($this->adapterMock);
  86. $this->filesystemMock
  87. ->expects($this->once())
  88. ->method('getDirectoryRead')
  89. ->with('media')
  90. ->willReturn($this->mediaDirectoryMock);
  91. $this->uploaderMock->expects($this->once())->method('save')->willReturn($fileResult);
  92. $this->configMock
  93. ->expects($this->once())
  94. ->method('getTmpMediaUrl')
  95. ->with($fileResult['file'])
  96. ->willReturn('http://domain.com/tpm_dir/m/a/magento.png');
  97. $this->swatchHelperMock
  98. ->expects($this->once())
  99. ->method('moveImageFromTmp')
  100. ->with('/m/a/magento.png.tmp')
  101. ->willReturn('/m/a/magento.png');
  102. $this->swatchHelperMock->expects($this->once())->method('generateSwatchVariations');
  103. $this->swatchHelperMock
  104. ->expects($this->once())
  105. ->method('getSwatchMediaUrl')
  106. ->willReturn('http://domain.com/media/path/');
  107. $this->responseMock->expects($this->once())->method('setBody')->willReturn(json_encode($expectedResult));
  108. $this->controller->execute();
  109. }
  110. /**
  111. * @return array
  112. */
  113. public function dataForExecute()
  114. {
  115. return [
  116. [
  117. [
  118. 'name' => 'magento.png',
  119. 'type' => 'image/png',
  120. 'tmp_name' => '/tmp/sdgsergdf',
  121. 'error' => 0,
  122. 'size' => 43233,
  123. 'path' => '/full/path/to/dir',
  124. 'file' => '/m/a/magento.png',
  125. ],
  126. [
  127. 'name' => 'magento.png',
  128. 'type' => 'image/png',
  129. 'tmp_name' => '/tmp/sdgsergdf',
  130. 'error' => 0,
  131. 'size' => 43233,
  132. 'file' => '/m/a/magento.png.tmp',
  133. 'url' => 'http://domain.com/tpm_dir/m/a/magento.png',
  134. ]
  135. ],
  136. ];
  137. }
  138. }