ImageUploaderTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Catalog\Test\Unit\Model;
  7. class ImageUploaderTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Catalog\Model\ImageUploader
  11. */
  12. private $imageUploader;
  13. /**
  14. * Core file storage database
  15. *
  16. * @var \Magento\MediaStorage\Helper\File\Storage\Database|\PHPUnit_Framework_MockObject_MockObject
  17. */
  18. private $coreFileStorageDatabaseMock;
  19. /**
  20. * Media directory object (writable).
  21. *
  22. * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. private $mediaDirectoryMock;
  25. /**
  26. * Media directory object (writable).
  27. *
  28. * @var \Magento\Framework\Filesystem\Directory\WriteInterface|\PHPUnit_Framework_MockObject_MockObject
  29. */
  30. private $mediaWriteDirectoryMock;
  31. /**
  32. * Uploader factory
  33. *
  34. * @var \Magento\MediaStorage\Model\File\UploaderFactory|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. private $uploaderFactoryMock;
  37. /**
  38. * Store manager
  39. *
  40. * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  41. */
  42. private $storeManagerMock;
  43. /**
  44. * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
  45. */
  46. private $loggerMock;
  47. /**
  48. * Base tmp path
  49. *
  50. * @var string
  51. */
  52. private $baseTmpPath;
  53. /**
  54. * Base path
  55. *
  56. * @var string
  57. */
  58. private $basePath;
  59. /**
  60. * Allowed extensions
  61. *
  62. * @var array
  63. */
  64. private $allowedExtensions;
  65. /**
  66. * Allowed mime types
  67. *
  68. * @var array
  69. */
  70. private $allowedMimeTypes;
  71. protected function setUp()
  72. {
  73. $this->coreFileStorageDatabaseMock = $this->createMock(
  74. \Magento\MediaStorage\Helper\File\Storage\Database::class
  75. );
  76. $this->mediaDirectoryMock = $this->createMock(
  77. \Magento\Framework\Filesystem::class
  78. );
  79. $this->mediaWriteDirectoryMock = $this->createMock(
  80. \Magento\Framework\Filesystem\Directory\WriteInterface::class
  81. );
  82. $this->mediaDirectoryMock->expects($this->any())->method('getDirectoryWrite')->willReturn(
  83. $this->mediaWriteDirectoryMock
  84. );
  85. $this->uploaderFactoryMock = $this->createMock(
  86. \Magento\MediaStorage\Model\File\UploaderFactory::class
  87. );
  88. $this->storeManagerMock = $this->createMock(
  89. \Magento\Store\Model\StoreManagerInterface::class
  90. );
  91. $this->loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class);
  92. $this->baseTmpPath = 'base/tmp/';
  93. $this->basePath = 'base/real/';
  94. $this->allowedExtensions = ['.jpg'];
  95. $this->allowedMimeTypes = ['image/jpg', 'image/jpeg', 'image/gif', 'image/png'];
  96. $this->imageUploader =
  97. new \Magento\Catalog\Model\ImageUploader(
  98. $this->coreFileStorageDatabaseMock,
  99. $this->mediaDirectoryMock,
  100. $this->uploaderFactoryMock,
  101. $this->storeManagerMock,
  102. $this->loggerMock,
  103. $this->baseTmpPath,
  104. $this->basePath,
  105. $this->allowedExtensions,
  106. $this->allowedMimeTypes
  107. );
  108. }
  109. public function testSaveFileToTmpDir()
  110. {
  111. $fileId = 'file.jpg';
  112. $allowedMimeTypes = [
  113. 'image/jpg',
  114. 'image/jpeg',
  115. 'image/gif',
  116. 'image/png',
  117. ];
  118. /** @var \Magento\MediaStorage\Model\File\Uploader|\PHPUnit_Framework_MockObject_MockObject $uploader */
  119. $uploader = $this->createMock(\Magento\MediaStorage\Model\File\Uploader::class);
  120. $this->uploaderFactoryMock->expects($this->once())->method('create')->willReturn($uploader);
  121. $uploader->expects($this->once())->method('setAllowedExtensions')->with($this->allowedExtensions);
  122. $uploader->expects($this->once())->method('setAllowRenameFiles')->with(true);
  123. $this->mediaWriteDirectoryMock->expects($this->once())->method('getAbsolutePath')->with($this->baseTmpPath)
  124. ->willReturn($this->basePath);
  125. $uploader->expects($this->once())->method('save')->with($this->basePath)
  126. ->willReturn(['tmp_name' => $this->baseTmpPath, 'file' => $fileId, 'path' => $this->basePath]);
  127. $uploader->expects($this->atLeastOnce())->method('checkMimeType')->with($allowedMimeTypes)->willReturn(true);
  128. $storeMock = $this->createPartialMock(
  129. \Magento\Store\Model\Store::class,
  130. ['getBaseUrl']
  131. );
  132. $this->storeManagerMock->expects($this->once())->method('getStore')->willReturn($storeMock);
  133. $storeMock->expects($this->once())->method('getBaseUrl');
  134. $this->coreFileStorageDatabaseMock->expects($this->once())->method('saveFile');
  135. $result = $this->imageUploader->saveFileToTmpDir($fileId);
  136. $this->assertArrayNotHasKey('path', $result);
  137. }
  138. }