Skip to content

Commit 1bde57e

Browse files
committed
Merge branch 'ACP2E-2298' of https://github.com/magento-l3/magento2ce into PR2-L3-09132023
2 parents 67d6184 + 5504861 commit 1bde57e

File tree

2 files changed

+123
-4
lines changed

2 files changed

+123
-4
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
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\Ui\DataProvider;
9+
10+
use Magento\Framework\Api\FilterBuilder;
11+
use Magento\Framework\Api\Search\ReportingInterface;
12+
use Magento\Framework\Api\Search\SearchCriteriaBuilder;
13+
use Magento\Framework\App\RequestInterface;
14+
use Magento\Framework\Filesystem;
15+
use Magento\Framework\Filesystem\Directory\WriteInterface;
16+
use Magento\Framework\Filesystem\DriverInterface;
17+
use Magento\Framework\Filesystem\Io\File;
18+
use Magento\ImportExport\Ui\DataProvider\ExportFileDataProvider;
19+
use PHPUnit\Framework\MockObject\MockObject;
20+
use PHPUnit\Framework\TestCase;
21+
22+
class ExportFileDataProviderTest extends TestCase
23+
{
24+
/**
25+
* @var WriteInterface|MockObject
26+
*/
27+
private $directoryMock;
28+
29+
/**
30+
* @var File|MockObject
31+
*/
32+
private $fileIOMock;
33+
34+
/**
35+
* @var RequestInterface|MockObject
36+
*/
37+
private $requestMock;
38+
39+
/**
40+
* @var ExportFileDataProvider
41+
*/
42+
private ExportFileDataProvider $model;
43+
44+
protected function setUp(): void
45+
{
46+
$reportingMock = $this->createMock(ReportingInterface::class);
47+
$searchCriteriaBuilderMock = $this->createMock(SearchCriteriaBuilder::class);
48+
$this->requestMock = $this->createMock(RequestInterface::class);
49+
$filterBuilderMock = $this->createMock(FilterBuilder::class);
50+
$fileMock = $this->createMock(DriverInterface::class);
51+
$filesystemMock = $this->createMock(Filesystem::class);
52+
$this->directoryMock = $this->createMock(WriteInterface::class);
53+
$filesystemMock->method('getDirectoryWrite')
54+
->willReturn($this->directoryMock);
55+
$this->fileIOMock = $this->createMock(File::class);
56+
57+
$this->model = new ExportFileDataProvider(
58+
'export_grid_data_source',
59+
'file_name',
60+
'file_name',
61+
$reportingMock,
62+
$searchCriteriaBuilderMock,
63+
$this->requestMock,
64+
$filterBuilderMock,
65+
$fileMock,
66+
$filesystemMock,
67+
$this->fileIOMock
68+
);
69+
}
70+
71+
public function testGetData(): void
72+
{
73+
$this->directoryMock->method('getAbsolutePath')
74+
->willReturnCallback(fn ($path) => $path ?: '/var/');
75+
$this->directoryMock->expects(self::once())
76+
->method('isExist')
77+
->with('/var/export/')
78+
->willReturn(true);
79+
$driverMock = $this->createMock(DriverInterface::class);
80+
$this->directoryMock->method('getDriver')
81+
->willReturn($driverMock);
82+
$files = [
83+
'/var/export/file1.csv' => ['mtime' => 1000000001],
84+
'/var/export/file2.csv' => ['mtime' => 1000000002],
85+
'/var/export/file3.csv' => ['mtime' => 1000000002],
86+
'/var/export/file4.csv' => ['mtime' => 1000000003],
87+
];
88+
$driverMock->expects(self::once())
89+
->method('readDirectoryRecursively')
90+
->with('/var/export/')
91+
->willReturn(array_keys($files));
92+
$this->directoryMock->expects(self::exactly(count($files)))
93+
->method('isFile')
94+
->willReturn(true);
95+
$this->directoryMock->method('stat')
96+
->willReturnCallback(fn ($path) => $files[$path]);
97+
$this->fileIOMock->expects(self::exactly(count($files)))
98+
->method('getPathInfo')
99+
->willReturnCallback(
100+
fn ($path) => [
101+
'dirname' => '/var/export',
102+
'extension' => 'csv',
103+
'basename' => str_replace('/var/export/', '', $path),
104+
'filename' => preg_replace('/(.*)\/([a-z0-9]+)(\.csv)/', '$2', $path),
105+
]
106+
);
107+
$this->requestMock->method('getParam')
108+
->with('paging')
109+
->willReturn(['pageSize' => 10, 'current' => 1]);
110+
111+
$data = $this->model->getData();
112+
self::assertEquals(count($files), $data['totalRecords']);
113+
self::assertEquals(
114+
['file4.csv', 'file2.csv', 'file3.csv', 'file1.csv'],
115+
array_column($data['items'], 'file_name')
116+
);
117+
}
118+
}

app/code/Magento/ImportExport/Ui/DataProvider/ExportFileDataProvider.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,13 @@ private function getExportFiles(string $directoryPath): array
162162
foreach ($files as $filePath) {
163163
$filePath = $this->directory->getAbsolutePath($filePath);
164164
if ($this->directory->isFile($filePath)) {
165-
$fileModificationTime = $this->directory->stat($filePath)['mtime'];
166-
$sortedFiles[$fileModificationTime] = $filePath;
165+
$sortedFiles[] = $filePath;
167166
}
168167
}
169-
//sort array elements using key value
170-
krsort($sortedFiles);
168+
usort(
169+
$sortedFiles,
170+
fn ($f1, $f2) => ($this->directory->stat($f1)['mtime'] <=> $this->directory->stat($f2)['mtime']) * -1
171+
);
171172

172173
return $sortedFiles;
173174
}

0 commit comments

Comments
 (0)