Skip to content

Commit c903aa8

Browse files
committed
ACP2E-2298: does not shows all files in the export grid having the same timestamp
1 parent ab0c0b5 commit c903aa8

File tree

2 files changed

+122
-4
lines changed

2 files changed

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

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)