Skip to content

Commit 4431026

Browse files
committed
Merge remote-tracking branch 'origin/AC-8384-v1' into spartans_pr_18042023
2 parents 0eb5733 + 8a5cc5f commit 4431026

File tree

2 files changed

+122
-3
lines changed

2 files changed

+122
-3
lines changed

app/code/Magento/ImportExport/Model/Source/Upload.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
namespace Magento\ImportExport\Model\Source;
99

10+
use Laminas\File\Transfer\Adapter\Http;
11+
use Laminas\Validator\File\Upload as FileUploadValidator;
1012
use Magento\Framework\App\Filesystem\DirectoryList;
1113
use Magento\Framework\Exception\LocalizedException;
1214
use Magento\Framework\Filesystem;
@@ -74,19 +76,23 @@ public function __construct(
7476
*/
7577
public function uploadSource(string $entity)
7678
{
77-
/** @var $adapter \Zend_File_Transfer_Adapter_Http */
79+
/**
80+
* @var $adapter Http
81+
*/
7882
$adapter = $this->httpFactory->create();
7983
if (!$adapter->isValid(Import::FIELD_NAME_SOURCE_FILE)) {
8084
$errors = $adapter->getErrors();
81-
if ($errors[0] == \Zend_Validate_File_Upload::INI_SIZE) {
85+
if ($errors[0] == FileUploadValidator::INI_SIZE) {
8286
$errorMessage = $this->importExportData->getMaxUploadSizeMessage();
8387
} else {
8488
$errorMessage = __('The file was not uploaded.');
8589
}
8690
throw new LocalizedException($errorMessage);
8791
}
8892

89-
/** @var $uploader Uploader */
93+
/**
94+
* @var $uploader Uploader
95+
*/
9096
$uploader = $this->uploaderFactory->create(['fileId' => Import::FIELD_NAME_SOURCE_FILE]);
9197
$uploader->setAllowedExtensions(['csv', 'zip']);
9298
$uploader->skipDbProcessing(true);
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\ImportExport\Test\Unit\Model\Source;
9+
10+
use Laminas\File\Transfer\Adapter\Http;
11+
use Magento\Framework\Filesystem;
12+
use Magento\Framework\Filesystem\Directory\WriteInterface;
13+
use Magento\Framework\HTTP\Adapter\FileTransferFactory;
14+
use Magento\Framework\Math\Random;
15+
use Magento\ImportExport\Helper\Data as DataHelper;
16+
use Magento\ImportExport\Model\Source\Upload;
17+
use Magento\MediaStorage\Model\File\Uploader;
18+
use Magento\MediaStorage\Model\File\UploaderFactory;
19+
use PHPUnit\Framework\TestCase;
20+
21+
class UploadTest extends TestCase
22+
{
23+
/**
24+
* @var Upload
25+
*/
26+
private Upload $upload;
27+
28+
/**
29+
* @var FileTransferFactory
30+
*/
31+
protected FileTransferFactory $httpFactoryMock;
32+
33+
/**
34+
* @var DataHelper
35+
*/
36+
private DataHelper $importExportDataMock;
37+
38+
/**
39+
* @var UploaderFactory
40+
*/
41+
private UploaderFactory $uploaderFactoryMock;
42+
43+
/**
44+
* @var Random
45+
*/
46+
private Random $randomMock;
47+
48+
/**
49+
* @var Filesystem
50+
*/
51+
protected Filesystem $filesystemMock;
52+
53+
/**
54+
* @var Http
55+
*/
56+
private Http $adapterMock;
57+
58+
/**
59+
* @var Uploader
60+
*/
61+
private Uploader $uploaderMock;
62+
63+
protected function setUp(): void
64+
{
65+
$directoryAbsolutePath = 'importexport/';
66+
$this->httpFactoryMock = $this->createPartialMock(FileTransferFactory::class, ['create']);
67+
$this->importExportDataMock = $this->createMock(DataHelper::class);
68+
$this->uploaderFactoryMock = $this->getMockBuilder(UploaderFactory::class)
69+
->disableOriginalConstructor()
70+
->getMock();
71+
$this->randomMock = $this->getMockBuilder(Random::class)
72+
->disableOriginalConstructor()
73+
->getMock();
74+
$this->filesystemMock = $this->createMock(Filesystem::class);
75+
$this->adapterMock = $this->createMock(Http::class);
76+
$directoryWriteMock = $this->getMockBuilder(WriteInterface::class)
77+
->disableOriginalConstructor()
78+
->getMock();
79+
$directoryWriteMock->expects($this->once())->method('getAbsolutePath')->willReturn($directoryAbsolutePath);
80+
$this->filesystemMock->expects($this->once())->method('getDirectoryWrite')->willReturn($directoryWriteMock);
81+
$this->upload = new Upload(
82+
$this->httpFactoryMock,
83+
$this->importExportDataMock,
84+
$this->uploaderFactoryMock,
85+
$this->randomMock,
86+
$this->filesystemMock
87+
);
88+
}
89+
90+
/**
91+
* @return void
92+
*/
93+
public function testValidateFileUploadReturnsSavedFileArray(): void
94+
{
95+
$allowedExtensions = ['csv', 'zip'];
96+
$savedFileName = 'testString';
97+
$importFileId = 'import_file';
98+
$randomStringLength=32;
99+
$this->adapterMock->method('isValid')->willReturn(true);
100+
$this->httpFactoryMock->method('create')->willReturn($this->adapterMock);
101+
$this->uploaderMock = $this->createMock(Uploader::class);
102+
$this->uploaderMock->method('setAllowedExtensions')->with($allowedExtensions);
103+
$this->uploaderMock->method('skipDbProcessing')->with(true);
104+
$this->uploaderFactoryMock->method('create')
105+
->with(['fileId' => $importFileId])
106+
->willReturn($this->uploaderMock);
107+
$this->randomMock->method('getRandomString')->with($randomStringLength);
108+
$this->uploaderMock->method('save')->willReturn(['file' => $savedFileName]);
109+
$result = $this->upload->uploadSource($savedFileName);
110+
$this->assertIsArray($result);
111+
$this->assertEquals($savedFileName, $result['file']);
112+
}
113+
}

0 commit comments

Comments
 (0)